maplibre-cartography
Cartographic principles for MapLibre GL JS — label and symbol legibility on imagery vs. vector basemaps, figure-ground for point…
Six places where MapLibre Native (Android, iOS) and MapLibre GL JS differ, release by release — custom URL schemes (`addProtocol`), globe projection, 3D terrain, `interpolate-hcl` and `interpolate-lab`, the `color-relief` layer, and PMTiles — with the Native release that closed
Claude Code
$ npx -y skills add maplibre/maplibre-agent-skills --skill maplibre-native-gl-js-parity --agent claude-code
Codex
$ npx skills add maplibre/maplibre-agent-skills --skill maplibre-native-gl-js-parity -a codex -y
Cursor
$ npx skills add maplibre/maplibre-agent-skills --skill maplibre-native-gl-js-parity -a cursor -y
Gemini CLI
$ npx skills add maplibre/maplibre-agent-skills --skill maplibre-native-gl-js-parity -a gemini-cli -y
GitHub Copilot
$ npx skills add maplibre/maplibre-agent-skills --skill maplibre-native-gl-js-parity -a github-copilot -y
OpenCode
$ npx skills add maplibre/maplibre-agent-skills --skill maplibre-native-gl-js-parity -a opencode -y
Windsurf
$ npx skills add maplibre/maplibre-agent-skills --skill maplibre-native-gl-js-parity -a windsurf -y
name: maplibre-native-gl-js-parity description: Six places where MapLibre Native (Android, iOS) and MapLibre GL JS differ, release by release — custom URL schemes (`addProtocol`), globe projection, 3D terrain, `interpolate-hcl` and `interpolate-lab`, the `color-relief` layer, and PMTiles — with the Native release that closed each gap, the tracking issue for each still open, and what to do on Native instead. Use when a style or feature that works in the browser does nothing in an Android or iOS app, or when porting MapLibre GL JS code to Kotlin or Swift. metadata: status: verified
MapLibre GL JS and MapLibre Native read the same style specification but ship features at different times. A style key Native does not know is ignored, and a paint value it cannot parse drops its layer, both without a crash, so the symptom is a map that quietly differs from the browser. The table below names each gap this skill covers, the release that closed it where one has, and what to do on Native instead. Rows were checked against android-v13.7.1 (2026-10-15) and ios-v7.0.0 (2026-10-28).
These are symptoms as you would observe them, before you know the cause:
**Scope.** The table's six gaps are the ones where a model answering without this skill gets the API or the release wrong. The renderers differ in other places too. For a feature not in the table, find the release that added it in the Native CHANGELOGs.[5] [6] The `js-parity` label tracks open gaps,[1] but some open issues there describe shipped features.
| Feature | MapLibre GL JS | MapLibre Native | Do on Native | | ---------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | A custom URL scheme for tiles (`vault://…`) | `addProtocol`, promise-based since 4.0.0[9] | No `addProtocol`; [#3562](https://github.com/maplibre/maplibre-native/issues/3562) open[2] | Android: a custom `HttpRequest` from a `ModuleProvider` (android-v11.0.0), an OkHttp interceptor on `https://` URLs the app marks, or a `CustomVectorSource` (android-v13.5.0). iOS: a `URLProtocol` in `MLNNetworkConfiguration`'s `sessionConfiguration` (every release). | | Globe projection (`projection: globe`) | Yes | No release; [#3161](https://github.com/maplibre/maplibre-native/issues/3161) open[3] | Stay on Mercator, or show the globe in a web view running GL JS | | 3D terrain (`map.setTerrain`, the style's `terrain`) | Yes | No release; [#252](https://github.com/maplibre/maplibre-native/issues/252) open[4] | `hillshade` or `color-relief` on the same `raster-dem` source: shading on a flat map, not relief | | `interpolate-hcl`, `interpolate-lab` | Yes | android-v13.7.1, ios-v7.0.0 ([#4668](https://github.com/maplibre/maplibre-native/pull/4668)); earlier releases drop the layer[5] [6] | Upgrade, or keep the release and use a plain `interpolate` ramp with intermediate stops | | `color-relief` layer | 5.6.0[9] | android-v13.0.0,
Curated guidance for AI assistants building MapLibre applications — covering ecosystem and open-source best practices. Agent skills are markdown files that AI coding assistants read as context.
Cartographic principles for MapLibre GL JS — label and symbol legibility on imagery vs. vector basemaps, figure-ground for point…
Configuring fonts and glyphs for MapLibre GL JS and MapLibre Native — the style's `glyphs` URL, self-hosting or generating font…
Migrating from Mapbox GL JS to MapLibre GL JS — package and import changes, removing the access token, choosing tile sources,…
Serverless vector and raster tiles with PMTiles for MapLibre GL JS — single-file format, HTTP range requests, hosting on…
The step-by-step procedure for running this repo's Promptfoo evals with a generator and a judge over provider APIs. Use when…
How to turn a working session into a MapLibre agent skill — you researched something MapLibre's docs did not cover, got it wrong…
How to work in a Codebase Wiki project (the `codebase-wiki` starter pack): an agent-authored, source-grounded wiki of the…
Simulates academic peer review, evaluating papers across Originality, Methodology, Results, and Writing to provide Major/Minor…