---
name: Mapbox GL JS
slug: mapbox-gl-js
type: github
source_url: https://github.com/mapbox/mapbox-gl-js
organization: Mapbox
organization_slug: mapbox
total_releases: 100
latest_version: v3.23.0
latest_date: 2026-04-29
last_updated: 2026-05-01
tracking_since: 2022-06-17
canonical: https://releases.sh/mapbox/mapbox-gl-js
organization_url: https://releases.sh/mapbox
---

<Release version="v3.23.0" date="April 29, 2026" published="2026-04-29T12:56:35.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.23.0">
### Features and improvements ✨

- Improve the performance of symbol layers on old devices.
- Add `TileProvider` for raster and raster-dem sources, adding support for PMTiles with raster tiles.
- Enable client-side fontstack compositing by default. When multiple fonts are requested they are now fetched individually and composited on the client.
- Promote interactions API to stable.
- Add a bundler-friendly ESM bundle in the NPM package (`import mapboxgl from 'mapbox-gl/esm'`).
- Lazy-load procedural buildings and precipitation code when using the ESM entry point.

### Bug fixes 🐞

- Fix values smaller than 1 in `line-dasharray` not working.
- Fix a render issue where black boxes could appear instead of symbols briefly in some environments.
- Fix `scale-factor` being applied twice to icons with feature-dependent `icon-size`.
- Fix redundant WASM requests on map load when using the Standard style.
- Fix hillshade rendering issue when using Safari in private browsing mode.

</Release>

<Release version="v3.23.0-rc.2" date="April 23, 2026" published="2026-04-23T10:52:50.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.23.0-rc.2">
### Bug fixes 🐞

- Fix hillshade rendering issue when using Safari in private browsing mode.

</Release>

<Release version="v3.23.0-rc.1" date="April 20, 2026" published="2026-04-20T15:53:06.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.23.0-rc.1">
## 3.23.0-rc.1

### Features and improvements ✨

- Improve the performance of symbol layers on old devices.
- Add `TileProvider` for raster and raster-dem sources, adding support for PMTiles with raster tiles.
- Enable client-side fontstack compositing by default. When multiple fonts are requested they are now fetched individually and composited on the client.
- Promote interactions API to stable.
- Add a bundler-friendly ESM bundle in the NPM package (`import mapboxgl from 'mapbox-gl/esm'`).
- Lazy-load procedural buildings and precipitation code when using the ESM entry point.

### Bug fixes 🐞

- Fix values smaller than 1 in `line-dasharray` not working.
- Fix a render issue where black boxes could appear instead of symbols briefly in some environments.
- Fix `scale-factor` being applied twice to icons with feature-dependent `icon-size`.
- Fix redundant WASM requests on map load when using the Standard style.
</Release>

<Release version="v3.22.0" date="April 17, 2026" published="2026-04-17T12:17:43.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.22.0">
### Bug fixes 🐞

- Fix a crash on PowerVR devices.
- Fix nested scopes support in clip layers.
- Fix Webpack warning on dynamic imports.
- Skip sub-pixel line dilution for intentionally thin lines.
- Skip map-sessions request when `baseApiUrl` is not a Mapbox host.
</Release>

<Release version="v3.22.0-rc.1" date="April 9, 2026" published="2026-04-09T12:19:42.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.22.0-rc.1">
### Bug fixes 🐞

- Fix a crash on PowerVR devices.
- Fix nested scopes support in clip layers.
- Skip sub-pixel line dilution for intentionally thin lines.
- Skip map-sessions request when `baseApiUrl` is not a Mapbox host.
</Release>

<Release version="v3.21.0" date="April 2, 2026" published="2026-04-02T17:20:20.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.21.0">
### Features and improvements ✨

- Introduce the `TileProvider` API, a mechanism for extending GL JS with custom vector tile providers.
- Add first-class support for PMTiles via the new `TileProvider` API and an official plugin (`mapbox-gl-pmtiles-provider.js`) that loads on demand.
- Add _experimental_ `line-blend-mode` property for rendering lines using `additive` or `multiply` blending.
- Slightly improve overall map loading times.
- Improve symbol layer rendering performance (by adopting Uniform Buffer Objects for data-driven properties).
- Improve indoor maps loading performance.

### Bug fixes 🐞

