Skip to content
c17 .ioJoin list

Stacks / Backend

Medium

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

Replace Mapbox

Estimated SaaS saved

$1,200

per year, small team, before lock-in

Start on Railway

Nominatim / GraphHopper if this is geocoding and routing, not vector tiles

Sponsor this stack Tip jar

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

Cost table

You stop payingTypical / yearSelf-host instead
Mapbox (small team)$1,200MapLibre 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.