protomaps/PMTiles

Pyramids of map tiles in a single file on static storage

TypeScript

3,090

790 commits

updated Sep 16, 2026

See the code

README

pmtiles npm pmtiles pypi rio-pmtiles pypi ol-pmtiles npm

🔎 PMTiles Viewer: https://pmtiles.io/ 🔎

PMTiles

PMTiles is a single-file archive format for tiled data. A PMTiles archive can be hosted on a commodity storage platform such as S3, and enables low-cost, zero-maintenance map applications that are "serverless" - free of a custom tile backend or third party provider.

Demos require MapLibre GL JS v1.15 or later.

See also:

Creating PMTiles

Download the pmtiles binary for your system at go-pmtiles/Releases.

pmtiles convert INPUT.mbtiles OUTPUT.pmtiles
pmtiles upload OUTPUT.pmtiles s3://my-bucket?region=us-west-2 // requires AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY env vars to be set

Consuming PMTiles

JavaScript

See js/README.md and js/examples for usage in Leaflet or MapLibre GL JS.

See openlayers/README.md for usage in OpenLayers.

Go

See the go-pmtiles repository.

Python

See pmtiles scripts for library usage

Serverless

PMTiles on AWS Lambda

PMTiles on Cloudflare Workers

Specification

The current specification version is Version 3.

Recipes

Example of how to create a PMTiles archive from the Census Bureau Zip Code Tabulation Areas Shapefile using tippecanoe:

    # use GDAL/OGR to convert SHP to GeoJSON
    ogr2ogr -t_srs EPSG:4326 cb_2018_us_zcta510_500k.json cb_2018_us_zcta510_500k.shp
    # Creates a layer in the vector tiles named "zcta"
    tippecanoe -zg --projection=EPSG:4326 -o cb_2018_us_zcta510_500k_nolimit.pmtiles -l zcta cb_2018_us_zcta510_500k.json

Uploading to Storage

Using the PMTiles command line tool:

pmtiles upload LOCAL.pmtiles "s3://BUCKET_NAME?endpoint=https://example.com&region=region" REMOTE.pmtiles

Using RClone (do rclone config first)

rclone copyto LOCAL.pmtiles r2:/BUCKET/REMOTE.pmtiles --progress --s3-chunk-size=256M --s3-upload-concurrency=2

License

The reference implementations of PMTiles are published under the BSD 3-Clause License. The PMTiles specification itself is public domain, or under a CC0 license where applicable.

pmtiles
serverless

protomaps/PMTiles

Pyramids of map tiles in a single file on static storage

TypeScript

3,090

790 commits

updated Sep 16, 2026

See the code

README

pmtiles npm pmtiles pypi rio-pmtiles pypi ol-pmtiles npm

🔎 PMTiles Viewer: https://pmtiles.io/ 🔎

PMTiles

PMTiles is a single-file archive format for tiled data. A PMTiles archive can be hosted on a commodity storage platform such as S3, and enables low-cost, zero-maintenance map applications that are "serverless" - free of a custom tile backend or third party provider.

Demos require MapLibre GL JS v1.15 or later.

See also:

Creating PMTiles

Download the pmtiles binary for your system at go-pmtiles/Releases.

pmtiles convert INPUT.mbtiles OUTPUT.pmtiles
pmtiles upload OUTPUT.pmtiles s3://my-bucket?region=us-west-2 // requires AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY env vars to be set

Consuming PMTiles

JavaScript

See js/README.md and js/examples for usage in Leaflet or MapLibre GL JS.

See openlayers/README.md for usage in OpenLayers.

Go

See the go-pmtiles repository.

Python

See pmtiles scripts for library usage

Serverless

PMTiles on AWS Lambda

PMTiles on Cloudflare Workers

Specification

The current specification version is Version 3.

Recipes

Example of how to create a PMTiles archive from the Census Bureau Zip Code Tabulation Areas Shapefile using tippecanoe:

    # use GDAL/OGR to convert SHP to GeoJSON
    ogr2ogr -t_srs EPSG:4326 cb_2018_us_zcta510_500k.json cb_2018_us_zcta510_500k.shp
    # Creates a layer in the vector tiles named "zcta"
    tippecanoe -zg --projection=EPSG:4326 -o cb_2018_us_zcta510_500k_nolimit.pmtiles -l zcta cb_2018_us_zcta510_500k.json

Uploading to Storage

Using the PMTiles command line tool:

pmtiles upload LOCAL.pmtiles "s3://BUCKET_NAME?endpoint=https://example.com&region=region" REMOTE.pmtiles

Using RClone (do rclone config first)

rclone copyto LOCAL.pmtiles r2:/BUCKET/REMOTE.pmtiles --progress --s3-chunk-size=256M --s3-upload-concurrency=2

License

The reference implementations of PMTiles are published under the BSD 3-Clause License. The PMTiles specification itself is public domain, or under a CC0 license where applicable.

pmtiles
serverless

Project health

Latest release

3.8.1 · Sep 16, 2026

Releases this year

5

Significant stargazers

(top 24 of 69)

Volodymyr Agafonkin

6,268 followers · starred Apr 2023

Renée

501 followers · starred Apr 2024

Brandon Keepers

2,164 followers · starred Jan 2026

Philippe Rivière

743 followers · starred Oct 2023