Skip to content

How tylertoo relates to tippecanoe

tylertoo takes its name from the campaign slogan "Tippecanoe and Tyler Too," and the debt is real: tippecanoe is the reference implementation the tiling algorithms are measured against. Many readers arrive already knowing it and want to know how the two line up. This topic answers that as a factual comparison, not a migration guide. It maps the concepts you know onto tylertoo, states what each tool does that the other does not, and stays neutral about which to use, because the two solve overlapping but different problems.

Design decisions

tylertoo reads GeoParquet directly, structure and all. tippecanoe reads GeoJSON, line-delimited GeoJSON, FlatGeobuf, and point CSV. A GeoParquet dataset tiled through tippecanoe first converts to one of those, usually GeoJSON, which rewrites a compact columnar file into larger text. tylertoo reads the GeoParquet as it is, and the throughput difference compounds from several sources rather than the skipped conversion alone. It decodes only the geometry column a tile needs instead of parsing whole text features. It uses the file's Hilbert ordering and bbox covering statistics to read only the row groups a tile or a --bbox/--filter touches, including byte ranges on remote input, where a GeoJSON stream carries no spatial index to skip or seek on. Both tools are compiled native code, so the leverage is the data path, not the language. The demo page carries the measured numbers.

Overviews embed levels inside the input format. tippecanoe generalizes in tile space, per tile, at encode time, and writes the result into tiles. tylertoo generalizes in world space, per level, and stores those levels in a GeoParquet file. This is the core format difference: a tylertoo level is a reusable, exact, SQL-queryable row band, where a tippecanoe tile is a rendered endpoint. The overview archive that results has no established equivalent.

Quality-ladder knobs mirror tippecanoe concepts. Feature dropping, buffers, layer naming, zoom ranges, and simplification all have direct tylertoo counterparts, because tippecanoe defined the vocabulary. The numeric defaults differ where the mechanism is anchored differently, and those divergences are documented rather than incidental.

Parity sets the performance bar. The goal for output quality is to match tippecanoe on a shared corpus, and the pipeline is validated against tippecanoe output as it changes. Where tylertoo diverges, it is a deliberate, recorded choice in context/ARCHITECTURE.md, not drift.

Decode returns tiled geometry not source data. Both tools can turn tiles back into features, and in both the result is the tiled representation — simplified, clipped, and duplicated across tiles — never the original source. tylertoo's decoder follows tippecanoe-decode's model deliberately.

API walkthrough

Mapping tippecanoe concepts to tylertoo

The concepts carry over; the flags and some defaults change. tylertoo applies these to overview levels rather than to tiles at encode time, so a knob shapes a stored, reusable level.

tippecanoe tylertoo Note
-z / -Z maximum/minimum zoom --max-zoom / --min-zoom Same zoom range
-l layer name --layer-name Set at export
-L one layer per input pyramid --band LO-HI:INPUT:LAYER … with bands sharing a zoom range Each band is its own ladder; tiles at shared zooms carry every layer
-b buffer (default 5) --tile-buffer (default 8) Tile-pixel seam buffer
-y / -x / -X property selection --include-property / --exclude-property / --exclude-all-properties Applied at scan time on overview / tiles, at export on export-pmtiles. Same precedence: an include list wins and -x / -X are then ignored
-r drop rate (default 2.5) --drop-rate (default 1.65) Same geometric ladder; tylertoo anchors on the full canonical count, so the default differs
gamma dot-dropping --drop-gamma Applied per super-cell, leaving per-level totals unchanged
-S simplification --simplify-factor RDP, cascading by default
--drop-fraction-as-needed tile-size loop --tile-size-limit Single non-iterative drop pass, since levels are already budgeted
tiny-polygon reduction --collapse-square Area accumulator per 32×GSD patch of the level (tile-less), plus a per-feature dither for write-time collapses
cluster centroid --cluster Winner keeps its own geometry and absorbs losers into point_count
--coalesce family coalescing (on by default) Chains same-class segments before gates and thinning

What only tylertoo does

Reads GeoParquet directly. The columnar source is the input, with no GeoJSON conversion. Remote objects read by byte range, and --bbox and --filter push down to skip row groups at the footer, so a run can carve a filtered slice out of a planet-scale remote collection while tiling it.

Writes an embedded overview file. The world-space levels live in a valid GeoParquet file you can query with DuckDB, re-export more than once, and validate against the geo:overviews spec. tippecanoe's output is the tileset; there is no intermediate you can open as data.

What tippecanoe does that tylertoo does not

Reads more input formats. GeoJSON, line-delimited GeoJSON, FlatGeobuf, and point CSV, plus GeoJSON on standard input. tylertoo reads GeoParquet in EPSG:4326 or EPSG:3857 and nothing else, on the expectation that gpio converts other formats first.

Ships tileset tooling. tile-join merges tilesets and joins CSV attributes onto existing features, -zg guesses a maximum zoom from feature spacing, and -e writes a directory of tiles. tylertoo has no equivalent to these; it writes one PMTiles archive or the overview file. (-L, one layer per input file, is covered by pyramid bands that share a zoom range.)

Decoding tiles back

tylertoo decode. Turns a PMTiles archive back into GeoParquet, following tippecanoe-decode's semantics. Nothing is deduplicated, so a feature appears once per tile it touched, with zoom, layer, and mvt_id provenance columns for filtering to one representation. Coordinates lift through tippecanoe's 32-bit world-coordinate transform. Because tiling simplifies, clips, and drops attributes, the output is the tiled geometry, not a route back to the source file.