// the find
protomaps/basemaps
Basemap PMTiles generation and cartographic styles for OpenStreetMap data and more
Protomaps Basemaps is a complete pipeline for generating self-hostable vector map tiles from OpenStreetMap data, paired with MapLibre GL styles for rendering them in a browser. The tile generation is a Planetiler profile (Java) that produces a single PMTiles file for the whole planet in 2-3 hours. It's for developers who want to stop paying per-tile API fees and run their own map stack.
The PMTiles format is the real win here — a single flat file you can serve from any static host or CDN with HTTP range requests, no tile server process required. The style system is TypeScript that generates MapLibre JSON, which means you can programmatically swap themes, languages, and layer configs rather than hand-editing giant style blobs. The render test suite is pixel-level: each test case ships an input OSM PBF, expected PNG, and style JSON, so visual regressions are caught in CI rather than discovered in production. Layer-by-layer Java source (Roads.java, Places.java, etc.) means the tile generation logic is readable and patchable without understanding the whole Planetiler framework.
Only US and NL locale implementations exist out of the box — adding right-to-left or CJK locale handling means writing it yourself, and the ScriptSegmenter code suggests this is non-trivial. The sprites are built via a Rust tool in a separate Cargo workspace, so the full build chain is Java + Node + Rust, which is a meaningful setup tax. The style package only ships five color themes and there's no documented path for adding a custom one without forking the package. Test coverage in the Java tile layer is at the layer level (one test per layer), not at the OSM tag level, so edge cases in tagging — highway=track, access=private, etc. — can slip through unnoticed.