NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #5498 most downloaded on npm
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
Last release 12 days ago
25 Oct 2026
Ships on a steady schedule
a new release about every 1 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
196 releases · first in 2020
One column per quarter.
Add setTiles method to RasterTileSource to dynamically update existing tile sources. (#3208) (by @wagewarbler)
Locally rendered glyphs are double resolution (48px), greatly improving sharpness of CJK text. (#2990, #3006) (by @bdon)
Improve error message when a tile can't be loaded (#3130) (by @HarelM)
Copy LICENSE.txt to dist folder so it's included in 3rdpartylicenses.txt by webpack (#3021) (by @miccou)
Map.getLayer() and Style.getLayer() to be StyleLayer | undefined to match the documentation (#2969) (by @RoystonS)Map.addLayer() and Style.addLayer() to allow adding a layer with an embedded source, matching the documentation (#2966) (by @neodescis)Map.setTerrain(options: TerrainSpecification): Map to be Map.setTerrain(options: TerrainSpecification | null): Map per the API spec (#2993) (by @CraigglesO)Map.getTerrain(): TerrainSpecification to be Map.getTerrain(): TerrainSpecification | null for consistency with the setTerrain function (#3020) (by @neodescis)Add support for `text-variable-anchor-offset` symbol style layer property (#2914) (by @drwestco)
text-variable-anchor-offset symbol style layer property (#2914) (by @drwestco)Add cache parameter to `RequestParameters` (#2910) (by @marucjmar)
cache parameter to RequestParameters (#2910) (by @marucjmar)Remove cooperative gesture screen from the accessibility tree since screenreaders cannot interact with the map using gestures (#2857) (by @manuelroth)
cooperated gestures example to the doc.(#2860) (by @visitskyworld)Change all internal exports to named exports(#2711) (by @HarelM)
className option to Marker constructor (#2729) (by @marexandre)Marker constructor parameter (#2756) (by @HarelM)check-for-support example (#2859) (by @visitskyworld)Style.serialize() when the style hasn't loaded yet (#2712) (by @ChrisLoer)checkMaxAngle when a label with length 0 is on the last segment of a line (#2710) (by @ChrisLoer)tap then drag zoom gesture detection to abort when the two taps are far away (#2673) (by @mz8i)Nothing published for this version
Nothing published for this version
Nothing published for this version
Expose map options.maxTileCacheZoomLevels to allow better control of tile cache (#2581) (by @pramilk)
Update shaders to GLSL ES 3.0 (#2599) (by @birkskyum)
RequestTransformFunction type to return RequestParameters or undefined (#2586) (by @nreese)EXT_color_buffer_float WebGL2 extension to fix heatmap in firefox (#2595) (by @birkskyum)Nothing published for this version
Fixes issue with ResizeObserver firing an initial 'resize' event (since 3.0.0-pre.5) (#2551) (by @birkskyum)
Add transformCameraUpdate callback to Map options (#2535) (by @Pessimistress)
transformCameraUpdate callback to Map options (#2535) (by @Pessimistress)⚠️ Breaking - Remove WebGL1 support. Move to WebGL2 (#2512) (by @birkskyum)
⚠️ Breaking - Improve control performance by restricting worker count to a max of 1 except safari browser. (#2354) (by @pramilk)
LngLatBounds.extend() to correctly handle { lng: number, lat: number } coordinates. (#2425) (by @buffalom)Remove a deprecation warning by removing an empty texture that is no longer being used in the codebase (#2299) (by @IvanSanchez)
resize event from the browser. Now it is ResizeObserverEntry, see more here. (by @HarelM)LngLat.toBounds() is replaced by a static method LngLatBounds.fromLngLat() (#2188) (by @zhangyiatmicrosoft)unknown (#2243) (by @neodescis)warnonce when terrain and hillshade source are the same (#2298) (by @tempranova)hsl css color in a format that does not comply with the CSS Color specification. Colors defined in hsl(110, 0.7, 0.055) format will no longer work, instead it is recommended to use the format with percentages hsl(110, 70%, 5.5%). (#2376) (by @kajkal)features property on MapLayerMouseEvent and MapLayerTouchEvent to be MapGeoJSONFeature[] in lieu of GeoJSON.Feature[] (#2244) (by @parkerziegler)setStyle(style, {diff:true}) (#2146) (by @jcary741)getTerrain when fitBounds across the AM (#2155) (by @llambanna)toArray method return type to [number,number] (#2233) (by @maxdacruz)window.navigator.geolocation (#2359) (by @HarelM)Add setClusterOptions to update cluster properties of the added sources: fixing these issues (#429) and (#1384) (by @IhsenBen)
setClusterOptions to update cluster properties of the added sources: fixing these issues (#429) and (#1384) (by @IhsenBen)workerOptions and _options in geojson_source.ts (#1998) (by @IhsenBen)Add support for multiple sprite declarations in one style file (#1805) (by @smellyshovel)
sprite declarations in one style file (#1805) (by @smellyshovel)QueryRenderedFeaturesOptions type added to both of the params in queryRenderedFeatures in map.ts (#1900) (by @beharguy)
QueryRenderedFeaturesOptions type added to both of the params in queryRenderedFeatures in map.ts (#1900) (by @beharguy)cooperativeGestures overlay is always "on top" (z-index) of map features (#1753) (by @blyme)willReadFrequently hint to optimize 2D canvas usage and remove warnings (#1808) (by @kircher1)@rollup/plugin-json, which was in conflict with rollup-plugin-import-assert (#1894) (by @rotu)@mapbox/gazetteer which caused some build warnings (#1757 #1898) (by @AdamS108)getElevation() causing uncaught error (#1650). (by @zbigniewmatysek-tomtom)map.setStyle when it is passed with transformStyle option and map is initialized without an initial style. (#1824) (by @ambientlight)Return a promise from once method to allow easier usage of async/await in this case (#1690) (by @HarelM)
once method to allow easier usage of async/await in this case (#1690) (by @HarelM)updateData to GeoJSONSource which allows for partial data updates (#1605) (by @mfedderly)GeoJSONSource appearing to never finish loading when calling its setData method immediately after adding it to a Map due to it not firing a metadata data event (#1693) (by @vanilla-lake)⚠️ Breaking - Remove deprecated mapboxgl- css classes (#1575) (by @birkskyum)
freezeElevation to AnimationOptions to allow smooth camera movement in 3D (#1514, #1492) (by @prozessor13)mapboxgl- css classes (#1575) (by @birkskyum)Added calculateCameraOptionsFromTo to camera (#1427) (by @BAschl)
_interpolationType unused field (#264) (by @HarelM)Improve expression types (#1510) (by @cns-solutions-admin)
Improve error handling (#1485) (by @birkskyum)
Re-enable method to get library version. Either with import {version} from 'maplibre-gl', or on a Map instance as map.version. (#1471) (by @birkskyum)
import {version} from 'maplibre-gl', or on a Map instance as map.version. (#1471) (by @birkskyum)Fix types generation and make sure they run as part of the CI (#1462, #1465) (by @HarelM)
Everything from the four previous pre-releases:
Everything from the four previous pre-releases:
icon-padding symbol layout property to support asymmetric padding (#1289) (by @drwestco)cooperativeGestures option when instantiating map to prevent inadvertent scrolling/panning when navigating a page where map is embedded inline (#234) (by @ewagstaff)GeoJSONSource.setData() is called instead of waiting for any pending request to complete before issuing the request for the new URL (#1102) (by @vanilla-lake)box-sizing: border-box; (#1250) (by @lukashass)summary styles on the attribution control (#1258) (by @pjsier)Update icon-padding symbol layout property to support asymmetric padding (#1289) (by @drwestco)
icon-padding symbol layout property to support asymmetric padding (#1289) (by @drwestco)cooperativeGestures option when instantiating map to prevent inadvertent scrolling/panning when navigating a page where map is embedded inline (#234) (by @ewagstaff)box-sizing: border-box; (#1250) (by @lukashass)Handle maxBounds which cross the meridian at longitude ±180° (#1299) (by @burleight)
summary styles on the attribution control (#1258) (by @pjsier)Add 3D terrain capabilities (#165, #1022) (by @prozessor13)
Cancel pending GeoJSON requests when GeoJSONSource.setData() is called instead of waiting for any pending request to complete before issuing the reque
GeoJSONSource.setData() is called instead of waiting for any pending request to complete before issuing the request for the new URL (#1102) (by @vanilla-lake)Add back typescript typings to dependencies instead of devDependencies (#1178) (by @HarelM)
Changed logic for showing the MapLibre logo. The MapLibre logo is now shown by setting the map option 'maplibreLogo' to true or by adding it to a map
touchmove in MapTouchEvent["type"] (#1131) (by @smellyshovel)Use correct location for mouse events of line layer with line-offset (#1108). (by @jkoelewijn)
Removal of the unminified production build target, so npm run build-prod will be the main build command going forward.
npm run build-prod will be the main build command going forward.cannot read properties of undefined (reading 'sourceCaches') error (#1099). (by @khmm12)Add option viewport-glyph to text-rotation-alignment which places glyphs along a linestring and rotates them to the x-axis of the viewport (#716). (by
viewport-glyph to text-rotation-alignment which places glyphs along a linestring and rotates them to the x-axis of the viewport (#716). (by @wipfli)GeoJSONFeature.id type from number | string | void to number | string | undefined (#1093) (by @nreese)id: string | number; to id?: string | number | undefined; (#1095) (by @nreese)Add adjustment for glyph rendering, CJK fonts are mainly affected (#1002). (by @Kanahiro)
SourceCache.loaded() always returning true following a load error (#1025) (by @vanilla-lake)Publish dist/package.json (#998). (by @wipfli)
Publish dist/package.json (#998). (by @wipfli)
Publish empty postinstall.js file. Follow-up on (#990) (by @wipfli)
Publish empty postinstall.js file. Follow-up on (#990) (by @wipfli)
Fix missing postinstall.js file in npm publish. Follow-up on (#990) (by @wipfli)
Fix postinstall ts-node error on non-dev installs (#900) (by @birkskyum)
ts-node error on non-dev installs (#900) (by @birkskyum)Default compact attribution to be open by default to comply with OpenStreetMap Attribution Guidelines (#795) (by @acalcutt)
Source classes (GeoJSONSource etc.) declarations. (#801) (by @sebisteiner)AJAXError public so error HTTP responses can be handled differently from other errors. (#941) (by @vanilla-lake)dataabort and sourcedataabort events when a tile request is aborted (#794) (by @vanilla-lake)performance undefined (#768) (by @HarelM)Fix stale tiles being shown when calling VectorTileSource#setTiles while the map is moving. (#913) (by @vanilla-lake)
Deprecate icon-allow-overlap and text-allow-overlap symbol layout properties. icon-overlap and text-overlap are their replacements. (#347) (by @drwest…
icon-overlap and text-overlap symbol layout properties (#347) (by @drwestco)icon-allow-overlap and text-allow-overlap symbol layout properties. icon-overlap and text-overlap are their replacements. (#347) (by @drwestco)MapOptions#pixelRatio property and a Map#setPixelRatio method. Since a high devicePixelRatio value can lead to performance and display problems, it is done at your own risk. (#769) (by @vanilla-lake)Remove list of node versions allowed to install the package.
Missing package.json file in version 2.0.3 dist in npm (#811) - this causes webpack to fail (by @HarelM)
Remove node package chalk from devDependencies (#789). (by @astridx)
Fix typescript generated file (#776). (by @wipfli)
Fix documentation of addProtocol and removeProtocol. (#779) (by @wipfli)
Breaking Change removed version from the public API
version from the public APIaccessToken and Mapbox specific urls starting with mapbox://. Telemetry and tracking code was removed.baseApiUrl as it was used only for Mapbox related urlsStyle => StyleSpecificationAnyLayer => LayerSpecificationAnySourceData => SourceSpecificationMapboxEvent => MapLibreEventMapboxOptions => MapOptionsMapBoxZoomEvent => MapLibreZoomEvent*SourceRaw + *SourceOptions => *SourceSpecification*Source (source implementation definition) were removed*Layer => *LayerSpecification*Paint => *LayerSpecification['paint']*Layout => *LayerSpecification['layout']MapboxGeoJSONFeature => GeoJSONFeatureredraw function to map (#206) (by @fredj)getImage uses createImageBitmap when supported (#650) (by @clementgayvallet)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →