Stacks / Backend
MapLibre GL / Protomaps
Vector maps you host. MapLibre GL JS is BSD-3-Clause; Protomaps is BSD-3-Clause PMTiles — Mapbox without the map load meter.
The problem
Mapbox meters map loads, tiles, and the GL JS SDK. You wanted vector tiles and a renderer whose license you can read. MapLibre GL JS is BSD-3-Clause (maplibre/maplibre-gl-js), the community fork of Mapbox GL JS v1. Protomaps is BSD-3-Clause PMTiles (protomaps/go-pmtiles) so a map can be one file you host. This is not Mapbox's every geocoding/navigation SKU — that slice is /replace/google-maps (Nominatim, GraphHopper). Street View stays behind.
Replaces
Mapbox
Estimated SaaS saved
$1,200
per year, small team, before lock-in
Start on RailwayNominatim / GraphHopper if this is geocoding and routing, not vector tiles
Placeholder: serve a PMTiles file (or a tile server) plus a static page that loads MapLibre GL JS. A volume for the archive. No one-click template in this repo yet — Start on Railway. Geocoding/routing stays on /stacks/osm-maps.
The stack
- MapLibre GL JS
BSD-3-Clause vector map renderer in the browser
- Protomaps
BSD-3-Clause PMTiles archives you host as a single file
Cost table
| You stop paying | Typical / year | Self-host instead |
|---|---|---|
| Mapbox (small team) | $1,200 | MapLibre GL JS + PMTiles |
Agent setup prompt
Replace Mapbox GL / tiles with MapLibre GL JS and a Protomaps PMTiles file (or another OSM tile source you host). - One map page, one archive or tile URL. Do not claim Mapbox geocoding or navigation APIs — those stay on /stacks/osm-maps. - Write AGENT_PROMPT.md.
Also as markdown: /stacks/maplibre-tiles.md
FAQ
- MapLibre or Protomaps?
- MapLibre is the renderer. Protomaps is tiles in a file. You usually want both.
- Why not the Google Maps page?
- /replace/google-maps is geocoding, routing, and embeds (Nominatim, GraphHopper, uMap). This page is Mapbox-shaped vector tiles and GL JS.
- Do I get Mapbox geocoding?
- No. Nominatim is /replace/google-maps.