PMTiles-MBTiles-Util
PMTiles-MBTiles-Util is a utility for importing, exporting, and converting between the MBTiles and PMTiles archive formats, as well as flat directory tile structures on disk. It provides the pmtiles-mbtiles-util command.
⚙️ Capabilities
- Format Conversion: Directly convert
.mbtilesto.pmtilesand vice versa. - MBTiles Support: Full import/export support for the MBTiles SQLite-based tile archive format.
- PMTiles Support: Full import/export and direct conversion support for the PMTiles single-file tile archive format.
- Disk Export: Extract tiles from an archive to a standard directory structure (XYZ, TMS, etc.).
- Disk Import: Pack a directory of tiles into a single portable archive.
- Deduplication: Use hash-based compression to reduce file sizes for repetitive maps (e.g., oceans or vector data).
📦 Installation
pip install pmtiles-mbtiles-util
The name differs from the upstream project it forks. mbutil on PyPI belongs
to the original, now-archived Mapbox project, and PyPI rejects mb-util too as
being too similar to it. The command and the import package match the
distribution, so nothing is shared with the original:
| This project | mapbox/mbutil | |
|---|---|---|
| Distribution | pmtiles-mbtiles-util |
mbutil |
| Command | pmtiles-mbtiles-util |
mb-util |
| Import | pmtiles_mbtiles_util |
mbutil |
From source
git clone https://github.com/TechIdiots-LLC/pmtiles-mbtiles-util.git
cd pmtiles-mbtiles-util
# Install the pmtiles-mbtiles-util command globally
pip install .
Docker
PMTiles-MBTiles-Util is also available as a Docker image. See DOCKER.md for usage instructions.
🛠 Usage
pmtiles-mbtiles-util [options] <input> <output>
Quick Examples
| Action | Command |
|---|---|
| Convert MBTiles to PMTiles | pmtiles-mbtiles-util world.mbtiles world.pmtiles |
| Convert PMTiles to MBTiles | pmtiles-mbtiles-util world.pmtiles world.mbtiles |
| Extract to Directory | pmtiles-mbtiles-util world.pmtiles ./tiles_dir |
| Import from Directory | pmtiles-mbtiles-util ./tiles_dir world.mbtiles |
| Dump Metadata | pmtiles-mbtiles-util world.pmtiles dumps |
Options
| Option | Description |
|---|---|
-h, --help |
Show help message and exit |
--scheme=SCHEME |
Tiling scheme: xyz (default), tms, wms, zyx, ags, gwc |
--image_format=FORMAT |
Tile format: png, jpg, webp, pbf, mvt, mlt |
--do_compression |
Enable hash-based tile deduplication when writing to MBTiles (has no effect for PMTiles or disk output) |
--hash_type=TYPE |
Algorithm for deduplication: fnv1a (fastest, default), sha256, sha256_truncated, md5 |
--silent |
Disable progress logging for faster execution |
💎 Tile Deduplication
Deduplication behaviour varies by output format:
- MBTiles output: Use
--do_compressionto enable hash-based deduplication. Identical tiles are stored only once with internal references, which can significantly reduce file size for repetitive maps (e.g. ocean tiles, empty areas, vector data). - PMTiles output: Deduplication is built into the PMTiles format and happens automatically.
--do_compressionis not needed and has no effect. - Disk output: No deduplication — each tile is written as an individual file.
# Deduplicate when writing to MBTiles
pmtiles-mbtiles-util --do_compression --hash_type sha256_truncated ./my_tiles world.mbtiles
Hash Types
| Hash Type | Bits | Speed | Best For |
|---|---|---|---|
| fnv1a (default) | 64 | Fastest | General use |
| sha256_truncated | 64 | Medium | Balanced performance |
| sha256 | 256 | Medium | Maximum collision resistance |
| md5 | 128 | Fast | Legacy compatibility |
⚡ Performance & Large Files
- Deduplication: Use
--do_compressionwhen writing to MBTiles to reduce file size for repetitive content. PMTiles handles deduplication automatically. - Silent mode: Use
--silentto skip progress logging for a small speed boost. - Temporary Storage: When converting to PMTiles, the utility writes a temporary file during conversion. By default this goes to
/tmp, which on some Linux systems is RAM-backed (tmpfs). For very large files, redirect it to a physical disk:
TMPDIR=/mnt/external_drive/tmp pmtiles-mbtiles-util world.mbtiles world.pmtiles
The temp file grows to roughly the same size as the output PMTiles archive and is deleted automatically when conversion completes.
🔗 Specifications & Resources
- PMTiles Project — The cloud-native, single-file tile format.
- PMTiles Documentation — Reference for the PMTiles ecosystem.
- MBTiles Spec — The SQLite-based tile container specification.
🧪 Testing
Tests use Python's built-in unittest and are compatible with both pytest (recommended) and nosetests.
# Using pytest (recommended)
pip install pytest
pytest test/
# Using unittest directly
python -m unittest discover test/
# Using nosetests (legacy)
pip install nose
nosetests
Test files:
test/test.py— MBTiles import/export teststest/test_pmtiles.py— PMTiles conversion and roundtrip tests
📄 License
BSD — See LICENSE.md for details.
👥 Authors
- Andrew Calcutt (acalcutt) — Current Maintainer
- Tom MacWright (tmcw) — Original Creator
- Dane Springmeyer (springmeyer)
- Mathieu Leplatre (leplatrem)
Metadata
Release files for pmtiles-mbtiles-util 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pmtiles_mbtiles_util-1.0.0.tar.gz | 25.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pmtiles_mbtiles_util-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 44.1 kB
Release files / pmtiles_mbtiles_util-1.0.0.tar.gz
| Download URL | pmtiles_mbtiles_util-1.0.0.tar.gz |
|---|---|
| Size | 25.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cb1b73564592a76b091b1bac953fe7f609486e094769ad01426dcec9aae0ed6e
|
|
BLAKE2b-256 checksum How to use checksums |
d789467739afe46ba847e4126572d337cd14c900d8ba5a102347f7e8d4ebe30c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency logRelease files / pmtiles_mbtiles_util-1.0.0-py3-none-any.whl
| Download URL | pmtiles_mbtiles_util-1.0.0-py3-none-any.whl |
|---|---|
| Size | 18.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
426fe5620cd7c9e4ce471389810088ab03e9f82d00797ed236522feb9d80de79
|
|
BLAKE2b-256 checksum How to use checksums |
c5914ddd1efa40445264894ade08139bfa8b7d3fb9fd7f7e62db31e141f2a8af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency log