Skip to main content

tylertoo

CI codecov Crates.io PyPI

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

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)

Source distribution for tylertoo 0.7.0
File Size Uploaded
tylertoo-0.7.0.tar.gz 794.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for tylertoo 0.7.0
File Interpreter ABI Platform
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 log

Release 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 log

Release 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 log

Release 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

Release history Release notifications | RSS feed

This release

0.7.0 This release

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page