tylertoo
Fast GeoParquet → PMTiles converter in Rust.
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)
- 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
⚠️ Work in Progress: Code is generated with Claude; take it with a grain of salt. --Nissim
Install
cargo install tylertoo # CLI
pip install tylertoo # Python
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 convert reproject input.parquet prepared.parquet \
-d EPSG:4326 --hilbert --row-group-size 100000
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.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 | |
|---|---|---|---|
| tylertoo-0.7.0.tar.gz | 794.5 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tylertoo-0.7.0-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| tylertoo-0.7.0-cp311-cp311-macosx_11_0_arm64.whl | CPython 3.11 | CPython 3.11 | macOS 11.0+ ARM64 | Details |
| tylertoo-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.17+ x86-64 | Details |
Total release size: 29.6 MB
Release files / tylertoo-0.7.0.tar.gz
| Download URL | tylertoo-0.7.0.tar.gz |
|---|---|
| Size | 794.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
56a386689d8725ace8aaa2a5a54af00a8ebf0d3e8955f3ef8de33cb73d9c79dd
|
|
BLAKE2b-256 checksum How to use checksums |
2d7f486c000bfaf31e47b5cd9f0636919ce79d023d7ed8e12b2ea1d315ea3d8e
|
| 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 19, 2026.
Transparency logRelease files / tylertoo-0.7.0-cp311-cp311-win_amd64.whl
| Download URL | tylertoo-0.7.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 10.1 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cf57423267215fab19cb236f6b6582277cfb76dcb92ff07ca0fa01e62c4a86f2
|
|
BLAKE2b-256 checksum How to use checksums |
242d438abd71c040e69714328b46cf1c428a2a2b3b91eb9d2a82f64abfe46c44
|
| 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 19, 2026.
Transparency logRelease files / tylertoo-0.7.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | tylertoo-0.7.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b4cecf3e32cba7302cd6ea14677ec7c113c074be1ec0b610900812c219aae10a
|
|
BLAKE2b-256 checksum How to use checksums |
93aa97fcce84dbea68ec0e73ebec19bb389a95e701e07fb96687fe416444717d
|
| 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 19, 2026.
Transparency logRelease files / tylertoo-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | tylertoo-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 10.1 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
be899e03bbef2c9685198f298075b6784bc524a3cb636ddeeaff8caa91bf4e49
|
|
BLAKE2b-256 checksum How to use checksums |
a00d3836b0ec16fb2fb936a5c3d4ac854df4aee964034d5aac90f88ed7519d88
|
| 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 19, 2026.
Transparency log