- Fix dragging gesture not working on the compass control.
- Various fixes and improvements for the Appearances API.
- Fix an edge case when combining custom icons with images included in the style's sprite.
- Fix `setWorldview` not updating layout properties correctly.
- Fix an issue when rendering stacked underground 3D roads.
- Fix line dashes with non-integer total array lengths.
- Fix various rendering issues when using `*-cutoff-fade-range` properties.
- Fix `clip` layer not clipping `fill-extrusion` ambient occlusion.

## Breaking changes ⚠️

- Removed `mapbox-gl-unminified.js` bundle in the distribution — please switch to either `mapbox-gl.js`, `mapbox-gl-dev.js`, or the new `esm-min/mapbox-gl.js` ESM bundle.
- Removed `spriteFormat` `Map` option — now Mapbox styles will always use vector icons, while non-Mapbox styles will continue using classic raster sprites.
</Release>

<Release version="v3.21.0-rc.1" date="March 26, 2026" published="2026-03-26T15:06:04.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.21.0-rc.1">
### Features and improvements ✨

- Introduce the `TileProvider` API, a mechanism for extending GL JS with **custom vector tile providers**.
- Add first-class support for **PMTiles** via the new `TileProvider` API and an official plugin (`mapbox-gl-pmtiles-provider.js`) that loads on demand.
- Add _experimental_ `line-blend-mode` property for rendering lines using `additive` or `multiply` **blending**.
- Slightly improve overall map loading times.
- Improve symbol layer rendering performance (by adopting Uniform Buffer Objects for data-driven properties).
- Improve indoor maps loading performance.

### Bug fixes 🐞

- Fix dragging gesture not working on the compass control.
- Various fixes and improvements for the Appearances API.
- Fix an edge case when combining custom icons with images included in the style's sprite.
- Fix `setWorldview` not updating layout properties correctly.
- Fix an issue when rendering stacked underground 3D roads.
- Fix line dashes with non-integer total array lengths.
- Fix various rendering issues when using `*-cutoff-fade-range` properties.

## Breaking changes ⚠️

- Removed `mapbox-gl-unminified.js` bundle in the distribution — please switch to either `mapbox-gl.js`, `mapbox-gl-dev.js`, or the new `esm-min/mapbox-gl.js` ESM bundle.
- Removed `spriteFormat` `Map` option — now Mapbox styles will always use vector icons, while non-Mapbox styles will continue using classic raster sprites.
</Release>

<Release version="v3.20.0" date="March 12, 2026" published="2026-03-12T11:01:36.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.20.0">
### Features and improvements ✨

- Improve memory efficiency by sharing image resources for symbol layers across map tiles.

### Bug fixes 🐞

- Fix icons disappearing when changing the color theme.
- Fix display of symbols added via the Appearances runtime API.
</Release>

<Release version="v3.20.0-rc.2" date="March 6, 2026" published="2026-03-06T10:03:43.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.20.0-rc.2">
### Bug fixes 🐞

- Fix icons disappearing when changing the color theme.

</Release>

<Release version="v3.20.0-rc.1" date="March 5, 2026" published="2026-03-05T08:58:59.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.20.0-rc.1">
### Features and improvements ✨

- Improve memory efficiency by sharing image resources for symbol layers across map tiles.

### Bug fixes 🐞

- Fix display of symbols added via the Appearances runtime API.
</Release>

<Release version="v3.19.1" date="March 4, 2026" published="2026-03-04T09:31:48.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.19.1">
### Bug fixes 🐞

- Removed the unused `@types/mapbox__point-geometry` package that was causing some Typescript builds to fail
</Release>

<Release version="v3.19.0" date="February 25, 2026" published="2026-02-25T12:41:22.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.19.0">
## 3.19.0

### Features and improvements ✨

- Promote elevated lines properties to stable: `line-z-offset` and `line-elevation-reference`.
- Add experimental `text-size-scale-range` and `icon-size-scale-range` style properties.
- Add experimental `Map#setScaleFactor`/`Map#getScaleFactor` methods for controlling symbol layer scaling.
- Apply global scale factor to images within `text-field`.
- Fix z-fighting for elevated raster layers.
- Add `raster-elevation-reference` paint property to elevate raster layers relative to ground instead of sea level.
- Add `line-elevation-ground-scale` layout property to scale elevated lines with terrain exaggeration.
- Use native async/await when loading models. **Note**: Please ensure GL JS is excluded from transpilation in your build setup.
- Explicitly state minimum supported browser versions in `browserslist`.
- Support `pitch` and `distance` expressions in filters.
- Support incremental updates when using `setFeatureState`.
- Add experimental `Map#setNearClipOffset`/`Map#getNearClipOffset` methods to control the near clip offset when ortohographic projections are used.

