npm / maplibre-gl
maplibre-gl
What changed in maplibre-gl 5 to 6, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.
20 breaking3 security4 deprecations62 new APIs and options32 performance25 behavior and defaults2 tooling197 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initmaplibre-gl 6229 changes
Breaking changes 17
Paint, light, and sky properties that read global-state now transition from their previous value when the state changes instead of snapping to the new value.
The Map constructor throws GPUInitializationError if a WebGL2 context cannot be created, instead of firing an uncaught error event and returning a partially constructed map.
Event names passed to map.on, once, and listens are now typed, producing TypeScript errors for unknown events and improving autocomplete; custom events can still use the documented type escape hatch.
The TypeScript target is now ES2022; consumers targeting older browsers or using older tooling may need to transpile MapLibre or update.
Nested GeoJSON objects are supported, with object properties now encoded using __$json__ before their values.
The method no longer returns this, so callers cannot rely on chaining its return value.
Removes the second waitForCompletion parameter.
Icon scaling with offset is disabled, changing rendering for affected icons.
Encountering legacy expressions now throws an error with warning severity instead of silently failing.
The internal transform property was removed; use Map's public API instead.
Renames the Map box-zoom handler event class from MapLibreZoomEvent to MapBoxZoomEvent.
Removed MapDataEvent; data events now use MapSourceDataEvent or MapStyleDataEvent, and source data events carry full source information.
The distribution is ESM-only; UMD bundles are no longer published, so script-tag consumers must use a module script and default-import consumers must use namespace or named imports.
Shader code that relied on the former #pragma mapbox must use #pragma maplibre.
This event is notify-only; it no longer allows supplying an image through the event callback.
WebGL v1 support has been removed and WebGL2 is required.
The default changed to 4, which can affect queryRenderedFeatures results and polygon center label rendering; set it to undefined to revert.
Security 3
Sanitizes attribution using an allow list of tags and attributes instead of a list of known-dangerous ones.
Fixes DOM sanitization for iframe and srcdoc.
MapLibre GL JS: XSS Sanitizer Bypass in DOM.sanitize() via Live NamedNodeMap Removal Skip
Deprecations 4
This file is now empty, remains to keep existing copy steps from failing, and is deprecated for removal in the next major version.
This file is now empty, remains to keep existing copy steps from failing, and is deprecated for removal in the next major version.
Deprecated because Arabic and Hebrew labels now render correctly without loading a right-to-left text plugin.
Deprecated because Arabic and Hebrew labels now render correctly without loading a right-to-left text plugin.
New APIs and options 35
Pass globalState to new Map or setStyle to provide initial global state for the map style, overriding the style defaults.
An experimental custom-layer API lets layers drape what they draw over terrain and place objects on it on the GPU.
An experimental custom-layer API is available for custom layers that drape drawings over terrain and place objects on it on the GPU.
The prerender options include experimental renderTerrainHeightMap support for custom layers that drape drawings over terrain and place objects on it on the GPU.
When set, walls of a rounded corner share a vertex normal at shallow angles, shading the corner as one curved surface rather than shading each arc segment flat.
Adds absolutePadding to treat padding as the map's persistent padding instead of adding it to the current padding.
Adds absolutePadding to treat padding as the map's persistent padding instead of adding it to the current padding.
Adds an option to GeolocateControlOptions to control map zoom adjustments in line with Geolocation Position update accuracy while trackUserLocation is true.
Calculates camera options that place a geographic anchor at a screen position without moving the map.
Supports SDF rendering for fill patterns, using fill-color as the foreground color.
Returns the URL the style was loaded from, or null when the style was given as an object.
Styles can use the font-faces property, improving complex-script language rendering.
Adds a map method for getting font faces, supporting complex-script language rendering.
Adds a map method for setting font faces, supporting complex-script language rendering.
Adds Style#triggerSymbolPlacement to re-place symbols after movement that the map cannot detect itself.
An image source can be added without a URL; it starts empty and makes no network request, and can later display an image through updateImage.
Adds a layout property selecting whether the height offset is measured from the terrain surface or the zero elevation datum.
Adds a layout property that raises icons and text above the map.
Adds an experimental method for working with the selected image warp, with auto, perspective, and flat choices.
Adds an experimental method to choose an image warp of auto, perspective, or flat.
StyleImageInterface data can provide a renderWithWebGL callback to render style images on the GPU, improving performance for frequently changing images.
Adds a layout property that replaces fill-extrusion corners with arcs; its distance is clamped to 20% of each adjacent edge, near-straight corners are untouched, and the default of 0 keeps corners sharp.
Gets a source's current cluster options:
cluster,clusterMaxZoomandclusterRadius.Expressions are now supported in
sky.*,light.*andprojection.typeproperties.Accepts an already-decoded image directly, skipping the network request.
Sets the degrees the pitch changes per pixel dragged.
Sets the degrees the bearing changes per pixel dragged.
Adds a paint property that applies opacity uniformly to the entire fill layer output.
Custom layer argument objects now expose getProjectionData.
Adds a paint property that applies opacity uniformly to the entire line layer output.
Adds a resolver for supplying missing style images on demand, with synchronous or asynchronous callbacks.
Adds rollstart, roll, rollend, and style.load events to the event type map.
Adds a shared event type for camera-transition events, including move, zoom, rotate, pitch, roll, and drag events and their start/end variants.
Adds an option to preserve raw RGBA tile values when alpha represents data rather than opacity.
Adds a map creation option to remove visually unappealing vertical artifacts when terrain is used with a transparent background.
Performance 25
Symbol layout skips line breaking for labels that fit on one line, speeding up layout.
Speeds up symbol rendering when visible tiles change by rewriting opacity buffers only for symbol buckets whose labels changed.
Projection data is uploaded once per tile per frame instead of before every draw call, improving rendering performance.
An addProtocol handler may return an ImageBitmap or HTMLImageElement for an image resource, avoiding encoding and decoding the pixels again.
Cross-tile symbol matching is faster for sources with promoteId because symbols are keyed by feature id as well as label.
Tile coverage computation skips the loaded-tile scan for layers with a constant symbol-height-offset.
Triangulation is faster because each vertex's deduplicated index is looked up once instead of hashing every triangle corner and applicable ring outline point.
Marker terrain occlusion uses a CPU ray walk over the DEM instead of a depth-buffer readback, removing a GPU stall per marker while a terrain map moves.
Pooled terrain drape textures are freed when the map is at rest or terrain is removed, rather than remaining allocated for the map's lifetime.
The rounding distance is converted to tile units once per tile instead of once per feature.
The scale control no longer forces synchronous layout or rewrites its DOM on every pan or zoom frame.
Merging adjacent line-placement features that share a label is faster for chains of features.
Reads sprite and image pixels through OffscreenCanvas where available, removing a main-thread stall of tens of milliseconds on GPU-accelerated browsers when a sprite loads.
Re-renders at most one stale terrain drape per frame and keeps drapes that differ only by zoom while the map moves, avoiding a burst of tile re-renders when a finger lifts over terrain.
Skips clipping masks for layers hidden at the current zoom and avoids re-binding dynamic buffers on cached vertex array binds, reducing redundant WebGL calls every frame.
Instances used for text shaping are built on first use instead of at import, reducing main-thread loading time.
The default pin is built once and cloned per marker, roughly halving constructor time when creating many default markers.
Shader programs are linked before their compile status is read, allowing the driver to overlap compiles and reducing main-thread waiting.
Symbol re-placement is skipped when its inputs are unchanged, reducing repaints from animated style images or custom layers to a single frame.
With {validate: false}, style setters skip building an error-context style snapshot, avoiding repeated full-style serialization when adding layers one at a time.
Uploads the color-relief DEM texture once per tile instead of on every frame.
Picks terrain coordinates with a CPU raycast against the DEM, providing full DEM resolution, avoiding GPU stalls on pointer events, and using about 4MB less GPU memory.
Cross-tile symbol matching avoids a per-query sort, reducing main-thread placement cost on dense or coincident symbol layers.
Improves Mercator rendering performance by skipping a redundant clipping mask border pass.
Improves terrain elevation sampling performance by caching DEM tile lookups and coordinate transforms within each render.
Behavior and default changes 17
The globe center can now reach the poles; it previously stopped at 85.05°.
Requests, caches, and atlases now support multiple glyph variants.
A contextmenu map event now fires on long press for touch devices.
The sky is shown in globe view and fades out with altitude instead of with the globe-to-Mercator transition.
Improves drawing of Devanagari, Khmer, Burmese and other complex scripts, and renders Arabic and Hebrew labels correctly without a right-to-left text plugin.
When the canvas is clamped to maxCanvasSize, MapLibre now warns once instead of silently lowering the rendered resolution.
Samples terrain render-to-texture output through mipmaps with trilinear filtering, reducing shimmering and aliasing in draped layers at high pitch.
Thai, Khmer, Burmese, Lao, Tibetan, Javanese and Balinese labels wrap at word boundaries in every style, whether or not it declares font-faces.
Default draggable markers are keyboard-focusable and movable with arrow keys; custom marker elements remain application-owned.
A grab cursor is shown over draggable markers, including on non-interactive maps.
WebGL availability errors can now be observed through the error event.
Evented is now abstract and generic over an event-type map, providing subclasses with strongly typed on, once, and off methods.
The getter now returns the actual property type instead of string or any.
The getter now returns the actual property type instead of string or any.
Hash-based location parsing now uses URLSearchParams, changing some edge-case parsing and normalization behavior.
Map now composes Camera and extends Evented directly, forwarding the camera API rather than inheriting it.
The ESM build loads its worker as a real URL, so the CSP directive no longer needs to allow blob workers.
Tooling 2
The setter now uses the actual property type instead of string or any.
The setter now uses the actual property type instead of string or any.
Fixes and other changes 126
Works around blank, unresponsive maps on affected iPadOS 16 Safari devices.
Fixes circles with map pitch alignment being drawn too large while the globe transitions to mercator.
Preserves offset and around under prefers-reduced-motion so reduced-motion flights land at the same camera as animated ones.
Fixes idle never firing when the last tile fails with a status other than 404.
Fixes load never firing when the last tile fails with a status other than 404.
Fixes camera constraints with the vertical-perspective projection when calling map.resize(eventData, false).
Prevents a rendering crash when removing a feature-state property before feature state has been set.
Fixes ScaleControl throwing when its sample points miss the globe.
Prevents an uncaught error when setStyle is called while the WebGL context is lost.
Fixes the camera jumping back at the end of a pan, flick, or rotation into terrain.
Prevents the view from sliding hundreds of meters off center when terrain is switched on during a gesture.
The camera stays above terrain, avoiding scroll zoom taking it under a mountain and then throwing it kilometers up at the end of the zoom.
The function no longer returns NaN when two copies of the same point have a dot product slightly above 1.
The worker is self-contained again to prevent stale cached workers from crashing maps after upgrades, and its default URL carries the version as a v query parameter.
Sanitizes each attribution before joining them so an unclosed disallowed tag in one attribution does not erase the others.
CanvasSource load errors are caught and reported through map.error, matching ImageSource.
When false, a DEM with a minimum below sea level no longer keeps the map rendering at display rate instead of going idle.
When false, easeTo and flyTo no longer pull the center elevation onto the terrain.
Fixes color-relief with custom DEM encoding factors of 0, which previously packed every elevation stop to NaN and collapsed the color ramp.
Fixes walls facing exactly east or west skipping the vertical gradient and rendering brighter than other walls.
Fixes fill outlines and antialiased fill edges not being drawn when terrain is enabled.
Prevents a removed source from continuing to send its waiting updates to the worker.
Prevents clustering twice when called while new data is waiting to be sent.
Prevents memory from growing until the page crashes when setData is called faster than the worker handles updates.
Prevents data set with setData from being overwritten by an earlier URL load or updateData result.
Prevents stale clusters on untouched tiles when clustering is turned on with setClusterOptions.
Fixes a hole around the poles in background, fill, and line layers from zoom 3.
When centerClampedToGround is false, jumpTo and setters that use it no longer pull the center elevation onto the terrain.
Fixes line width distortion around joins.
Camera constraints respect map padding so the padded viewport can pan fully to its edges.
Fixes fill-extrusions missing from query results on a globe once it renders as mercator.
Raster tiles now cross-fade when zooming out from a source's maxzoom instead of switching instantly.
Fixes elevation readings returning 0 outside drawn tiles while the camera is below terrain, and makes that reading about 40 times cheaper.
Prevents a gesture over terrain from throwing the camera when terrain under the center loads mid-gesture or terrain switches off before the gesture ends.
On globe projection,
fitBoundsandcameraForBoundsnow warn and returnundefinedwhen padding exceeds the viewport, as on mercator, instead of throwing.Camera settings are no longer undone during camera movement with terrain or
transformCameraUpdate.During
easeToandflyTo, center elevation eases over terrain instead of being held and jumping when the animation ends.The hillshade gradient toward the poles is removed.
The layer-specific listener now unsubscribes on the first event that hits the layer, rather than one that misses it.
Zooming and panning with the pointer above the horizon no longer moves the map in the opposite direction.
Raster tiles remain sharp at fractional
devicePixelRatiowhen the canvas and backing store cover different numbers of device pixels.The camera no longer jumps when a drag over terrain ends at a pitch above 84°.
Avoids sending dropped vector tiles to the worker during request transformation or worker startup, preventing parsed tiles from remaining in the worker for the map's lifetime.
Preserves promoteId when merging queued updateData diffs in a GeoJSON source.
Fixes camera jumping or bobbing during gestures over terrain and ensures terrain that loads after easeTo or flyTo is not ignored.
Worker script failures are now reported through the map error event.
Fixes slow panning and zooming in Firefox on macOS.
The globe atmosphere now fades in with camera altitude, keeping the horizon visible until the atmosphere takes over from space.
Markers and popups are no longer misplaced after a projection change or when terrain loads after the map settles.
When a value includes a -transition key, map.setSky() no longer silently keeps the old sky without firing an error event.
Source-specific tile LOD settings no longer change internal terrain render-to-texture tile selection.
Fixes hillshade rendering artifacts on mobile GPUs at high zoom levels.
Fixes partially blank maps in older Safari versions.
Fixes setStyle calling Map.setTerrain with the wrong this, which caused terrain changes in a style diff to throw.
DEM sampling for 3D terrain is aligned with hillshade and color-relief at cell centres.
Terrain no longer reads elevation from the wrong part of a parent DEM tile while the deepest DEM tile is loading.
Map layers no longer go missing after custom layer rendering.
Each feature is no longer rounded twice, preventing over-rounded corners and inflated vertex counts.
The gradient over 3D terrain is computed from the extrusion's own height rather than its height above sea level.
Locations behind the camera now project to a point outside the viewport on the side where they left the screen, moving DOM markers and popups off-screen as expected.
Setting one paint, light, or sky property no longer transitions every property, delays idle unnecessarily, or restarts ongoing transitions.
Raster tiles no longer get stuck at the start of a fade-in until the map moves.
Terrain depth is redrawn when DEM tiles arrive so occluded symbols and markers stay hidden.
Camera options passed as undefined are treated as not given instead of being coerced to NaN.
Camera options passed as undefined are treated as not given instead of being coerced to NaN.
A map created inside a hidden container no longer stays at the 400x300 fallback size when the container is shown before the resize observer's first notification.
Camera options passed as undefined are treated as not given instead of being coerced to NaN.
No longer throws when resized to zero width; projection matrix calculations are skipped while the transform has zero width or height.
Fixes a Not implemented. error that broke panning and zooming when the projection changed while the camera was moving on maps with terrain or a transformCameraUpdate callback.
No longer throws while terrain is loading when an intermediate render compiles a terrain shader before the replacement style initializes its projection.
Style updates no longer open a redundant sky and light transition that delays idle or eases sky and light on a different curve from the layers.
Queued GeoJSON property removals no longer throw after geometry-only updates or retain previously updated values.
Keeps the tile under an elevated symbol from being culled near the horizon, so symbols with large symbol-height-offset remain visible until behind the planet.
Draws an elevated symbol when it is in view but the ground beneath it is behind the horizon; occlusion follows the line of sight to the elevated point.
Empty tile responses, such as HTTP 204, are treated as no data: raster-DEM tiles load without elevation and empty raster tiles render transparently.
Returns sphere-following altitude under globe and vertical-perspective instead of NaN, restoring marker terrain occlusion and the camera terrain check.
Fixes a gap between the sky and ground at high pitch while the globe transitions to mercator.
Fixes visible seams between hillshade tiles when using linear interpolation.
Validates the before layer before reordering, leaving layer order untouched when its id does not exist.
A marker's popup no longer jumps to another world copy when the marker is moved across the antimeridian on a zoomed-out map.
Fixes the map freezing when a render task throws an error.
Fixes stale tile URLs when loadTile runs in the same frame.
Terrain drape textures are refreshed after zoom changes, avoiding stale rendering at the new zoom level.
The navigation control disables its zoom-out button when viewport constraints prevent further zooming out.
project() now agrees with the rendered terrain surface when elevation lookup samples a different DEM zoom than the drawn mesh.
queryTerrainElevation now agrees with the rendered terrain surface when elevation lookup samples a different DEM zoom than the drawn mesh.
Style state defaults are now serialized.
The camera no longer jumps at the end of a pan or zoom gesture on terrain because center elevation is sampled from the rendered terrain surface.
Numbers and short uppercase codes in vertical line labels are drawn upright instead of rotating along the line.
A vector tile retains its etag when reloaded after a style change, allowing the next expiry refresh to skip unchanged tiles.
Fixes style camera settings being ignored when the map is created with a minZoom or minPitch option.
Measures distances from the camera itself rather than the ground point below it, refining globe tile selection past the requested zoom in some views and leaving others coarser.
Fixes labels briefly appearing too large when zooming out several levels at once with zoom-dependent text-size or icon-size.
Fixes dragging the globe from the empty space around it so the map moves correctly.
Fixes an incorrect image source on globe view projection.
Fixes the globe zooming in when panned away from a pole at minimum zoom.
Provides custom layers with the live globe transition instead of a value hardcoded to 1, so they ease with other layers.
DEM and color-relief elevation stop lookups use texelFetch for exact values instead of normalized texture coordinate arithmetic.
Rounded extrusion corners no longer produce spikes; corner arcs land on the integer tile grid and corners created by tile clipping remain sharp.
Panning uses a versor to keep drag direction consistent near and across the poles, eases off near the globe edge, and preserves bearing.
A gesture held still before release no longer flings the map.
Raster-DEM decoding requests no browser color management so RGB-encoded elevation values are not changed.
Reloaded raster tiles no longer fade in again and briefly flash the map background.
Sprite reloads no longer cause images to be rechecked and re-uploaded on every frame, or leave replaced sprite images in the image manager.
A rejected missing-image resolver no longer blocks successfully resolved images in the same batch.
Aborts now reach image or raster tile loads still awaiting transformRequest, preventing lost images and fetching of aborted tiles.
Fixed scroll-wheel and two-finger pinch zoom drifting away from the pointer when the globe is small, keeping the location under the pointer as it does when zoomed in.
Fixed GPU texture leaks on image updates and removal for ImageSource, VideoSource, and CanvasSource, and fixed resized textures losing wrap and filter settings.
Fixed projective rendering for image source quads that are not parallelograms.
Fixed a race condition while tile data loads that could cause map.queryRenderedFeatures() to throw an "Out of bounds" error.
Terrain pan and zoom gestures are solved against the elevation under the gesture instead of frozen center elevation, preventing the grabbed terrain point from slipping during drags and moving-centroid pinches.
Fixes a rare rendering bug where two adjacent layers with different data driven properties could render incorrectly.
Prevents 3D buildings from disappearing near the horizon by growing tile-culling bounds as the frustum's bottom edge approaches horizontal.
Prevents fill and line layers from rendering twice near the antimeridian on the globe when looking at poles or zoomed out.
Improves globe latitude precision on some GPUs by reformulating the mercator-to-sphere Y coordinate calculation to avoid float32 cancellation and imprecise hardware transcendentals near the equator.
Fixes a race when an image is aborted during an awaited
transformRequestthat could crash the image request queue.Fixes an error when a paint property transitions between arrays of different length.
Fixes a race when a tile is aborted during an awaited
transformRequestthat could crash the image request queue.Calling this while the source contains errored tiles no longer crashes the renderer.
Calling this while the source contains errored tiles no longer crashes the renderer.
Non-interactive default markers use
role=img; interactive markers userole=button.Switching terrain configurations now destroys the previously active terrain, preventing GPU resource leaks and clearing the old source's terrain configuration.
Transparent overlapping lines using line-opacity no longer create rendering artifacts; transparent line-color stacking remains unchanged.
raster-dem sources are now validated, and source types without a style-spec schema no longer fail the whole style.
Terrain passed to setTerrain is now validated rather than applied unchecked.
Style validation warnings are logged instead of treated as errors, so mixed legacy and expression filter syntax no longer aborts style loading.
maplibre-gl 5116 changes
Breaking changes 3
Removes legacy browser compatibility code targeting IE11 and pre-2016 browsers.
LngLatBounds#intersects now returns true when bounds touch along an edge or at a corner.
When the stylesheet has no root-level glyphs property, text-font is interpreted as a cascading fallback list, and text renders using local or system fonts.
New APIs and options 27
Adds this CSS class to a Marker element when it is covered by 3D terrain or a globe.
Adds setZoomRate() to customize touch zoom speed.
Adds setZoomThreshold() to customize pinch sensitivity.
line-cap is now data-driven, allowing per-feature values.
line-miter-limit is now data-driven, allowing per-feature values.
Adds a referrerPolicy option to control the referrer policy for tile requests.
Accepts an async function in addition to a sync function.
Customize the action after Shift-drag box selection.
GeoJSON-VT now supports updates.
Use the resampling paint property with raster, hillshade, and color-relief layers.
Adds a map option setting the pitch above which the anisotropic filter is applied to all raster layers; its default is 20°.
The pseudo option forces CSS-based fullscreen mode instead of the native fullscreen API, which may be faster on some devices.
Markers now support click events.
Supports container elements from other windows, such as popups or iframes.
Adds zoomSnap to snap zoom levels to a configurable grid across keyboard, scroll wheel, on-screen buttons, double-click, and double-tap interactions.
Adds a padding option to keep popups from being positioned too close to the map container edges.
Global state expressions are supported for layer visibility.
Adds a waitForCompletion option to setData, allowing callers to configure whether it waits for completion.
Adds a waitForCompletion option to updateData, allowing callers to configure whether it waits for completion.
Vector source definitions support MapLibre Tiles by setting encoding to mlt.
The MapOptions flag controls how many zoom levels to slice and how many to scale; values of 4 or less can prevent Safari crashes in some scenarios.
A reduceMotion option is added to Map Options.
The timeControl API exports now() so external code can read controlled time.
Adds isTimeFrozen to the time control API for deterministic rendering, including frame-by-frame video export and deterministic testing.
Adds restoreNow to the time control API for deterministic rendering, including frame-by-frame video export and deterministic testing.
Adds setNow to the time control API for deterministic rendering, including frame-by-frame video export and deterministic testing.
Adds a Map option callback that overrides the transform's constrain behavior, with the new TransformConstrainFunction type.
Performance 7
Halo and glyph are rendered in a single pass, reducing rendering time.
Matrix inversions are optimized to reduce GPU stalls.
Transparent symbols are culled early in vertex shaders to optimize GPU performance.
Vector tile reloading can use Etag unmodified support to optimize reloading.
GeoJSON setData performance was improved.
GeoJSON updateData performance was improved.
Small diffs are processed faster when calling updateData.
Behavior and default changes 8
Can now be used in workers, alongside improved communication with imported scripts in workers.
Marker and MarkerOptions now accept number values as well as string values for opacity.
Marker and MarkerOptions now accept number values as well as string values for opacityWhenCovered.
line-round-limit is now data-driven, allowing per-feature values.
Image requests always send the
Accept: image/webpheader; the Edge 18 WebP detection workaround is removed.Adds compatibility for ES2020.
Error messages now include the source id, helping identify which source caused an error.
Text labels can include uncommon CJK and Vietnamese characters and characters from historical writing systems; server-side fonts can request glyph PBFs beyond U+FFFF instead of throwing an error.
Fixes and other changes 71
Fog computation is skipped when fog opacity is zero.
Popup positions now update when switching between terrain and globe projections.
A successful custom protocol response that is null or undefined is now set to an empty ArrayBuffer.
Fixes convex polygon text labels drifting far from the center at high zoom due to coordinate rounding in geojson-vt.
Prevents stale asynchronous style loads from completing after the style is cleared or replaced, avoiding startup crashes.
Respects zoomSnap by snapping the zoom level to the nearest valid increment.
Respects the maxZoom option in vertical-perspective projection.
Respects zoomSnap by snapping the zoom level down to keep bounds fully visible.
Respects zoomSnap by snapping the zoom level down to keep bounds fully visible.
Respects zoomSnap by snapping the zoom level to the nearest valid increment.
Respects zoomSnap by snapping the zoom level to the nearest valid increment.
Calling map.remove() immediately after creation no longer crashes because in-flight style URL loads are canceled.
Error messages clarify when layout and paint properties are confused.
Error messages clarify when layout and paint properties are confused.
Fixes a crash when switching styles while globe projection is active.
Adds tolerance to GridIndex AABB comparison to prevent symbol collision flickering.
The geojson worker now receives the missing promoteId parameter.
Removes the map's
movestartlistener when the control is removed, preventing a leak and a possible crash during active tracking.Removes the
clicklistener whenremove()is called, preventing the handler from leaking.Fixes incorrect popup location when terrain is enabled and
jumpTois used.Fixes missing tile encoding for MLT feature queries.
Fixes raster DEM tiles getting stuck in the
reloadingstate.Frees terrain GPU resources when terrain is disabled with
setTerrain(null).Caps the tile texture reuse pool to prevent unbounded VRAM growth during rapid zoom and pan.
Removes the
playingevent listener and pauses video when the source is removed, fixing a memory leak.Fixes updating GeoJSON when using diff update.
Fixes
raster-resampling: nearestnot being applied as expected.Fixes a “cannot read properties of undefined (reading 'range')” error by updating geojson-vt.
Corrects distance-to-tile calculations in globe projection at high pitch angles.
Actor message filtering now allows opaque origins ("null").
Tiles are now cleared when using vector tile source setUrl/setTiles.
Fixes the Firefox “Alpha-premult deprecated for non-DOM uploads” warning.
Fixes bounds calculation for GeoJSON with elevation.
Fixes SDF icon-text-fit rendering by correctly unpacking packed shader values.
The return type is more precise, improving type information for callers.
Fixes popup tip rendering on right-to-left pages.
Fixes raster tile rendering with glyph or icon atlas content after WebGL context loss.
GlobeControl now updates when Map.setProjection() is called programmatically.
Fixes intersection checks for zero-width bounds.
Fixes map.getProjection() returning undefined after map.setProjection() is called with the default mercator projection.
The pulsing GeoLocation animation is no longer displayed when the prefers-reduced-motion media query is active.
Fixes terrain tile updates when feature state changes.
Fixes incorrect text placement along lines in 3D mode.
Fixes a WebGL context loss error that occurred when the style was not yet loaded.
Fixes marker positions failing to update when zoom or pitch changes after constraints change.
Fixes incorrect shader selection for text labels containing inline images.
Leading and trailing control characters are hidden in format expressions.
Fixes a precision issue in the atmosphere shader in globe projection.
Fixes image sources being clipped at -180 and 180 longitude when terrain is enabled.
Fixes the map not immediately constraining to a valid zoom and center when changing projections.
Emits the style.load event when style changes are diffed, including when JSON is passed to setStyle.
Fixes setting visibility on custom layers.
Fixes a blank map when a resize event is triggered before WebGL context restoration.
A GeoJSON source no longer throws when properties are undefined.
Fixes the zoom used when retrieving elevation for a longitude and latitude.
Correctly handles bounds spanning 360° or more instead of returning false.
Calls transformCameraUpdate so subsequent zoom changes can be controlled by the user after changing minZoom; the same applies to setMaxZoom.
Canvas sources with power-of-2 dimensions no longer render as black squares.
Internally handled aborted requests no longer produce unhandled AbortError rejections, avoiding unhelpful client errors.
Fixed unwanted movement at high latitudes and freezes at low zoom when moving a pitched and rotated terrain map.
queryTerrainElevation now uses higher zoom level tiles when possible.
Includes miscellaneous bug fixes related to updateData.
Fixes a blank map after WebGL context restore.
Edge fading for unloaded tiles is fixed.
The control's CSS prevents its contents from wrapping.
When a required glyph is unavailable or lacks a character, MapLibre tries to render it locally instead of crashing.
Fixes contextmenu events not being blocked by scrolling.
Fixes blurry rounded caps on dashed lines.
Preserves flyTo padding when prefers-reduced-motion is enabled.
Fixes mousemove events not being blocked by scrolling.
Fixes setClusterOptions failing to trigger reclustering when no data changes are pending.