Guide
Coming from Mapbox
MapLibre GL JS began as a community fork of Mapbox GL JS, so most map code carries over. Here is what changes in code, what to use for each Mapbox service, and how the two libraries differ today.
Where MapLibre comes from
MapLibre GL JS began as a community fork of Mapbox GL JS v1.13.0, the last feature release under the BSD 3-Clause license, after Mapbox GL JS v2.0.0 (December 8, 2020) moved to the Mapbox Terms of Service, which license the library to developers with an active Mapbox account; MapLibre's first rebranded release, v1.14.0, followed on March 24, 2021. MapLibre Native is likewise a community-led fork of Mapbox GL Native (the maps 1.6.0 core plus the iOS and Android SDKs), taken before Mapbox began shipping GL Native binaries under the Mapbox Terms of Service with its Android 9.3.0 and iOS 6.0.0 releases in July 2020. Both projects thank Mapbox for releasing the original code as open source.
Web: what changes in your code
From Mapbox GL JS to MapLibre GL JS 6, the version this site runs. Most changes are renames; a few features work differently.
01Package and import
MapLibre GL JS v6 ships as ES modules only, so a default import no longer works: use a namespace import or named imports, and rename mapboxgl to maplibregl throughout your code.
Mapbox GL JS
npm install mapbox-gl import mapboxgl from 'mapbox-gl';MapLibre GL JS
npm install maplibre-gl import * as maplibregl from 'maplibre-gl'; // or: import {Map, Marker} from 'maplibre-gl';02Stylesheet
Markers, popups and controls depend on this CSS, so swap the import rather than dropping it.
Mapbox GL JS
import 'mapbox-gl/dist/mapbox-gl.css';MapLibre GL JS
import 'maplibre-gl/dist/maplibre-gl.css';03Loading from a CDN
v6 loads as a module script and detects its worker from the module URL, and MapLibre's v5 to v6 guide advises pinning a major version such as ^6 rather than @latest.
Mapbox GL JS
<link href="https://api.mapbox.com/mapbox-gl-js/v3.30.0/mapbox-gl.css" rel="stylesheet"> <script src="https://api.mapbox.com/mapbox-gl-js/v3.30.0/mapbox-gl.js"></script>MapLibre GL JS
<link href="https://unpkg.com/maplibre-gl@^6.11.2/dist/maplibre-gl.css" rel="stylesheet"> <script type="module"> import * as maplibregl from 'https://unpkg.com/maplibre-gl@^6.11.2/dist/maplibre-gl.mjs'; </script>04Access token
MapLibre GL JS 2.0.0 removed all code related to accessToken, together with mapbox:// URLs and telemetry; to keep loading Mapbox tiles, Mapbox's own MapLibre guide passes the token as an access_token query parameter on HTTPS URLs.
Mapbox GL JS
mapboxgl.accessToken = 'YOUR_MAPBOX_ACCESS_TOKEN'; // or: new mapboxgl.Map({accessToken: 'YOUR_MAPBOX_ACCESS_TOKEN', ...})MapLibre GL JS
// Nothing to set: MapLibre GL JS has no access token05Style and source URLs
MapLibre does not resolve mapbox:// URLs, so point styles and sources at a provider's HTTPS URLs (see Basemaps).
Mapbox GL JS
style: 'mapbox://styles/mapbox/streets-v12'MapLibre GL JS
style: 'https://tiles.openfreemap.org/styles/liberty'06A style is required
Mapbox GL JS v3 loads the Mapbox Standard style when no style is given, while MapLibre GL JS renders nothing until a style is set in the options or with setStyle.
Mapbox GL JS
const map = new mapboxgl.Map({ container: 'map' // no style: Mapbox Standard loads });MapLibre GL JS
const map = new maplibregl.Map({ container: 'map', style: 'https://tiles.openfreemap.org/styles/liberty' });07CSS class names
Custom CSS that targets mapboxgl- classes needs the maplibregl- prefix, since MapLibre GL JS 3.0.0 removed the deprecated mapboxgl- class names.
Mapbox GL JS
.mapboxgl-popup-content { padding: 8px; }MapLibre GL JS
.maplibregl-popup-content { padding: 8px; }08Worker setup with a bundler
With a bundler, MapLibre GL JS v6 needs one setWorkerUrl call before the first map (webpack 5 passes new URL('maplibre-gl/dist/maplibre-gl-worker.mjs', import.meta.url).toString()), and MapLibre's Installation docs cover esbuild, Rollup and Next.js.
Mapbox GL JS
import * as mapboxgl from 'mapbox-gl/esm'; import 'mapbox-gl/dist/mapbox-gl.css';MapLibre GL JS
import {Map, setWorkerUrl} from 'maplibre-gl'; import 'maplibre-gl/dist/maplibre-gl.css'; import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url'; setWorkerUrl(workerUrl); // Vite; call once before the first map09Globe projection
MapLibre GL JS sets the projection in the style or with setProjection rather than a Map option, and a style without one uses Mercator, whereas most current Mapbox styles use globe by default.
Mapbox GL JS
const map = new mapboxgl.Map({ container: 'map', projection: 'globe' });MapLibre GL JS
map.on('style.load', () => { map.setProjection({type: 'globe'}); }); // or in the style: "projection": {"type": "globe"}10Fog and atmosphere
MapLibre's sky property (GL JS 4.5.0 and later, still marked experimental) uses its own property names for sky, horizon, fog and the globe atmosphere, so fog settings are rewritten rather than renamed.
Mapbox GL JS
map.setFog({ color: 'rgb(186, 210, 235)', 'high-color': 'rgb(36, 92, 223)', 'horizon-blend': 0.02 });MapLibre GL JS
map.setSky({ 'sky-color': '#199EF3', 'horizon-color': '#ffffff', 'sky-horizon-blend': 0.5, 'atmosphere-blend': 0.8 });113D terrain source
setTerrain takes the same options in both libraries; only the elevation source changes, here to Mapterhorn, whose TileJSON declares its Terrarium encoding and attribution.
Mapbox GL JS
map.addSource('mapbox-dem', { type: 'raster-dem', url: 'mapbox://mapbox.mapbox-terrain-dem-v1', tileSize: 512 }); map.setTerrain({source: 'mapbox-dem', exaggeration: 1.5});MapLibre GL JS
map.addSource('terrain', { type: 'raster-dem', url: 'https://tiles.mapterhorn.com/tilejson.json' }); map.setTerrain({source: 'terrain', exaggeration: 1.5});12Missing images
In MapLibre GL JS v6 the styleimagemissing event only notifies, so supply generated icons and patterns from setMissingStyleImageResolver, which can also be async.
Mapbox GL JS
map.on('styleimagemissing', (e) => { map.addImage(e.id, generateImage(e.id)); });MapLibre GL JS
map.setMissingStyleImageResolver((id) => { map.addImage(id, generateImage(id)); });
Mobile apps
MapLibre Native descends from Mapbox's earlier native SDKs, before their v10 redesign, so code written for those older versions is the closest match.
iOS
MapLibre Native for iOS comes as the MapLibre Swift package (from github.com/maplibre/maplibre-gl-native-distribution) or the MapLibre CocoaPod and is imported with import MapLibre instead of import Mapbox; since MapLibre iOS 6.0.0 its classes use the MLN prefix instead of MGL, for example MLNMapView. It needs no access token (the optional MLNApiKey Info.plist key is only for tile servers that require a key), and it descends from Mapbox's pre-v10 iOS SDK with MGLMapView, whereas the Mapbox Maps SDK v10 and later (import MapboxMaps) has a different API.
Android
Add org.maplibre.gl:android-sdk and initialize with MapLibre.getInstance(context), where Mapbox's pre-v10 SDK configured its access token through Mapbox.getInstance; since MapLibre Android 11.0.0 the package is org.maplibre.android instead of com.mapbox.mapboxsdk, with renames such as Mapbox to MapLibre, MapboxMap to MapLibreMap and MapboxMapOptions to MapLibreMapOptions. MapLibre Android descends from Mapbox's v9 Android SDK, while the Mapbox Maps SDK v10 and later moved to the com.mapbox.maps package and changed how the SDK is used.
React Native
@maplibre/maplibre-react-native originated as a fork of rnmapbox (@rnmapbox/maps); its 9.0.0 release completed the fork, removed support for the Mapbox SDK and renamed Mapbox-specific names to MapLibre. There is no access token (vendor keys go in style or tile URLs, and v11 removed setAccessToken), and v11 aligned component names with MapLibre GL JS, for example MapView to Map and ShapeSource to GeoJSONSource.
Flutter
maplibre_gl describes itself as a fork of flutter-mapbox-gl, the project behind the mapbox_gl package. Its changelog removed the accessToken parameter (0.14.0), renamed the library import to package:maplibre_gl/maplibre_gl.dart (0.17.0) and renamed classes such as MaplibreMap and MaplibreMapController to MapLibreMap and MapLibreMapController (0.20.0).
All MapLibre SDKs are on SDKs, with install snippets on Get started.
Frameworks and plugins
Several MapLibre projects started as forks of Mapbox ones, and keep a familiar API.
react-map-gl
Import from react-map-gl/maplibre instead of react-map-gl/mapbox and drop the mapboxAccessToken prop. The MapLibre entry point arrived in v7.1; since v8 the package has separate react-map-gl/mapbox (mapbox-gl 3.5.0 and later), react-map-gl/maplibre (maplibre-gl 4 and later) and react-map-gl/mapbox-legacy (mapbox-gl v1 and v2) entry points, and v8.1 supports MapLibre GL JS v4, v5 and v6.
ngx-maplibre-gl (Angular)
@maplibre/ngx-maplibre-gl is a fork of ngx-mapbox-gl, maintained in the MapLibre organization, and its README thanks the ngx-mapbox-gl maintainers for building it up.
Mapbox GL Draw
Its README says it requires mapbox-gl-js and does not mention MapLibre, but MapLibre's docs include an example, Draw polygon with mapbox-gl-draw, that runs it on MapLibre by pointing MapboxDraw.constants.classes at the maplibregl- CSS classes and supplying its own draw styles.
Terra Draw
Terra Draw provides drawing modes that work across map libraries through adapters, including terra-draw-maplibre-gl-adapter for MapLibre GL JS and terra-draw-mapbox-gl-adapter for Mapbox GL JS v3; MapLibre's own Terra Draw example uses the maplibre-gl-terradraw control built on it.
MapLibre GL Geocoder
@maplibre/maplibre-gl-geocoder launched in its 1.0.0 release as a fork of mapbox-gl-geocoder, and it takes a geocoding API object with a forwardGeocode function, so it can sit in front of any geocoding service.
Mapbox services, and options with MapLibre
For each Mapbox product, the open-source and hosted options listed on this site. Mapbox's own services remain an option too, within its terms.
Mapbox styles and vector tiles (Mapbox Streets and other core styles)
Several providers offer vector basemap styles that MapLibre loads from a style URL, some with no API key; see Basemaps.
Mapbox's own guide shows how to keep using Mapbox vector and raster tiles in MapLibre GL JS.
Mapbox Satellite
Satellite and hybrid styles from several providers are listed on Basemaps, and EOxCloudless offers cloud-free Sentinel-2 imagery as raster tiles.
Mapbox's MapLibre guide also shows the mapbox.satellite tileset as a raster source.
Mapbox Terrain-DEM
Mapterhorn and the AWS Terrain Tiles serve Terrarium-encoded elevation tiles that work as a raster-dem source for 3D terrain and hillshading, and maplibre-contour draws contour lines from the same tiles.
Mapterhorn Terrain (Mapterhorn)Terrarium Elevation (AWS Open Data)maplibre-contour
Geocoding API
The Geocoding page compares hosted geocoding APIs and self-hostable engines such as Nominatim, Photon and Pelias, and MapLibre GL Geocoder puts a search box on the map for any of them.
Mapbox's Geocoding API documentation limits its responses to use with a Mapbox map; see the terms below.
Directions API
Open-source routing engines (OSRM, Valhalla, GraphHopper, openrouteservice) and hosted routing APIs are compared on the Routing page, and MapLibre GL Directions draws routes from any OSRM- or Mapbox Directions API-compatible provider.
Mapbox's MapLibre guide also shows Directions API results drawn on a MapLibre map.
RoutingMapLibre GL DirectionsOSRMValhallaGraphHopperopenrouteservice
Navigation SDK
MapLibre Navigation for Android and iOS and Ferrostar provide turn-by-turn navigation with MapLibre-based map views.
MapLibre Navigation for Android and iOS started as forks of the Mapbox Navigation SDK v0.19 and v0.21.
Isochrone API
Valhalla, GraphHopper and openrouteservice compute isochrones (areas reachable within a travel time); see the comparison on the Routing page.
Matrix API
OSRM (its table service), Valhalla and openrouteservice have matrix endpoints for travel times between many origins and destinations.
GraphHopper offers a Matrix API as part of its commercial GraphHopper Directions API.
Map Matching API
OSRM (match service), Valhalla (map-matching service) and GraphHopper (map matching module) snap GPS traces to the road network.
Static Images API
TileServer GL and chiitiler render static map images from a MapLibre style on a server, and the MapLibre Native Node.js bindings render map images in your own Node code.
TileServer GL's static image endpoints are not available in its tileserver-gl-light version.
Mapbox Studio (style editing)
Maputnik is MapLibre's free and open visual style editor, and hosted editors from tile providers are listed on the Styling page.
Mapbox's Product Terms limit styles made in or exported from Studio to Studio or a Mapbox Map; see the terms below.
Mapbox GL Draw
Terra Draw has a MapLibre GL JS adapter, maplibre-gl-terradraw wraps it in a ready-made toolbar, and Geoman offers a MapLibre plugin for drawing and editing geometries.
MapLibre's docs also include an example that runs Mapbox GL Draw on MapLibre with CSS class overrides.
Mapbox Tiling Service and tilesets
tippecanoe and Planetiler build vector tilesets, PMTiles stores a tileset as a single file on ordinary cloud storage, and Martin serves tiles from PostGIS, MBTiles and PMTiles; hosted tile platforms are listed on the Tiling page.
The tippecanoe maintained at Felt continues Mapbox's original project: its version 2.0.0 is equivalent to 1.36.0 in Mapbox's repository.
How the features compare
Both libraries have grown in their own directions since 2020, and neither is a superset of the other. Here is where they match and where they differ today.
| Feature | Where | Details |
|---|---|---|
| Globe view | In both | Both render the map as a globe, Mapbox GL JS since v2.9.0 and MapLibre GL JS since v5.0.0, whose globe preset blends into Mercator between zoom 10 and 12. |
| Other map projections | Mapbox only | Mapbox GL JS (since v2.6) offers flat projections such as Albers, Equal Earth, Equirectangular, Lambert Conformal Conic, Natural Earth and Winkel Tripel, while MapLibre GL JS implements Mercator and vertical perspective, with globe as a preset. |
| 3D terrain | In both | Both drape the map over a raster-dem source with setTerrain or a root terrain property, Mapbox GL JS since v2.0.0 and MapLibre GL JS since v2.2.0; Mapbox's exaggeration also accepts interpolate expressions. |
| Sky, fog and atmosphere | In both, differently | MapLibre GL JS puts sky, horizon, fog and the globe atmosphere in one root sky object (added in v4.5.0, merged with the atmosphere in v5.0.0, still marked experimental), while Mapbox GL JS uses a root fog object (since v2.3.0) and a sky layer that its docs say will be phased out. |
| Hillshade methods | MapLibre only | MapLibre GL JS 5.5.0 added hillshade-method (standard, basic, combined, igor and multidirectional) with several illumination directions, and Mapbox's hillshade layer has no such property. |
| Color relief | MapLibre only | MapLibre GL JS 5.6.0 added the color-relief layer type, which tints the map by elevation from raster-dem tiles, and Mapbox's style spec has no color-relief layer. |
| Mapbox Standard style | Mapbox only | Mapbox GL JS v3 loads Mapbox Standard by default and configures it through style imports, slots and setConfigProperty (light presets, label visibility and more), none of which are part of MapLibre's style spec. |
| 3D lights and shadows | Mapbox only | Mapbox GL JS v3.0.0 added a lights API with ambient and directional light that lets extrusions and models cast shadows, while MapLibre's style spec keeps the single light object, which Mapbox now marks as deprecated in favor of lights. |
| 3D model layer | Mapbox only | Mapbox GL JS v3 has a model layer that renders glTF models from the style, while MapLibre GL JS has no model layer and shows 3D models through custom layers, with official three.js and babylon.js examples. |
| Custom WebGL layers | In both | Both keep the custom layer interface (CustomLayerInterface) that Mapbox GL JS introduced in v0.50.0, and MapLibre's examples also run custom layers on a globe. |
| Style specification | In both, differently | MapLibre maintains its own open style specification, used by MapLibre GL JS and MapLibre Native; MapLibre's migration guide notes that the two libraries diverge with features added from v2 onward, and Mapbox v3 additions such as imports, slots, lights and the model layer are not part of it. |
| MapLibre Tiles (MLT) | MapLibre only | MapLibre GL JS 5.12.0 reads MapLibre Tiles, a column-oriented vector tile format, through encoding: 'mlt' on a vector source, and Mapbox's source spec has no MLT encoding. |
| Global state | MapLibre only | MapLibre GL JS 5.6.0 added global state: a root state object that the global-state expression reads and setGlobalStateProperty changes, and Mapbox's expression reference has no global-state expression. |
| PMTiles | In both, differently | MapLibre GL JS reads PMTiles through the pmtiles library's custom protocol (addProtocol, available since v1.15.0), while Mapbox GL JS added built-in PMTiles support through its TileProvider API in v3.21.0. |
| Raster particles | Mapbox only | Mapbox GL JS 3.3.0 added the raster-particle layer, which animates particles from raster-array data (a Mapbox tile format for series such as weather data), and MapLibre's style spec has neither. |
| Interactions API | Mapbox only | Mapbox GL JS 3.8.0 added addInteraction for clicks and hovers on featuresets (stable since 3.23.0); MapLibre GL JS has no addInteraction and uses map.on with layer IDs, which Mapbox GL JS also supports. |
From each library's docs and changelog, checked September 2026. Both move fast, so check their docs for the latest.
Terms to know
If you keep using Mapbox services with MapLibre, these are the terms Mapbox publishes about that, quoted from Mapbox's own documents. They can change, so read the current version before you ship.
Mapbox documents how to use its tile APIs and services in MapLibre GL JS.
Because it shares the same API surface and style format, it integrates with Mapbox raster and vector tile APIs, and with most Mapbox services, using familiar patterns.
Source ↗Mapbox GL JS v2 and later is licensed under the Mapbox Terms of Service for use with Mapbox products, while v1.13 and earlier remain under the BSD 3-Clause license.
The software and files in this repository (collectively, "Software") are licensed under the Mapbox TOS for use only with the relevant Mapbox product(s) listed at www.mapbox.com/pricing.
Source ↗Mapbox's attribution guide asks for the Mapbox logo and attribution when Mapbox maps are shown with another open-source library.
If you are using Mapbox maps with another open source library, like Leaflet or OpenLayers, the Mapbox logo and attribution are still required.
Source ↗Mapbox bills tile requests made through MapLibre and other third-party libraries per request under its Maps API, rather than as map loads.
When consuming tiles through a third-party library (rather than Mapbox GL JS), tile requests are billed individually under the Maps API rather than being bundled into a map load.
Source ↗Mapbox's Product Terms (section 3.36, last updated July 21, 2026) define a Mapbox Map by its content: any map that shows content from Mapbox APIs, such as map tiles, static map images, style files, glyphs or sprites (section 3.32).
“Mapbox Map” means any map that includes any Licensed Map Content (other than Data Products).
Source ↗Mapbox's Geocoding API documentation limits the use of its responses to a Mapbox map.
You may only use responses from the Geocoding API in conjunction with a Mapbox map.
Source ↗Mapbox's Isochrone API documentation asks that results be displayed on a Mapbox map drawn with a Mapbox library or SDK.
Results must be displayed on a Mapbox map using one of the Mapbox libraries or SDKs.
Source ↗Mapbox's Map Matching API documentation has the same display requirement.
Results must be displayed on a Mapbox map using one of the Mapbox libraries or SDKs.
Source ↗The Product Terms (section 2.7.5) restrict POI results from Mapbox search to use with a Mapbox Map.
Customer shall not use any POI Results (i) except in conjunction with a Mapbox Map
Source ↗The Product Terms (section 2.11) limit styles made in or exported from Mapbox Studio to Studio or a Mapbox Map.
For any style developed in or exported from Studio, Customer shall only use that style within Studio or on a Mapbox Map and not any other map design tool or non-Mapbox Map.
Source ↗For mobile apps, the Product Terms (section 2.9.1) name Mapbox's Mobile SDKs as the exclusive way to access Mapbox services.
Customer shall use the Mobile SDKs as Customer’s exclusive means of accessing the Service Offerings in mobile applications.
Source ↗
Ready to try it?
Put a MapLibre map on screen in a few lines, then pick a basemap.
Sources (checked September 2026)
- https://github.com/maplibre/maplibre-gl-js/releases/tag/v1.14.0
- https://github.com/maplibre/maplibre-gl-js/blob/main/README.md
- https://github.com/mapbox/mapbox-gl-js/blob/main/CHANGELOG.md
- https://github.com/mapbox/mapbox-gl-js/releases/tag/v2.0.0
- https://github.com/mapbox/mapbox-gl-js/blob/v2.0.0/LICENSE.txt
- https://github.com/maplibre/maplibre-native/blob/main/FORK.md
- https://github.com/mapbox/mapbox-gl-native-android/blob/main/CHANGELOG.md
- https://github.com/mapbox/mapbox-gl-native-ios/blob/main/platform/ios/CHANGELOG.md
- https://maplibre.org/maplibre-gl-js/docs/guides/mapbox-migration-guide/
- https://maplibre.org/maplibre-gl-js/docs/guides/v5-to-v6-migration-guide/
- https://docs.mapbox.com/help/tutorials/use-mapbox-gl-js-with-react/
- https://maplibre.org/maplibre-gl-js/docs/
- https://docs.mapbox.com/mapbox-gl-js/guides/get-started/use-with-npm/
- https://docs.mapbox.com/mapbox-gl-js/guides/install/
- https://github.com/maplibre/maplibre-gl-js/blob/main/CHANGELOG.md
- https://docs.mapbox.com/mapbox-gl-js/guides/bundler/
- https://docs.mapbox.com/help/dive-deeper/mapbox-in-maplibre/
- https://docs.mapbox.com/mapbox-gl-js/api/map/
- https://openfreemap.org/
- https://docs.mapbox.com/mapbox-gl-js/guides/migrate/
- https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MapOptions/
- https://unpkg.com/maplibre-gl@6.11.2/dist/maplibre-gl.css
- https://docs.mapbox.com/mapbox-gl-js/guides/globe/
- https://maplibre.org/maplibre-gl-js/docs/examples/display-a-globe-with-a-vector-map/
- https://maplibre.org/maplibre-style-spec/projection/
- https://maplibre.org/maplibre-style-spec/sky/
- https://maplibre.org/maplibre-gl-js/docs/examples/sky-fog-terrain/
- https://docs.mapbox.com/mapbox-gl-js/example/add-terrain/
- https://maplibre.org/maplibre-gl-js/docs/examples/3d-terrain/
- https://tiles.mapterhorn.com/tilejson.json
- https://maplibre.org/maplibre-native/ios/latest/documentation/maplibre-native-for-ios/gettingstarted/
- https://github.com/maplibre/maplibre-native/blob/main/platform/ios/CHANGELOG.md
- https://github.com/maplibre/maplibre-native/blob/main/platform/ios/MapLibre.podspec
- https://github.com/maplibre/maplibre-native/blob/main/platform/ios/MapLibre.docc/Info.plist_Keys.md
- https://docs.mapbox.com/ios/maps/guides/migrate-to-v10/
- https://maplibre.org/maplibre-native/android/examples/getting-started/
- https://github.com/maplibre/maplibre-native/blob/main/platform/android/CHANGELOG.md
- https://docs.mapbox.com/android/maps/guides/old-versions/migrate-to-v10/
- https://github.com/maplibre/maplibre-react-native/blob/main/README.md
- https://github.com/maplibre/maplibre-react-native/blob/main/CHANGELOG.md
- https://maplibre.org/maplibre-react-native/docs/setup/migrations/v10/
- https://maplibre.org/maplibre-react-native/docs/setup/migrations/v11/
- https://pub.dev/packages/maplibre_gl
- https://github.com/maplibre/flutter-maplibre-gl/blob/main/maplibre_gl/README.md
- https://github.com/maplibre/flutter-maplibre-gl/blob/main/maplibre_gl/CHANGELOG.md
- https://visgl.github.io/react-map-gl/docs/whats-new
- https://visgl.github.io/react-map-gl/docs/get-started
- https://github.com/maplibre/ngx-maplibre-gl/blob/main/README.md
- https://github.com/maplibre/ngx-maplibre-gl/blob/main/CHANGELOG.md
- https://github.com/mapbox/mapbox-gl-draw/blob/main/README.md
- https://maplibre.org/maplibre-gl-js/docs/examples/draw-polygon-with-mapbox-gl-draw/
- https://github.com/JamesLMilner/terra-draw/blob/main/README.md
- https://github.com/JamesLMilner/terra-draw/blob/main/packages/terra-draw-maplibre-gl-adapter/README.md
- https://maplibre.org/maplibre-gl-js/docs/examples/draw-geometries-with-terra-draw/
- https://github.com/maplibre/maplibre-gl-geocoder/blob/main/CHANGELOG.md
- https://github.com/maplibre/maplibre-gl-geocoder/blob/main/README.md
- https://cloudless.eox.at
- https://maplibre.org/maplibre-gl-js/docs/examples/display-a-globe-with-an-atmosphere/
- https://mapterhorn.com/
- https://registry.opendata.aws/terrain-tiles/
- https://github.com/tilezen/joerd/blob/master/docs/formats.md
- https://github.com/onthegomap/maplibre-contour/blob/main/README.md
- https://docs.mapbox.com/api/search/geocoding/
- https://github.com/maplibre/maplibre-gl-directions/blob/main/README.md
- https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md
- https://valhalla.github.io/valhalla/api/
- https://github.com/graphhopper/graphhopper/blob/master/README.md
- https://giscience.github.io/openrouteservice/api-reference/endpoints/
- https://github.com/maplibre/maplibre-navigation-android/blob/main/README.md
- https://github.com/maplibre/maplibre-navigation-ios/blob/main/README.md
- https://stadiamaps.github.io/ferrostar/print.html
- https://github.com/maptiler/tileserver-gl/blob/master/docs/endpoints.rst
- https://github.com/Kanahiro/chiitiler/blob/main/README.md
- https://github.com/maplibre/maplibre-native/blob/main/platform/node/README.md
- https://github.com/maplibre/maputnik/blob/main/README.md
- https://www.mapbox.com/legal/product-terms
- https://github.com/geoman-io/maplibre-geoman/blob/master/README.md
- https://github.com/felt/tippecanoe/blob/main/README.md
- https://github.com/onthegomap/planetiler/blob/main/README.md
- https://github.com/protomaps/PMTiles/blob/main/README.md
- https://github.com/maplibre/martin/blob/main/README.md
- https://maplibre.org/maplibre-style-spec/types/
- https://docs.mapbox.com/mapbox-gl-js/guides/projections/
- https://docs.mapbox.com/style-spec/reference/terrain/
- https://maplibre.org/maplibre-style-spec/terrain/
- https://docs.mapbox.com/style-spec/reference/fog/
- https://docs.mapbox.com/style-spec/reference/layers/
- https://maplibre.org/maplibre-style-spec/layers/
- https://maplibre.org/maplibre-gl-js/docs/examples/add-a-color-relief-layer/
- https://docs.mapbox.com/style-spec/reference/imports/
- https://maplibre.org/maplibre-style-spec/root/
- https://docs.mapbox.com/style-spec/reference/light/
- https://docs.mapbox.com/style-spec/reference/root/
- https://maplibre.org/maplibre-style-spec/light/
- https://docs.mapbox.com/style-spec/guides/using-3d-models/
- https://maplibre.org/maplibre-gl-js/docs/examples/add-a-3d-model-using-threejs/
- https://maplibre.org/maplibre-gl-js/docs/examples/add-a-3d-model-with-babylonjs/
- https://maplibre.org/maplibre-gl-js/docs/API/interfaces/CustomLayerInterface/
- https://maplibre.org/maplibre-gl-js/docs/examples/add-a-simple-custom-layer-on-a-globe/
- https://docs.mapbox.com/mapbox-gl-js/api/properties/
- https://github.com/maplibre/maplibre-style-spec/blob/main/README.md
- https://maplibre.org/maplibre-tile-spec/
- https://maplibre.org/maplibre-style-spec/sources/
- https://docs.mapbox.com/style-spec/reference/sources/
- https://maplibre.org/maplibre-style-spec/expressions/
- https://docs.mapbox.com/style-spec/reference/expressions/
- https://maplibre.org/maplibre-gl-js/docs/API/functions/addProtocol/
- https://docs.mapbox.com/mapbox-gl-js/example/pmtiles-vector-source/
- https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/
- https://github.com/mapbox/mapbox-gl-js/blob/main/LICENSE.txt
- https://docs.mapbox.com/help/dive-deeper/attribution/
- https://cdn.prod.website-files.com/609ed46055e27a02ffc0749b/6a60463142f6478d57642594_Mapbox%20Product%20Terms%20(July%2021%2C%202026).pdf
- https://docs.mapbox.com/api/navigation/isochrone/
- https://docs.mapbox.com/api/navigation/map-matching/