Controlling Tile Size with Drop and Coalesce Flags
Tippecanoe enforces a hard per-tile ceiling of 500 KB and 200,000 features; the drop and coalesce flags do not change that ceiling, they decide how features are shed to stay beneath it — --drop-densest-as-needed and -r/--drop-rate thin features spatially, --coalesce-smallest-as-needed merges neighbours instead of deleting them, and --extend-zooms-if-still-dropping buys extra zoom levels rather than accepting the loss.
When to Use Each
The right flag depends on geometry type and on whether losing individual features is acceptable for your layer.
| Situation | Reach for | Why |
|---|---|---|
| Dense point clouds (GPS traces, sensor readings, POIs) | --drop-densest-as-needed + -r |
Points are interchangeable at low zoom; dropping the spatially densest cluster members is visually invisible. |
| Polygon layers where every feature must survive (parcels, admin units, land-cover) | --coalesce-smallest-as-needed |
Merges adjacent same-attribute polygons instead of deleting them, so coverage stays complete. |
| Line networks (roads, rail, rivers) that overflow only in city cores | --drop-densest-as-needed + --extend-zooms-if-still-dropping |
Extra zoom levels appear only where needed; minor roads survive at higher zoom. |
| “Never drop anything, just add zoom” | --extend-zooms-if-still-dropping alone |
Pushes detail into deeper zooms until each tile fits, at the cost of a larger archive. |
| A choropleth or thematic layer where a missing feature breaks the story | none of the dropping flags — reduce attributes or detail instead | Silent thinning corrupts the data narrative; shrink payload elsewhere. |
The distinction that matters most: dropping is destructive (features leave the tile), coalescing is lossy-but-complete (features merge but coverage remains), and extending zooms is non-destructive but inflates the archive.
Specification Detail
| Flag | Default | Accepted values | Effect |
|---|---|---|---|
--drop-densest-as-needed |
off | presence | Drops the spatially densest features per tile until it fits the byte/feature budget. |
--coalesce-smallest-as-needed |
off | presence | Merges the smallest adjacent features with matching attributes to recover space before dropping. |
--coalesce-densest-as-needed |
off | presence | Merges the densest cluster of same-attribute features; pairs with dropping on very dense polygon layers. |
--extend-zooms-if-still-dropping |
off | presence | Adds zoom levels beyond -z in regions still over budget after dropping. |
-r / --drop-rate |
2.5 | float ≥ 1 | Base thinning ratio: fraction of features carried from one zoom to the next-lower zoom. Lower = keep more. |
-al / --drop-lines |
off | presence | Allows line features to be dropped by the density passes (off by default; lines are normally preserved). |
-ad / --drop-polygons |
off | presence | Allows polygon features to be dropped as a last resort when coalescing cannot recover enough space. |
--no-tile-size-limit |
off | presence | Removes the 500 KB ceiling entirely — emits oversized tiles. Diagnostic use only. |
-M / --maximum-tile-bytes |
500000 | integer bytes | Lowers (or raises) the byte budget that triggers dropping/coalescing. |
-r is the quietest of these: it operates on every build, dropping roughly 1/drop_rate of features at each step down the zoom pyramid, long before any tile approaches the size limit. Setting -r1 keeps every feature at every zoom (equivalent to -rg guessing disabled), which almost always overflows low zooms; the default 2.5 is a sane starting point for mixed point data.
Production Command
A realistic build for a national POI point layer targeting .pmtiles output for range-request delivery:
tippecanoe \
--output=pois.pmtiles \
--layer=pois \
--minimum-zoom=4 \
--maximum-zoom=14 \
--drop-densest-as-needed \
--coalesce-smallest-as-needed \
--extend-zooms-if-still-dropping \
--drop-rate=2.5 \
--maximum-tile-bytes=480000 \
--force \
pois_4326.geojson
Setting -M slightly under the 500 KB hard limit (here 480000) leaves headroom for the gzip variance between the size Tippecanoe estimates during encoding and the final compressed tile, so tiles never land marginally over budget on the CDN. For a polygon build the shape changes — coalescing leads, dropping is a fallback:
tippecanoe \
--output=landcover.pmtiles \
--layer=landcover \
--minimum-zoom=3 \
--maximum-zoom=12 \
--coalesce-smallest-as-needed \
--coalesce-densest-as-needed \
--drop-densest-as-needed \
--extend-zooms-if-still-dropping \
--maximum-tile-bytes=500000 \
--force \
landcover_4326.geojson
Verify no tile exceeds budget after the build:
pmtiles verify landcover.pmtiles
# then spot-check the largest tiles
tippecanoe-decode landcover.pmtiles 12 2048 1361 | wc -c
Interaction Effects
With simplification and --detail. Dropping and coalescing reduce the number of features; tuning simplification with the detail flag reduces the vertices per feature. They compose: if a polygon layer still overflows after coalescing, lowering --detail from 12 to 11 halves the coordinate grid resolution and often clears the budget without dropping a single feature. Reach for simplification first on vertex-heavy geometry (coastlines, contours) and for dropping first on feature-heavy geometry (point swarms).
With overzooming. --extend-zooms-if-still-dropping and a fixed -z ceiling are two answers to the same congestion. Extending zooms bakes deeper levels into the archive; the alternative is to stop at a lower --maximum-zoom and let the client overzoom. The trade-off between overzooming versus generating a higher max zoom is a storage-versus-fidelity decision: extended zooms add tiles (and bytes) but render crisp detail; overzoom keeps the archive small but upscales the deepest generated tile.
With attribute filtering. Coalescing can only merge features whose attribute sets match exactly, and every retained attribute adds bytes that push tiles toward the limit. Trimming properties with dropping unused attributes to reduce tile size both increases coalesce hit rate (fewer distinguishing fields) and lowers per-feature payload, so fewer features need to be dropped at all. Filter attributes before you tune drop flags.
Performance Impact
| Flag | Feature retention | Tile size | Build time |
|---|---|---|---|
--drop-densest-as-needed |
Lower at congested zooms | Capped at budget | +5–15% for density scan |
--coalesce-smallest-as-needed |
Full (features merged, not deleted) | 10–35% smaller on polygons | +10–20% for adjacency matching |
--extend-zooms-if-still-dropping |
Full | Unchanged per tile; more tiles total | Can 1.5–2× on dense layers |
-r lower than 2.5 |
Higher at low zooms | Larger low-zoom tiles | Slightly higher |
-r higher than 2.5 |
Lower at low zooms | Smaller low-zoom tiles | Slightly lower |
--no-tile-size-limit |
Full | Unbounded (can exceed 2 MB) | Fastest (no shedding passes) |
Directionally: dropping trades visual density for a guaranteed byte ceiling; coalescing trades CPU and boundary crispness for complete coverage; extending zooms trades archive size and build time for zero feature loss. On a 40-million-point dataset, --drop-densest-as-needed with the default drop rate typically holds tiles at 300–450 KB while retaining every feature by zoom 14; adding --extend-zooms-if-still-dropping pushes a handful of dense metro tiles to zoom 15–16 and grows the archive 15–25%.
Common Mistakes
1. Reaching for --no-tile-size-limit to “fix” dropping warnings
Seeing Tile ... is too big in stderr tempts operators to silence it with --no-tile-size-limit. That ships 1–3 MB tiles that MapLibre GL JS decodes slowly and that many CDNs and serverless tile functions reject outright.
Symptom: first paint stalls on dense tiles; browser console shows long main-thread decode times; pmtiles verify reports tiles far over 500 KB.
Fix: remove the flag and let the encoder shed features properly:
tippecanoe --drop-densest-as-needed --coalesce-smallest-as-needed \
--extend-zooms-if-still-dropping --maximum-tile-bytes=480000 \
--output=pois.pmtiles --force pois_4326.geojson
2. --drop-densest-as-needed silently thinning a choropleth
On a thematic polygon layer where every unit carries a value, dropping deletes whole polygons in dense regions, leaving holes that read as “no data.”
Symptom: gaps appear in the fill only at low zoom and only in dense areas; feature counts per tile fall below the source count.
Fix: switch the shedding strategy from deletion to merging, and never enable -ad/--drop-polygons:
tippecanoe --coalesce-smallest-as-needed --coalesce-densest-as-needed \
--output=choropleth.pmtiles --force choropleth_4326.geojson
3. Setting -r too aggressively and losing needed points
Bumping --drop-rate to 5 or higher to shrink an archive throws away three-quarters of features per zoom step, so landmarks and labels vanish at mid zooms long before the size limit would have forced any drop.
Symptom: important POIs missing at zoom 8–11 even though those tiles are well under 500 KB; the map looks empty compared to the source.
Fix: return to the default and let the size-aware passes do the thinning only where required:
tippecanoe --drop-rate=2.5 --drop-densest-as-needed \
--output=pois.pmtiles --force pois_4326.geojson
Parent: Tippecanoe CLI Fundamentals
Related
- Essential Tippecanoe Flags for Production Builds — the baseline flag set these size controls slot into for unattended CI builds.
- Tuning Simplification with the Detail Flag — cut vertices per feature when dropping and coalescing cannot free enough space alone.
- Dropping Unused Attributes to Reduce Tile Size — trimming properties raises coalesce hit rates and lowers per-feature payload before any dropping happens.