Skip to content

MapConfigSchema

const MapConfigSchema: ZodObject<{ antialias: ZodOptional<ZodBoolean>; attributionControl: ZodOptional<ZodBoolean>; bearing: ZodDefault<ZodNumber>; bounds: ZodOptional<ZodUnion<[ZodTuple<[ZodNumber, ZodNumber, ZodNumber, ZodNumber], null>, ZodArray<ZodNumber, "many">]>>; boxZoom: ZodOptional<ZodBoolean>; center: ZodTuple<[ZodNumber, ZodNumber], null>; crossSourceCollisions: ZodOptional<ZodBoolean>; doubleClickZoom: ZodOptional<ZodBoolean>; dragPan: ZodOptional<ZodBoolean>; dragRotate: ZodOptional<ZodBoolean>; fadeDuration: ZodOptional<ZodNumber>; failIfMajorPerformanceCaveat: ZodOptional<ZodBoolean>; fitTo: ZodOptional<ZodObject<{ maxZoom: ZodOptional<ZodNumber>; padding: ZodOptional<ZodNumber>; source: ZodString; }, "strip", ZodTypeAny, { maxZoom?: number; padding?: number; source: string; }, { maxZoom?: number; padding?: number; source: string; }>>; hash: ZodOptional<ZodBoolean>; interactive: ZodDefault<ZodBoolean>; keyboard: ZodOptional<ZodBoolean>; locale: ZodOptional<ZodRecord<ZodString, ZodString>>; localIdeographFontFamily: ZodOptional<ZodString>; logoPosition: ZodOptional<ZodEnum<["top-left", "top-right", "bottom-left", "bottom-right"]>>; mapStyle: ZodOptional<ZodUnion<[ZodString, ZodAny]>>; maxBounds: ZodOptional<ZodTuple<[ZodNumber, ZodNumber, ZodNumber, ZodNumber], null>>; maxPitch: ZodOptional<ZodNumber>; maxTileCacheSize: ZodOptional<ZodNumber>; maxZoom: ZodOptional<ZodNumber>; minPitch: ZodOptional<ZodNumber>; minZoom: ZodOptional<ZodNumber>; pitch: ZodDefault<ZodNumber>; preserveDrawingBuffer: ZodOptional<ZodBoolean>; refreshExpiredTiles: ZodOptional<ZodBoolean>; renderWorldCopies: ZodOptional<ZodBoolean>; scrollZoom: ZodOptional<ZodBoolean>; touchPitch: ZodOptional<ZodBoolean>; touchZoomRotate: ZodOptional<ZodBoolean>; trackResize: ZodOptional<ZodBoolean>; zoom: ZodNumber; }, "passthrough", ZodTypeAny, objectOutputType<{ antialias: ZodOptional<ZodBoolean>; attributionControl: ZodOptional<ZodBoolean>; bearing: ZodDefault<ZodNumber>; bounds: ZodOptional<ZodUnion<[ZodTuple<[ZodNumber, ZodNumber, ZodNumber, ZodNumber], null>, ZodArray<ZodNumber, "many">]>>; boxZoom: ZodOptional<ZodBoolean>; center: ZodTuple<[ZodNumber, ZodNumber], null>; crossSourceCollisions: ZodOptional<ZodBoolean>; doubleClickZoom: ZodOptional<ZodBoolean>; dragPan: ZodOptional<ZodBoolean>; dragRotate: ZodOptional<ZodBoolean>; fadeDuration: ZodOptional<ZodNumber>; failIfMajorPerformanceCaveat: ZodOptional<ZodBoolean>; fitTo: ZodOptional<ZodObject<{ maxZoom: ZodOptional<ZodNumber>; padding: ZodOptional<ZodNumber>; source: ZodString; }, "strip", ZodTypeAny, { maxZoom?: number; padding?: number; source: string; }, { maxZoom?: number; padding?: number; source: string; }>>; hash: ZodOptional<ZodBoolean>; interactive: ZodDefault<ZodBoolean>; keyboard: ZodOptional<ZodBoolean>; locale: ZodOptional<ZodRecord<ZodString, ZodString>>; localIdeographFontFamily: ZodOptional<ZodString>; logoPosition: ZodOptional<ZodEnum<["top-left", "top-right", "bottom-left", "bottom-right"]>>; mapStyle: ZodOptional<ZodUnion<[ZodString, ZodAny]>>; maxBounds: ZodOptional<ZodTuple<[ZodNumber, ZodNumber, ZodNumber, ZodNumber], null>>; maxPitch: ZodOptional<ZodNumber>; maxTileCacheSize: ZodOptional<ZodNumber>; maxZoom: ZodOptional<ZodNumber>; minPitch: ZodOptional<ZodNumber>; minZoom: ZodOptional<ZodNumber>; pitch: ZodDefault<ZodNumber>; preserveDrawingBuffer: ZodOptional<ZodBoolean>; refreshExpiredTiles: ZodOptional<ZodBoolean>; renderWorldCopies: ZodOptional<ZodBoolean>; scrollZoom: ZodOptional<ZodBoolean>; touchPitch: ZodOptional<ZodBoolean>; touchZoomRotate: ZodOptional<ZodBoolean>; trackResize: ZodOptional<ZodBoolean>; zoom: ZodNumber; }, ZodTypeAny, "passthrough">, objectInputType<{ antialias: ZodOptional<ZodBoolean>; attributionControl: ZodOptional<ZodBoolean>; bearing: ZodDefault<ZodNumber>; bounds: ZodOptional<ZodUnion<[ZodTuple<[ZodNumber, ZodNumber, ZodNumber, ZodNumber], null>, ZodArray<ZodNumber, "many">]>>; boxZoom: ZodOptional<ZodBoolean>; center: ZodTuple<[ZodNumber, ZodNumber], null>; crossSourceCollisions: ZodOptional<ZodBoolean>; doubleClickZoom: ZodOptional<ZodBoolean>; dragPan: ZodOptional<ZodBoolean>; dragRotate: ZodOptional<ZodBoolean>; fadeDuration: ZodOptional<ZodNumber>; failIfMajorPerformanceCaveat: ZodOptional<ZodBoolean>; fitTo: ZodOptional<ZodObject<{ maxZoom: ZodOptional<ZodNumber>; padding: ZodOptional<ZodNumber>; source: ZodString; }, "strip", ZodTypeAny, { maxZoom?: number; padding?: number; source: string; }, { maxZoom?: number; padding?: number; source: string; }>>; hash: ZodOptional<ZodBoolean>; interactive: ZodDefault<ZodBoolean>; keyboard: ZodOptional<ZodBoolean>; locale: ZodOptional<ZodRecord<ZodString, ZodString>>; localIdeographFontFamily: ZodOptional<ZodString>; logoPosition: ZodOptional<ZodEnum<["top-left", "top-right", "bottom-left", "bottom-right"]>>; mapStyle: ZodOptional<ZodUnion<[ZodString, ZodAny]>>; maxBounds: ZodOptional<ZodTuple<[ZodNumber, ZodNumber, ZodNumber, ZodNumber], null>>; maxPitch: ZodOptional<ZodNumber>; maxTileCacheSize: ZodOptional<ZodNumber>; maxZoom: ZodOptional<ZodNumber>; minPitch: ZodOptional<ZodNumber>; minZoom: ZodOptional<ZodNumber>; pitch: ZodDefault<ZodNumber>; preserveDrawingBuffer: ZodOptional<ZodBoolean>; refreshExpiredTiles: ZodOptional<ZodBoolean>; renderWorldCopies: ZodOptional<ZodBoolean>; scrollZoom: ZodOptional<ZodBoolean>; touchPitch: ZodOptional<ZodBoolean>; touchZoomRotate: ZodOptional<ZodBoolean>; trackResize: ZodOptional<ZodBoolean>; zoom: ZodNumber; }, ZodTypeAny, "passthrough">>

