tylertoo
Fast GeoParquet → PMTiles converter in Rust.
📖 Documentation · Getting Started · Live demo · Overview tuning · CLI reference
Quickstart
cargo install tylertoo
curl -LO https://github.com/geoparquet-io/tylertoo/releases/download/fixtures-v1/fieldmaps-madagascar-adm4.parquet
tylertoo fieldmaps-madagascar-adm4.parquet madagascar.pmtiles --max-zoom 10
The output of this should be:
[convert] scan complete: 17465 feature(s) from 17465 row(s)
[convert] pass 2: building 11 overview level(s) from a single read (finest level streamed last)
[rss] convert peak: 231 MiB
intermediate overview: /var/.../T/.tylertoo-overview-p7TdMr.parquet (25.87 MiB, removed after export; --keep-overview PATH retains it)
[export] scan complete: 10 levels, single read, 0.15s
[export] level 10/10 z10 done: 17465 feats, 524 tiles, 1 partitions, 0.3s (total 1s)
✓ Converted fieldmaps-madagascar-adm4.parquet → madagascar.pmtiles
752 tiles across z0..z10 in 1.18s
z0 declared but empty: every feature generalized away there (see --collapse / --collapse-square), or an entry-zoom ladder holds every feature out of them
The output madagascar.pmtiles should be 6.7mb, and can be dropped into
pmtiles.io to view it.
From here, Getting Started covers preparing your own input and the two-step overview workflow.
Status: Under active development, expect changes while we stabilize to a 1.0 — see the Road to 1.0 issue for what's currently planned.
tylertoo takes its name from "Tippecanoe and Tyler Too", the 1840 U.S. campaign slogan. It's a nod to tippecanoe, the vector-tile tool this project measures itself against — tylertoo runs alongside it.
Features:
- COG-style multi-resolution overviews embedded in GeoParquet (
tylertoo overview) — the file stays valid, exact, SQL-queryable GeoParquet - PMTiles export from an overview file (
tylertoo export-pmtiles) - One-shot GeoParquet → PMTiles (
tylertoo tiles, or the bare form) - Quality ladder tuned against tippecanoe: class ranking (Overture auto-detect), visibility gates, density budget, point clustering, line coalescing
- Memory-bounded streaming conversion — a 632k-polygon / 38M-vertex file converts to a full z0–14 overview pyramid in ~45 s at ~1.4 GB peak RSS, or a default z0–6 pyramid in ~7 s at ~0.4 GB (16-core machine; measured, see ARCHITECTURE.md)
- Remote inputs (
s3://,https://,gs://) read via byte-range requests — with--bbox, extract a city from a remote country-scale file while downloading only the matching row groups (Remote Reads) - Attribute filtering (
--filter/--where) — tile only the features matching a SQL-WHERE-style predicate ("confidence > 0.8","crop IN ('soy', 'corn')"), with parquet row-group statistics pushdown so non-matching row groups are never read (or fetched, on remote input); composes with--bbox(Tuning guide) - Spec validation (
tylertoo validate) - PMTiles → GeoParquet decoding (
tylertoo decode) — tippecanoe-decode semantics, any PMTiles v3 MVT archive
Install
cargo install tylertoo # CLI
pip install tylertoo # Python
Prebuilt CLI binaries for Linux (x86_64 gnu and musl), macOS (Intel and Apple Silicon) and Windows x86_64 are attached to every GitHub Release.
Usage
# One-shot: GeoParquet in, PMTiles out (recommended)
tylertoo input.parquet output.pmtiles --min-zoom 0 --max-zoom 14
# Keep the reusable multi-resolution overview file too — one run, both artifacts
tylertoo input.parquet output.pmtiles --max-zoom 14 \
--keep-overview overviews.parquet
The one-shot form materializes an intermediate overview GeoParquet before
exporting (at least input-sized — it is not zero-disk). Its path and
size are logged, --spill-dir / $TMPDIR control where it lives, and a
free-space preflight warns when the volume looks too small.
The Two-Step Workflow
The overview GeoParquet file is the interesting artifact — build it explicitly when you want to validate it, query it, or re-export with different flags without re-converting:
# 1. Embed multi-resolution levels in a GeoParquet file
tylertoo overview input.parquet overviews.parquet \
--min-zoom 0 --max-zoom 14
# 2. Validate against the spec
tylertoo validate overviews.parquet
# 3. Export a PMTiles archive for map rendering
tylertoo export-pmtiles overviews.parquet output.pmtiles
To match what tiles writes, pass export-pmtiles --min-zoom <the overview's requested minimum> — otherwise the archive header starts at the coarsest
level that actually holds features.
Every tuning knob is available on the one-shot tiles command as well as
on overview / export-pmtiles — see
Overview Tuning. Defaults are calibrated on
rendered corpus sweeps and are meant to look right out of the box.
Decoding PMTiles back to GeoParquet
# Extract one zoom of any PMTiles v3 vector archive as GeoParquet
tylertoo decode input.pmtiles output.parquet --zoom 14
The output is the tiled representation (simplified, clipped, duplicated
across tiles and zooms — no round-trip guarantee), with zoom/layer/
mvt_id provenance columns for filtering. See
Decoding PMTiles.
Input Preparation
Inputs must be WGS84 (EPSG:4326), and should be Hilbert-sorted with sane
row groups. Use geoparquet-io
(gpio, verified against 1.5.0):
# Already WGS84: Hilbert-sort and repack row groups in one pass.
gpio sort hilbert input.parquet prepared.parquet --row-group-size-mb 128
# In another projection: reproject first, then sort.
gpio convert reproject input.parquet wgs84.parquet -d EPSG:4326
gpio sort hilbert wgs84.parquet prepared.parquet --row-group-size-mb 128
Python
from tylertoo import overview, export_pmtiles, validate
overview("input.parquet", "overviews.parquet", min_zoom=0, max_zoom=14)
validate("overviews.parquet")
export_pmtiles("overviews.parquet", "output.pmtiles")
# One-shot facade (deprecated in favor of the two-step API)
from tylertoo import convert
convert("input.parquet", "output.pmtiles", min_zoom=0, max_zoom=14)
Documentation
- Getting Started — Installation, one-shot conversion, the two-step workflow
- Diving Deeper — Input prep, zoom tuning, remote/multi-file input, bounded memory
- Reference — Generated CLI, Python, and Rust API surface
- Overview Tuning — Every generalization knob explained
- Decoding PMTiles — PMTiles → GeoParquet, limitations included
- Format Spec (draft) — The
geo:overviewsformat contract
Development
git clone https://github.com/geoparquet-io/tylertoo.git && cd tylertoo
git config core.hooksPath .githooks
cargo build && cargo check
See CONTRIBUTING.md and DEVELOPMENT.md for details.
License
Apache-2.0
Release files for tylertoo 0.7.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tylertoo-0.7.1.tar.gz | 797.6 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| tylertoo-0.7.1-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| tylertoo-0.7.1-cp39-abi3-musllinux_1_2_x86_64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ x86-64 | Details |
| tylertoo-0.7.1-cp39-abi3-musllinux_1_2_aarch64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ ARM64 | Details |
| tylertoo-0.7.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| tylertoo-0.7.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| tylertoo-0.7.1-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| tylertoo-0.7.1-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 69.0 MB
Release files / tylertoo-0.7.1.tar.gz
| Download URL | tylertoo-0.7.1.tar.gz |
|---|---|
| Size | 797.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
57c5bd929137dc3548f5ea5947f2348c908cf8f9f89a7f1a6356beb15a14d31a
|
|
BLAKE2b-256 checksum How to use checksums |
bc4f0c80c547a75d9f5978656b77353b86c4c53a2d3e0b9dcf156a670a5a5380
|
| 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 Sep 24, 2026.
Transparency logRelease files / tylertoo-0.7.1-cp39-abi3-win_amd64.whl
| Download URL | tylertoo-0.7.1-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 10.1 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e09380a11e16eeafb352019c7b02e087afa1598f8a06ddf4081d5da662a930ec
|
|
BLAKE2b-256 checksum How to use checksums |
997abe993f26f1aeb143b054b87c9125addf52b27d6ea7a2dc27584c80967607
|
| 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 Sep 24, 2026.
Transparency logRelease files / tylertoo-0.7.1-cp39-abi3-musllinux_1_2_x86_64.whl
| Download URL | tylertoo-0.7.1-cp39-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 10.3 MB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
7c570b325f0ec6c62d9ec19b258d8938e1ca5333df512cceee7dfaf0ec28499a
|
|
BLAKE2b-256 checksum How to use checksums |
6a2147c0d77d3acea248191cc6fc18a1353ca79f6c8c490e21723021accac27f
|
| 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 Sep 24, 2026.
Transparency logRelease files / tylertoo-0.7.1-cp39-abi3-musllinux_1_2_aarch64.whl
| Download URL | tylertoo-0.7.1-cp39-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 9.8 MB |
| Tags | CPython 3.9 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
51996ad908c0c0fb147ab3dc8c0ee349a0fbead009f16beb27b64509cd5f0701
|
|
BLAKE2b-256 checksum How to use checksums |
5cbd6fb90701c7797853b57e2e059d9a8df0b9f70b16c4644a7a44be8a3d218b
|
| 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 Sep 24, 2026.
Transparency logRelease files / tylertoo-0.7.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | tylertoo-0.7.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 10.1 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
023eaa85492d2d019dd9f8945096f564470c44c2a35cb48218c39f1790cd6121
|
|
BLAKE2b-256 checksum How to use checksums |
00b270353869dbac640e29b234e366a64cad9897e1f8e1d6e8f49c58cd3ab6ae
|
| 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 Sep 24, 2026.
Transparency logRelease files / tylertoo-0.7.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | tylertoo-0.7.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 9.5 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
b3657b2f133aff5a5cfe797b25a048fc77cee1587b6267251c615df052f4c918
|
|
BLAKE2b-256 checksum How to use checksums |
65149dcb32468959fd1d87db60785e53bd85aa789d37c1d0b33d93b157f792c2
|
| 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 Sep 24, 2026.
Transparency logRelease files / tylertoo-0.7.1-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | tylertoo-0.7.1-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6d487fcac2a1f17a3f80a269c8704b6292919b3bf3aea2ef6394bdeaa8630647
|
|
BLAKE2b-256 checksum How to use checksums |
6a97fa5f59f448e494154e88d8c9ca073e0fef4bc101bc3a31feaba51fb6086c
|
| 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 Sep 24, 2026.
Transparency logRelease files / tylertoo-0.7.1-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | tylertoo-0.7.1-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 9.8 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
4c0a0853d028bc4752fb6f380045a367556c0fae0dbef2a5d5a0ac60597fe3b6
|
|
BLAKE2b-256 checksum How to use checksums |
dcd263862610144f58dae935819571a6334b546552a673c4e13f3f663346bae9
|
| 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 Sep 24, 2026.
Transparency log