### Bug fixes 🐞

- Fix `RasterArrayTileSource#reload()` not working correctly.
- Add request cancellation support to the `ModelSource`.
- Fix flickering of aliased thin lines.
- Fix elevated line bevel join artifacts at sharp corners.
- Fix regressions in `NavigationControl`.
- Fix namespace conflicts in different featuresets' selectors.
- Recalculate layers with `visibility: none` in case properties were changed.
- Fix bug in border update logic of `fill-extrusion` layer, overriding clip layer's behaviour.
- Fix empty tiles on non-integer maxZoom when terrain was used.
- Fix prototype pollution via Style JSON.
</Release>

<Release version="v3.19.0-beta.2" date="February 11, 2026" published="2026-02-11T15:25:35.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.19.0-beta.2">
### Features and improvements ✨

- Promote elevated lines properties to stable: `line-z-offset` and `line-elevation-reference`.
- Add experimental `text-size-scale-range` and `icon-size-scale-range` style properties.
- Add experimental `Map#setScaleFactor`/`Map#getScaleFactor` methods for controlling symbol layer scaling.
- Apply global scale factor to images within `text-field`.

### Bug fixes 🐞

- Fix `RasterArrayTileSource#reload()` not working correctly.
- Add request cancellation support to the `ModelSource`.
- Fix flickering of aliased thin lines.
- Fix elevated line bevel join artifacts at sharp corners.
</Release>

<Release version="v3.19.0-beta.1" date="January 29, 2026" published="2026-01-29T10:56:20.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.19.0-beta.1">
### Features and improvements ✨

- Fix z-fighting for elevated raster layers.
- Add `raster-elevation-reference` paint property to elevate raster layers relative to ground instead of sea level.
- Add `line-elevation-ground-scale` layout property to scale elevated lines with terrain exaggeration.
- Use native async/await when loading models. **Note**: Please ensure GL JS is excluded from transpilation in your build setup.
- Explicitly state minimum supported browser versions in `browserslist`.

### Bug fixes 🐞

- Fix regressions in `NavigationControl`.
- Fix namespace conflicts in different featuresets' selectors.
- Recalculate layers with `visibility: none` in case properties were changed.
- Fix bug in border update logic of `fill-extrusion` layer, overriding clip layer's behaviour.
</Release>

<Release version="v3.18.1" date="January 22, 2026" published="2026-01-22T12:18:50.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.18.1">
### Features and improvements ✨

- Add support for `visibility` property in clip layers.
- Improve `raster-color` precision for fine-grained value ranges.

### Bug fixes 🐞

- Fix color interpolation throwing errors in edge cases.
- Fix appearances with no `icon-size`.
- Fix disappearing symbols when used with elevated raster layers.
</Release>

<Release version="v3.18.0" date="January 14, 2026" published="2026-01-14T12:18:20.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.18.0">
### Features and improvements ✨

- Add `scaleFactor` support for images within `text-field`.
- Add `showButton` option to `GeolocateControl` that allows hiding the control button.
- Add `followUserLocation` option and `setFollowUserLocation` method to `GeolocateControl` to control whether the map follows the user's location.
- Improve `GeolocateControl` timeout handling.
- Add support for `text-rotate`, `text-size`, and `text-offset` properties in appearances.
- Add `shadow-draw-before-layer` property to directional light, allowing control over shadow draw order in the layer stack.
- Add `model-allow-density-reduction` property to model layers. (h/t @JoshuaJMoore)

### Bug fixes 🐞

- Fix interaction handlers not working on model layers.
- Fix stretchable icons without `icon-text-fit` rendering with an incorrect size.
- Fix `icon-size` not working correctly with `coalesce` expressions.
- Fix `raster-color` interpolation when using `nearest` `raster-resampling`.
- Fix render cut off for elevated raster-layer rendering in ortho projection range.
- Fix symbol placement with optional and missing parts.
- Expose all error properties for `GeolocateControl` error event (h/t @lucavb).
- Fix an error when querying multipolygons in `dynamic: true` mode.
- Fix `AttributionControl` links sanitization.
- Fix appearances with no `icon-size` using the default value instead of the layout-defined one.
- Fix updates to model source via `ModelSource.setModels` while models are still loading.
- Fix polygon clipping precision errors causing rendering artifacts in elevated structures.
- Preserve featuresets in `map.getStyle()` output.
- Expose TypeScript types from `@mapbox/mapbox-gl-style-spec` for direct imports.
</Release>

<Release version="v3.18.0-beta.2" date="January 5, 2026" published="2026-01-05T12:58:17.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.18.0-beta.2">
### Features and improvements ✨

- Add `showButton` option to `GeolocateControl` that allows hiding the control button.
- Add `followUserLocation` option and `setFollowUserLocation` method to `GeolocateControl` to control whether the map follows the user's location.
- Improve `GeolocateControl` timeout handling.

### Bug fixes 🐞

- Fix stretchable icons without `icon-text-fit` rendering with an incorrect size.
- Fix `icon-size` not working correctly with `coalesce` expressions.
- Fix render cut off for elevated raster-layer rendering in ortho projection range.
- Fix symbol placement with optional and missing parts.
- Expose all error properties for `GeolocateControl` error event (h/t @lucavb).
</Release>

<Release version="v3.18.0-beta.1" date="December 18, 2025" published="2025-12-18T10:23:43.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.18.0-beta.1">
### Features and improvements ✨

* Add support for `text-rotate`, `text-size`, and `text-offset` properties in appearances.
* Add `shadow-draw-before-layer` property to directional light, allowing control over shadow draw order in the layer stack.
* Add `model-allow-density-reduction` property to model layers. (h/t @JoshuaJMoore)

### Bug fixes 🐞

* Fix an error when querying multipolygons in `dynamic: true` mode.
* Fix `AttributionControl` links sanitization.
* Fix appearances with no `icon-size` using the default value instead of the layout-defined one.
* Fix updates to model source via `ModelSource.setModels` while models are still loading.
* Fix polygon clipping precision errors causing rendering artifacts in elevated structures.
* Preserve featuresets in `map.getStyle()` output.
* Expose TypeScript types from `@mapbox/mapbox-gl-style-spec` for direct imports.
</Release>

<Release version="v3.17.0" date="December 3, 2025" published="2025-12-03T18:07:42.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.17.0">
### Features and improvements ✨

- Add experimental [ESM support](https://github.com/mapbox/mapbox-gl-js/issues/13414#issuecomment-3502216725).
- Make `line-emissive-strength` data-driven.
- Remove experimental flag from the `extra_bounds` property of raster and vector sources.
- Remove experimental flag from `model` layer.
- Remove experimental flag from `building` layer.
- Improve vector icons rasterization performance.
- Improve shadow rendering performance.
- Improve `building` layer performance.
- Improve shader initialization performance.

### Bug fixes 🐞

- Fix polygon rendering for dynamic GeoJSON sources.
- Fix `raster-array` layers not working on iOS < 18.4.
- Fix a performance issue for symbol layers with zero fade duration and static camera.
- Fix occasional WebGL texture warnings when rendering terrain.
- Fix features not being localized in dynamic filters when a worldview is set.
- Fix an issue with clipping models on Standard.
- Fix an issue with models flashing on `setData`.
- Fix an issue with incorrect scoping of models added during runtime.
- Fix line patterns not elevating properly on HD roads.
- Sanitize attributions in `AttributionControl`.
- Correctly support filtered features in appearances.
- Fix an issue occuring when expressions are used in appearances.
- Fix appearance optimization that resulted in wrong appearances being rendered.
- Fix appearance icons not changing when feature state changed multiple times.
- Improve TypeScript types.
</Release>

<Release version="v3.17.0-beta.2" date="November 19, 2025" published="2025-11-19T13:42:26.000Z" url="https://github.com/mapbox/mapbox-gl-js/releases/tag/v3.17.0-beta.2">
### Features and improvements ✨

- Make `line-emissive-strength` data-driven.
- Remove experimental flag from the `extra_bounds` property of raster and vector sources.
- Various performance improvements.

### Bug fixes 🐞

- Fix features not being localized in dynamic filters when a worldview is set.
- Correctly support filtered features in appearances.
- Fix an issue occuring when expressions are used in appearances.
</Release>

<Pagination page="1" total-pages="5" total-items="100" next="https://releases.sh/mapbox/mapbox-gl-js.md?page=2" />