Defined in: packages/core/src/schemas/map.schema.ts:328

Map configuration with MapLibre options.

Core map configuration including initial view, style, and interaction settings. Uses .passthrough() to allow any MapLibre GL JS options.

Required:

  • center - Initial map center [lng, lat]
  • zoom - Initial zoom level (0-24)

Optional (with global fallback):

  • mapStyle - MapLibre style URL or object. When omitted, inherits from global config.defaultMapStyle. Required if no global default is set.

View Options:

  • pitch - Camera tilt angle (0-85)
  • bearing - Camera rotation (0-360)
  • bounds - Fit to bounds
  • minZoom, maxZoom - Zoom constraints
  • minPitch, maxPitch - Pitch constraints
  • maxBounds - Geographic bounds constraint

Interaction:

  • interactive - Enable/disable all interactions
  • scrollZoom, boxZoom, dragRotate, dragPan - Individual controls
  • keyboard, doubleClickZoom, touchZoomRotate, touchPitch

Basic Map (explicit style)

config:
center: [-74.006, 40.7128]
zoom: 12
mapStyle: "https://demotiles.maplibre.org/style.json"

Map with Global Style Inheritance

# Root config sets default style
config:
defaultMapStyle: "https://demotiles.maplibre.org/style.json"
pages:
- blocks:
- type: map
id: simple-map
config:
center: [-74.006, 40.7128]
zoom: 12
# mapStyle inherited from config.defaultMapStyle

3D View

config:
center: [-122.4194, 37.7749]
zoom: 15
pitch: 60
bearing: 30
mapStyle: "https://demotiles.maplibre.org/style.json"

Constrained Map

config:
center: [-74.006, 40.7128]
zoom: 12
minZoom: 8
maxZoom: 18
maxBounds: [-74.3, 40.5, -73.7, 40.9]
mapStyle: "https://demotiles.maplibre.org/style.json"

Non-Interactive Map

config:
center: [-74.006, 40.7128]
zoom: 12
interactive: false
mapStyle: "https://demotiles.maplibre.org/style.json"

MapLibre Map Options