Skip to main content
Vecaria

GeoJSON to PMTiles

Local

Tile GeoJSON into a single PMTiles file in your browser — set the zoom range, inspect it in-page, host it on R2 or any CDN. Free, no sign-up, no upload.

Drag files here, or click to browse

Supports GEOJSON, JSON

Choose file

Tiling runs locally in your browser (geojson-vt + in-house PMTiles writer) — nothing is uploaded. Tiles are generated from min zoom to max zoom (tiles below min zoom are skipped to save space); the header bounds/center and vector_layers metadata are written so MapLibre/QGIS can frame the data. Large datasets: simplify first.

What is it? GeoJSON to PMTiles tiles a GeoJSON layer into vector tiles packed as a single PMTiles file entirely in your browser (geojson-vt + in-house PMTiles v3 writer) — nothing is uploaded, free with no sign-up. The header bounds/center and vector_layers metadata are written per the v3 spec, tile contents are deduplicated, the min/max zoom range is yours to set, and the freshly built archive can be inspected in-page via the official PMTiles protocol adapter. Ideal for R2/CDN distribution.

TL;DR: Tile GeoJSON into a single PMTiles archive in your browser — set the zoom range, inspect it in-page, free with no sign-up and no upload.

How to use

  1. Drop in a .geojson or .json file.
  2. Optionally set the min and max zoom levels (0–15, default 0–8; tiles below the min zoom are not generated).
  3. Click "Tile & Download" — the .pmtiles file is built locally, saved automatically, and shown on the in-page inspection map (official PMTiles protocol adapter + MapLibre).

FAQ

Is it really local?

Yes — tiling, encoding and packaging all run in your browser; the file never leaves your device. The in-page inspection map reads the freshly built archive from an in-memory blob (basemap tiles are fetched over the network).

How big can my data be?

Datasets up to roughly 100 MB work well. Simplify very large datasets first, lower the max zoom, or raise the min zoom.

Will MapLibre/QGIS frame my data correctly?

Yes — header bounds/center (int32 1e7 fixed-point, official reader semantics) and metadata bounds/center/vector_layers (with property column types) are written with real values, so the official MapLibre protocol adapter no longer logs "Bounds not valid" and the TileJSON bounds are no longer [0,0,0,0].

How is this different from Tippecanoe?

Tippecanoe is the official tiling CLI for PMTiles (v2.17+ writes PMTiles directly) and the right choice for planet-scale or scripted batch pipelines — but it is a C++ install, and on Windows it needs Cygwin or Docker. This tool does the same job in your browser: no install, no sign-up, nothing uploaded. Use it for datasets up to roughly 100 MB; reach for Tippecanoe when you need server-grade scale.

Which zoom levels should I pick?

The default 0–8 suits city-to-country overviews. You can go up to z15 — enough for street-level mapping. Tiles below your min zoom are skipped to keep the archive small, so raise the min zoom or lower the max zoom when the output is too big.

Can I preview the archive before hosting it?

Yes — the in-page inspection map reads the freshly built PMTiles from an in-memory blob through the official PMTiles protocol adapter with MapLibre (basemap tiles are fetched over the network, your data is not). Any MapLibre app can load the file the same way with the pmtiles:// protocol.

How do I serve the .pmtiles file?

Upload the single file to R2, S3 or any static host with HTTP range-request support and render it with MapLibre GL — no tile server, no MBTiles unpacking. The header bounds and center are already in the archive, so the map frames your data on load.

Examples

  • Drop in GeoJSON → optionally set the zoom range (default 0–8) → click Tile & download → the .pmtiles file downloads automatically and renders on the in-page inspection map

Supported formats

GeoJSONPMTiles

Limitations

  • Runs locally in your browser (geojson-vt, ISC) — no sign-in, nothing uploaded.
  • PMTiles v3 container: when the root directory exceeds the 16 KB read budget, leaf directories are written per spec (verified against the official pmtiles reader).
  • Tiles with identical bytes share one stored copy (numTileContents counts unique contents); the zoom range is user-settable (tiles below the min zoom are skipped).
  • Zero-span extents (e.g. a single point): the archive bounds upper bound is padded by one 1e-7° quantum at the header's fixed-point resolution so the official reader's bounds check (min < max) passes — tile geometry is unchanged (a disclosure line appears when it applies).
  • Best for small-to-medium datasets (under ~100 MB); simplify huge inputs first, or use Tippecanoe for server-grade tiling.
  • Antimeridian-crossing geometry is split/shifted along the ±180° dateline before tiling so features don't span the projection face (a disclosure line appears when it applies).
  • Tiles are in Web Mercator (EPSG:3857) — implied by the PMTiles/MVT protocols, no CRS metadata is written.
  • Output is PMTiles (not MBTiles).

Privacy

Privacy first: this tool runs entirely in your browser — your input and files never leave your device, and everything is cleared when you close the page.