Generated from
packages/schema/v1.jsonbyscripts/config-reference.mjs— do not edit this file. Improve a text in the schema'sdescription, then runpnpm docs:reference;config-reference.test.tsfails while this page is stale. The concept, an annotated example and the layer-type matrix are in 04-configuration.md.
One JSON document per map: basemaps, layer tree, controls, popups, search, print, theming, i18n. Only "version" and one basemap are required — everything else has documented defaults. https://map0.net
Schema: https://map0.net/schema/v1.json · config format version 1.
Every key is optional unless marked required; the third column shows the default a missing key gets.
Objects reject unknown keys in the schema (that is the editor squiggle) — the runtime validator only warns about them, so a config written for a newer map0 still opens.
The schema checks structure; the runtime validator additionally enforces the https-URL policy, id uniqueness and cross-field rules.
Types read as follows: T[] and "array of X" are arrays, a or b accepts either shape, "a" · "b" is one of the listed values, { "…": T } is an object with arbitrary keys and T values.
- Top level
- Layers
- Layer sub-objects
- Controls
- Search, print, theme, i18n, permalink
- Coordinate reference systems
| Key | Type | Required · default | Description |
|---|---|---|---|
$schema |
string |
— | URL of this JSON Schema — enables autocomplete and validation in editors. Not read by map0. |
version |
1 |
required | config format major version — map0 1.x reads version 1 |
extends |
string |
— | URL of a base config to inherit (org-wide basemaps, theme, …). Local keys win; objects merge recursively, arrays replace as a whole. Chains up to depth 3. A config with "extends" may leave out "basemaps" when the base provides them. |
meta |
meta |
— | title/description of the map — used in the print header and as the accessible label |
map |
map |
— | initial view and view constraints |
basemaps |
array of basemap (at least 1) | required unless extends is set |
exclusive background layers — exactly one is active at a time; at least one is required |
layers |
array of layer | — | overlay tree (groups + layers) — top of the list = top of the map; runtime-added layers go above all of them |
controls |
controls |
— | which UI controls exist and where — every control has a sensible default; set one to false to remove it |
search |
search |
— | type-ahead geocoding search box — present in the UI once this key exists |
print |
print |
— | what the print & export dialog offers — the dialog itself is toggled by "controls.print" |
theme |
theme |
— | design tokens for the UI |
i18n |
i18n |
— | language of the UI |
permalink |
boolean or permalink options |
false |
shareable map state in the URL hash (view, basemap, layer states, user-added layers) — opt-in; true uses the parameter name "map0". Two viewers on one page need different "param" values. |
Used by: Top level meta
title/description of the map — used in the print header and as the accessible label
| Key | Type | Required · default | Description |
|---|---|---|---|
title |
string |
— | map title (print header, aria-label) |
description |
string |
— | short description of the map |
Used by: Top level map
initial view and view constraints
| Key | Type | Required · default | Description |
|---|---|---|---|
center |
[number, number] |
— | initial center as [longitude, latitude] (WGS84) |
zoom |
number (0–24) |
— | initial zoom level (0–24) |
bounds |
number[] (4 items) |
— | initial view as [west, south, east, north] (WGS84) — wins over center/zoom when set |
minZoom |
number (0–24) |
— | the user cannot zoom out beyond this level |
maxZoom |
number (0–24) |
— | the user cannot zoom in beyond this level |
maxBounds |
number[] (4 items) |
— | pan constraint as [west, south, east, north] (WGS84) |
bearing |
number (−360 to 360) |
— | initial rotation in degrees |
pitch |
number (0–85) |
— | initial tilt in degrees |
projection |
"mercator" · "globe" |
"mercator" |
initial projection — the globe control lets users toggle at runtime |
hash |
boolean |
false |
opt-in URL-hash view sync — superseded by the top-level "permalink" key |
cooperativeGestures |
boolean |
false |
gestures need a modifier: Ctrl/⌘ + scroll to zoom, two fingers to pan — so a map embedded in a scrolling page does not trap one-finger scrolling |
Used by: Top level basemaps
an exclusive background layer
| Key | Type | Required · default | Description |
|---|---|---|---|
id |
string (non-empty) |
— | stable id — one namespace with layer ids (permalink and the JS API address both by id); generated from the title when omitted |
title |
string |
— | label in the basemap switcher |
type |
"style" · "raster" · "empty" |
required | "style": MapLibre style JSON (vector basemap) · "raster": XYZ/WMTS-REST tile template · "empty": no background |
url |
string |
required unless type is "empty" |
style: MapLibre style URL · raster: tile template with {z}/{x}/{y} placeholders. https required on https pages. |
tileSize |
number (1–4096) |
256 |
raster tile size in px |
minZoom |
number (0–24) |
— | raster: lowest zoom level the tile source provides — zoomed out further, no tiles are requested and only the background colour shows |
maxZoom |
number (0–24) |
— | raster: highest zoom level the tile source provides — zooming in further scales that level instead of requesting tiles that do not exist |
attribution |
string |
— | attribution line, e.g. "© basemap.at" |
thumbnail |
string |
— | "auto" renders a mini preview, or an image URL |
default |
boolean |
— | start with this basemap (otherwise the first one) |
Used by: Top level layers · group layer children
a node of the overlay tree: a group or a layer, discriminated by "type"
type |
Section | Description |
|---|---|---|
"group" |
group layer |
a group node in the layer tree |
"wms" |
wms layer |
OGC WMS layer (tiled GetMap) — "info" enables GetFeatureInfo, "legend": "auto" uses GetLegendGraphic |
"wmts" |
wmts layer |
OGC WMTS layer, resolved from the service capabilities (image tiles; matrix set, format, bounds and legend are picked automatically) |
"wfs" |
wfs layer |
OGC WFS layer: features are fetched as GeoJSON via GetFeature (WGS84), paged with count/startIndex on 2.0.0, then rendered exactly like a geojson layer — clustering, popups and hover tooltips work the same |
"ogcapi-features" |
ogcapi-features layer |
OGC API Features layer: the collection's items are fetched as GeoJSON (WGS84 by default), paged by following the response's "next" links, then rendered exactly like a geojson layer — clustering, popups and hover tooltips work the same |
"raster" |
raster layer |
raster tile overlay from an XYZ/WMTS-REST template |
"cog" |
cog layer |
Cloud Optimized GeoTIFF, read straight from storage via HTTP range requests. RGB/grayscale by default; "color" renders a single band through a color ramp, "hillshade" renders a single-band DEM as relief shading. Bounds and zoom range come from the file header. |
"geojson" |
geojson layer |
GeoJSON overlay — by URL or inline; supports clustering, popups and hover tooltips |
"geoparquet" |
geoparquet layer |
GeoParquet overlay — the file is downloaded and decoded in the browser (a fraction of the transfer size of the same data as GeoJSON), then rendered exactly like a geojson layer: clustering, popups and hover tooltips work the same. Coordinates in another CRS are reprojected on load — the CRS comes from the file's own geo metadata, or from crs. The decoder loads on demand. |
"vector" |
vector layer |
vector tile overlay styled client-side with MapLibre style-spec layers |
Keys every layer type accepts (except group, which is a container node). The per-type sections below list only what comes on top.
| Key | Type | Required · default | Description |
|---|---|---|---|
id |
string (non-empty) |
— | stable id used by permalink, share state and the JS API — one namespace with basemap ids; generated from the title when omitted |
title |
string |
— | label in the layer tree |
visible |
boolean |
true |
initially visible |
opacity |
number (0–1) |
1 |
layer opacity, 0–1 |
minZoom |
number (0–24) |
— | hide the layer below this zoom (the layer tree shows a zoom-range hint) |
maxZoom |
number (0–24) |
— | hide the layer above this zoom |
bounds |
number[] (4 items) |
— | [west, south, east, north] (WGS84) — enables "zoom to layer"; auto-filled from capabilities where possible |
attribution |
string |
— | attribution shown while the layer is visible |
metadata |
metadata |
— | link to the dataset's metadata record, shown in the layer menu |
legend |
false or string or array of legend entry |
"auto" |
"auto" (default): WMS GetLegendGraphic / swatches derived from the style · false: no legend · string: legend image URL · array: explicit entries |
a group node in the layer tree
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"group" |
required | node type — a group of layers |
title |
string |
— | group label in the layer tree |
collapsed |
boolean |
false |
start collapsed |
exclusive |
boolean |
false |
radio group: one child visible at a time — a child group counts as one option; the first child configured visible starts on, the others hidden |
children |
array of layer | required | nested groups and layers |
OGC WMS layer (tiled GetMap) — "info" enables GetFeatureInfo, "legend": "auto" uses GetLegendGraphic
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"wms" |
required | layer type |
url |
string |
required | WMS endpoint (GetMap base URL) |
layers |
string |
required | WMS LAYERS parameter (comma-separated) |
styles |
string |
— | WMS STYLES parameter |
format |
string |
— | image format, e.g. "image/png" |
version |
"1.1.1" · "1.3.0" |
— | WMS protocol version |
transparent |
boolean |
— | request transparent tiles |
tileSize |
number (1–4096) |
— | request tile size in px |
params |
{ "…": string } |
— | extra vendor parameters appended to GetMap/GetFeatureInfo |
info |
false or info (WMS GetFeatureInfo) |
— | presence enables GetFeatureInfo on click — false disables |
OGC WMTS layer, resolved from the service capabilities (image tiles; matrix set, format, bounds and legend are picked automatically)
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"wmts" |
required | layer type |
url |
string |
required | WMTS GetCapabilities URL (REST or KVP) |
layer |
string |
required | layer identifier from the capabilities |
matrixSet |
string |
— | tile matrix set identifier — default: the first WebMercator-compatible one |
style |
string |
— | style identifier — default: the layer's default style |
format |
string |
— | preferred tile format, e.g. "image/png" |
OGC WFS layer: features are fetched as GeoJSON via GetFeature (WGS84), paged with count/startIndex on 2.0.0, then rendered exactly like a geojson layer — clustering, popups and hover tooltips work the same
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"wfs" |
required | layer type |
url |
string |
required | WFS endpoint (base URL; existing query params like MapServer map= are kept) |
typeNames |
string |
required | feature type to load — the WFS 2.0 GetFeature parameter, e.g. "ogdwien:TRINKBRUNNENOGD" |
version |
"1.1.0" · "2.0.0" |
"2.0.0" |
WFS protocol version — 2.0.0 pages with count/startIndex, 1.1.0 issues one maxFeatures request |
outputFormat |
string |
"application/json" |
GeoJSON output format name the server expects — GeoServer and deegree take the default, MapServer wants "geojson" |
limit |
number (1–1000000) |
10000 |
stop after this many features |
pageSize |
number (1–50000) |
5000 |
features per GetFeature request (2.0.0 only) |
params |
{ "…": string } |
— | extra vendor parameters appended to every GetFeature (cql_filter, sortBy, …) |
style |
object or array of MapLibre style layer |
— | simplified style: one flat paint-property object (circle-*, line-*, fill-* — applied per geometry type) · full control: an array of MapLibre style-spec layers |
cluster |
boolean or cluster options |
— | cluster point features — true, or an options object. Hovering a cluster bubble shows its feature count, clicking it zooms in until it breaks apart |
popup |
false or popup |
— | popup on feature click — false disables |
hover |
false or hover |
— | short tooltip on hover, e.g. { "content": "{{name}}" } — false disables |
promoteId |
string |
— | feature property to use as the feature id (hover/selection state) |
OGC API Features layer: the collection's items are fetched as GeoJSON (WGS84 by default), paged by following the response's "next" links, then rendered exactly like a geojson layer — clustering, popups and hover tooltips work the same
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"ogcapi-features" |
required | layer type |
url |
string |
required | collection URL, e.g. "https://api.example.gv.at/ogc/collections/bezirke" — "/items" is appended if missing |
limit |
number (1–1000000) |
10000 |
stop after this many features |
pageSize |
number (1–50000) |
1000 |
features per request (the "limit" query parameter); paging follows the response's "next" links |
params |
{ "…": string } |
— | extra query parameters appended to the first request (bbox, datetime, filter, properties, …) |
style |
object or array of MapLibre style layer |
— | simplified style: one flat paint-property object (circle-*, line-*, fill-* — applied per geometry type) · full control: an array of MapLibre style-spec layers |
cluster |
boolean or cluster options |
— | cluster point features — true, or an options object. Hovering a cluster bubble shows its feature count, clicking it zooms in until it breaks apart |
popup |
false or popup |
— | popup on feature click — false disables |
hover |
false or hover |
— | short tooltip on hover, e.g. { "content": "{{name}}" } — false disables |
promoteId |
string |
— | feature property to use as the feature id (hover/selection state) |
raster tile overlay from an XYZ/WMTS-REST template
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"raster" |
required | layer type |
url |
string |
required | tile template with {z}/{x}/{y} placeholders |
tileSize |
number (1–4096) |
256 |
tile size in px |
Cloud Optimized GeoTIFF, read straight from storage via HTTP range requests. RGB/grayscale by default; "color" renders a single band through a color ramp, "hillshade" renders a single-band DEM as relief shading. Bounds and zoom range come from the file header.
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"cog" |
required | layer type |
url |
string |
required | Cloud Optimized GeoTIFF URL — the file must be in EPSG:3857 (no client-side reprojection) and the server must answer HTTP range requests |
color |
color (COG) |
— | single-band value → color mapping: a built-in ramp ("scheme"/"min"/"max") or an explicit classification ("classes"). The legend derives its swatches from it. Omit for RGB/grayscale imagery. Mutually exclusive with "hillshade". |
hillshade |
boolean or hillshade options |
— | render a single-band DEM as hillshading — true, or an options object; mutually exclusive with "color". Layer opacity scales the exaggeration. |
GeoJSON overlay — by URL or inline; supports clustering, popups and hover tooltips
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"geojson" |
required | layer type |
data |
string or object |
required | URL of a GeoJSON document, or the GeoJSON inline |
style |
object or array of MapLibre style layer |
— | simplified style: one flat paint-property object (circle-*, line-*, fill-* — applied per geometry type) · full control: an array of MapLibre style-spec layers |
cluster |
boolean or cluster options |
— | cluster point features — true, or an options object. Hovering a cluster bubble shows its feature count, clicking it zooms in until it breaks apart |
popup |
false or popup |
— | popup on feature click — false disables |
hover |
false or hover |
— | short tooltip on hover, e.g. { "content": "{{name}}" } — false disables |
promoteId |
string |
— | feature property to use as the feature id (hover/selection state) |
crs |
string or crs (layer) |
— | CRS of the coordinates when they are not WGS84 — the features are reprojected once on load (proj4). A code the built-in registry knows (EPSG:31254–31256, 31287, 3416, 25832, 25833, 3035, WGS84 UTM 326xx/327xx), or { code, def } with a proj4 definition for anything else |
GeoParquet overlay — the file is downloaded and decoded in the browser (a fraction of the transfer size of the same data as GeoJSON), then rendered exactly like a geojson layer: clustering, popups and hover tooltips work the same. Coordinates in another CRS are reprojected on load — the CRS comes from the file's own geo metadata, or from crs. The decoder loads on demand.
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"geoparquet" |
required | layer type |
url |
string |
required | GeoParquet file URL — the whole file is fetched, so the server needs CORS but no range-request support; a file whose geo metadata names a CRS other than WGS84 is reprojected on load |
style |
object or array of MapLibre style layer |
— | simplified style: one flat paint-property object (circle-*, line-*, fill-* — applied per geometry type) · full control: an array of MapLibre style-spec layers |
cluster |
boolean or cluster options |
— | cluster point features — true, or an options object. Hovering a cluster bubble shows its feature count, clicking it zooms in until it breaks apart |
popup |
false or popup |
— | popup on feature click — false disables |
hover |
false or hover |
— | short tooltip on hover, e.g. { "content": "{{name}}" } — false disables |
promoteId |
string |
— | feature property to use as the feature id (hover/selection state) |
crs |
string or crs (layer) |
— | CRS of the coordinates when they are not WGS84 — the features are reprojected once on load (proj4). A code the built-in registry knows (EPSG:31254–31256, 31287, 3416, 25832, 25833, 3035, WGS84 UTM 326xx/327xx), or { code, def } with a proj4 definition for anything else |
vector tile overlay styled client-side with MapLibre style-spec layers
All Common layer keys apply. Specific to this type:
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
"vector" |
required | layer type |
url |
string |
required | TileJSON URL, {z}/{x}/{y} tile template, or pmtiles:// URL |
sourceLayer |
string |
— | name of the source layer inside the tiles |
style |
array of MapLibre style layer | required | MapLibre style-spec layers — "source"/"source-layer" are injected by map0 |
popup |
false or popup |
— | popup on feature click — false disables |
hover |
false or hover |
— | short tooltip on hover, e.g. { "content": "{{name}}" } — false disables |
Used by: Common layer keys metadata
link to the dataset's metadata record, shown in the layer menu
| Key | Type | Required · default | Description |
|---|---|---|---|
url |
string |
— | URL of the metadata record (catalog entry) |
title |
string |
— | link label |
Used by: Common layer keys legend
one legend entry — a colored swatch or an image, with a label
| Key | Type | Required · default | Description |
|---|---|---|---|
label |
string |
required | entry text |
color |
string |
— | CSS color for the swatch |
shape |
"square" · "line" · "circle" |
"square" |
swatch shape |
image |
string |
— | image URL instead of a color swatch |
Used by: wfs layer popup · ogcapi-features layer popup · geojson layer popup · geoparquet layer popup · vector layer popup
feature popup — templates use {{property}} placeholders and are sanitized before rendering
| Key | Type | Required · default | Description |
|---|---|---|---|
title |
string |
— | title template, e.g. "{{name}}" |
content |
string |
— | HTML template with {{property}} placeholders (sanitized) |
fields |
array of field | — | alternative to "content": render the listed properties as a table |
maxWidth |
string |
— | CSS length, e.g. "320px" |
Used by: wms layer info
GetFeatureInfo popup — templates use {{property}} placeholders and are sanitized before rendering
| Key | Type | Required · default | Description |
|---|---|---|---|
title |
string |
— | title template, e.g. "{{name}}" |
content |
string |
— | HTML template with {{property}} placeholders (sanitized) |
fields |
array of field | — | alternative to "content": render the listed properties as a table |
maxWidth |
string |
— | CSS length, e.g. "320px" |
format |
string |
— | GetFeatureInfo INFO_FORMAT, e.g. "application/json" |
Used by: popup fields · info (WMS GetFeatureInfo) fields
one property to list in the popup table
| Key | Type | Required · default | Description |
|---|---|---|---|
key |
string |
required | feature property name |
label |
string |
— | display label (defaults to the key) |
Used by: wfs layer hover · ogcapi-features layer hover · geojson layer hover · geoparquet layer hover · vector layer hover
hover tooltip — a short template rendered while the pointer rests on a feature. Over a cluster bubble the tooltip shows how many features it holds instead (a cluster has none of the features' properties)
| Key | Type | Required · default | Description |
|---|---|---|---|
content |
string |
required | template with {{property}} placeholders |
Used by: wfs layer cluster · ogcapi-features layer cluster · geojson layer cluster · geoparquet layer cluster
options for point clustering — nearby points collapse into one bubble until the user zooms in
| Key | Type | Required · default | Description |
|---|---|---|---|
enabled |
boolean |
true |
false switches clustering off while keeping the options — same as "cluster": false |
radius |
number (1–1000) |
50 |
cluster radius in px |
maxZoom |
number (0–24) |
14 |
stop clustering above this zoom |
Used by: wfs layer style · ogcapi-features layer style · geojson layer style · geoparquet layer style · vector layer style
a MapLibre style-spec layer — "source"/"source-layer" are injected by map0
| Key | Type | Required · default | Description |
|---|---|---|---|
type |
string |
required | style layer type, e.g. "fill", "line", "circle", "symbol" |
Other keys are allowed here (not checked by the schema).
Used by: cog layer color
single-band value → color mapping: a built-in ramp ("scheme"/"min"/"max") or an explicit classification ("classes"). The legend derives its swatches from it. Omit for RGB/grayscale imagery. Mutually exclusive with "hillshade".
| Key | Type | Required · default | Description |
|---|---|---|---|
scheme |
string |
required unless classes is set |
ColorBrewer/CARTOColors ramp name — "Brewer<Palette><classes>" (e.g. "BrewerSpectral7", "BrewerYlGnBu5") or "Carto<Palette>" (e.g. "CartoEarth") |
min |
number |
required unless classes is set |
data value mapped to the first ramp color |
max |
number |
required unless classes is set |
data value mapped to the last ramp color — must be greater than "min" |
continuous |
boolean |
false |
interpolate between the ramp colors instead of discrete classes |
reverse |
boolean |
false |
reverse the ramp |
classes |
array of color class (COG) (at least 1) | — | explicit classification instead of a ramp: exact values and/or [from, to) ranges, each with its own color. Pixels matching no class (and noData pixels) are transparent. Cannot be combined with "scheme"/"min"/"max". |
When classes is set, scheme, min, max, continuous and reverse cannot be set.
Used by: color (COG) classes
one class: an exact "value" (categorical rasters) or a "from"/"to" range. Ranges include "from" and exclude "to" — except the class with the highest "to", which includes it. Exact values win over ranges.
| Key | Type | Required · default | Description |
|---|---|---|---|
value |
number |
— | exact data value (compared after the COG's scale/offset are applied) |
from |
number |
— | range start, inclusive |
to |
number |
— | range end, exclusive (inclusive for the class with the highest "to") — must be greater than "from" |
color |
string (pattern ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$) |
required | hex color, e.g. "#ef8a62" — 3, 6, or 8 digits (8 = with alpha) |
label |
string |
— | legend text; default: the value, or "from – to" |
Exactly one of these must be set: value · from + to.
Used by: cog layer hillshade
hillshade rendering options (MapLibre hillshade paint)
| Key | Type | Required · default | Description |
|---|---|---|---|
exaggeration |
number (0–1) |
0.5 |
shading intensity |
illuminationDirection |
number (0–359) |
335 |
light azimuth in degrees clockwise from north |
shadowColor |
string |
— | CSS color |
highlightColor |
string |
— | CSS color |
accentColor |
string |
— | CSS color |
Used by: Top level controls
which UI controls exist and where — every control has a sensible default; set one to false to remove it
| Key | Type | Required · default | Description |
|---|---|---|---|
navigation |
boolean |
true |
zoom buttons + compass |
scale |
boolean or scale options |
true |
scale bar |
fullscreen |
boolean |
true |
fullscreen button |
geolocate |
boolean or geolocate options |
true |
geolocate button (asks for browser location permission on use) |
globe |
boolean |
true |
2D/globe projection toggle |
home |
boolean |
false |
button that returns to the initial view |
attribution |
boolean or attribution options |
true |
attribution line |
layerSwitcher |
boolean or layerSwitcher options |
true |
the layer tree panel (TOC) |
basemapSwitcher |
boolean or basemapSwitcher options |
true |
basemap picker — appears only when there are at least two basemaps |
legend |
boolean or legend options (control) |
true |
legend panel |
print |
boolean |
true |
print & export dialog (see the top-level "print" key for what it offers) |
measure |
boolean |
true |
measure distance and area (on the sphere) |
coordinates |
boolean or coordinates options |
true |
coordinate readout on right-click/long-press — default CRS list: WGS 84 + matching Austrian GK strip + matching UTM zone |
Used by: controls scale
options for the scale bar
| Key | Type | Required · default | Description |
|---|---|---|---|
maxWidth |
number (20–500) |
100 |
maximum bar length in px |
unit |
"metric" · "imperial" |
"metric" |
metric (m / km) or imperial (ft / mi) |
Used by: controls geolocate
options for the geolocate button
| Key | Type | Required · default | Description |
|---|---|---|---|
follow |
boolean |
false |
keep the map centered on the position |
Used by: controls attribution
options for the attribution line
| Key | Type | Required · default | Description |
|---|---|---|---|
compact |
true · false · "auto" |
"auto" |
collapse to an ⓘ button — "auto" collapses on small screens |
Used by: controls layerSwitcher
options for the layer tree panel
| Key | Type | Required · default | Description |
|---|---|---|---|
position |
"top-left" · "top-right" · "bottom-left" · "bottom-right" |
"top-right" |
corner of the map the panel docks to |
open |
true · false · "auto" |
"auto" |
"auto": open on desktop, collapsed on mobile |
title |
string |
— | panel heading override |
allowAdd |
boolean |
true |
show the add-layer dialog (paste a WMS/WMTS URL) |
filter |
true · false · "auto" |
"auto" |
filter box above the layer tree — "auto": shown from 10 layers on |
Used by: controls basemapSwitcher
options for the basemap picker
| Key | Type | Required · default | Description |
|---|---|---|---|
position |
"top-left" · "top-right" · "bottom-left" · "bottom-right" |
"bottom-left" |
corner of the map the picker docks to |
Used by: controls legend
options for the legend panel
| Key | Type | Required · default | Description |
|---|---|---|---|
position |
"top-left" · "top-right" · "bottom-left" · "bottom-right" |
"bottom-right" |
corner of the map the panel docks to |
open |
boolean |
false |
start with the panel open |
Used by: controls coordinates
options for the coordinate readout
| Key | Type | Required · default | Description |
|---|---|---|---|
crs |
array of crs (coordinates control) |
— | coordinate systems to offer instead of the default list |
Used by: Top level search
type-ahead geocoding search box — present in the UI once this key exists
| Key | Type | Required · default | Description |
|---|---|---|---|
enabled |
boolean |
true |
false removes the search box |
provider |
"photon" · "nominatim" or provider (custom geocoder) |
"photon" |
geocoder — "photon" (default) · "nominatim" · a custom provider object |
url |
string |
— | override the service instance (self-hosted Photon/Nominatim) |
country |
string |
— | ISO country code to restrict results to, e.g. "AT" |
bias |
boolean |
true |
prefer results near the current view |
limit |
number (1–50) |
8 |
maximum number of results |
minLength |
number (1–20) |
3 |
start searching after this many characters |
placeholder |
string |
— | input placeholder text |
coordinates |
boolean |
true |
accept coordinate input like "48.2083, 16.3725" (latitude first) |
Used by: search provider
custom geocoder: a URL template plus the shape of its answer
| Key | Type | Required · default | Description |
|---|---|---|---|
url |
string (pattern \{query\}) |
required | URL template — placeholders: {query} {limit} {lang} {bbox} {lng} {lat} |
format |
"geojson" · "nominatim" |
— | "geojson": FeatureCollection of points (Photon-like) · "nominatim": array of results |
labelField |
string |
— | property to use as the result label (geojson only; default: name/label/title) |
Used by: Top level print
what the print & export dialog offers — the dialog itself is toggled by "controls.print"
| Key | Type | Required · default | Description |
|---|---|---|---|
formats |
array of "png" · "pdf" |
["png", "pdf"] |
download buttons to show; the browser print view is always available |
sizes |
array of "current" · "A4-landscape" · "A4-portrait" · "A3-landscape" · "A3-portrait" |
["current", "A4-landscape", "A4-portrait"] |
paper sizes offered — "current" is the map viewport as-is |
dpi |
number[] (72–600) |
[96, 150, 300] |
export resolutions offered |
elements |
array of "title" · "legend" · "scalebar" · "attribution" · "date" |
["title", "legend", "scalebar", "attribution", "date"] |
parts of the composed sheet |
Used by: Top level theme
design tokens for the UI
| Key | Type | Required · default | Description |
|---|---|---|---|
mode |
"auto" · "light" · "dark" |
"auto" |
color scheme — "auto" follows the system |
primary |
string |
"#0e7490" |
primary CSS color (buttons, active states) |
radius |
"none" · "sm" · "md" · "lg" |
"md" |
corner radius of panels and buttons |
font |
string |
— | CSS font-family for the UI (inherits the page font when omitted) |
Used by: Top level i18n
language of the UI
| Key | Type | Required · default | Description |
|---|---|---|---|
locale |
string |
"auto" |
BCP 47 locale, or "auto" to detect from the browser |
fallback |
string |
"en" |
locale used for strings the active locale does not cover |
overrides |
{ "…": { "…": string } } |
— | per-locale UI string overrides, e.g. { "de": { "layers.title": "Kartenthemen" } } |
Used by: Top level permalink
options for the URL-hash permalink
| Key | Type | Required · default | Description |
|---|---|---|---|
param |
string (pattern ^[A-Za-z0-9_-]+$) |
"map0" |
hash parameter name — give each viewer on a page its own |
Used by: geojson layer crs · geoparquet layer crs
CRS of a feature file's coordinates, with a proj4 definition for codes the built-in registry does not know
| Key | Type | Required · default | Description |
|---|---|---|---|
code |
string |
required | EPSG code, e.g. "EPSG:31256" |
def |
string |
— | proj4 definition — required for CRS the built-in registry does not know (and for the datum shift a file's PROJJSON may lack) |
Used by: coordinates options crs
a coordinate system offered in the coordinate readout — codes the built-in registry knows need no "def"
| Key | Type | Required · default | Description |
|---|---|---|---|
code |
string |
required | EPSG code, e.g. "EPSG:31256" |
label |
string |
— | display label (defaults to the code) |
def |
string |
— | proj4 definition — required for CRS the built-in registry does not know |