The main features of the new version:
- The dependency on geoflow is completely removed, and the glTF conversion was ported to Rust.
- Tyler can now read regular CityJSON files, CityJSONSeq files, and the legacy feature-files as input.
- Improved parallelism so Tyler scales better with the available CPU cores.
- Several existing bugs have been fixed in the glTF conversion and tileset generation, so implicit tilesets are fully functional.
- Performance improvements throughout the codebase, resulting in significant speedups.
Added
- Native GLB generation in Rust through
cityjson-convert, so Tyler no longer depends on an externalgeoflowinstallation for export. - Optional intermediary tile materialization in CityJSONSeq format for debugging.
- First-class
cjindexinput support forcityjsonseq,cityjson, andfeature-filesdatasets. --include-parent-attributesfor 3DBAG/roofer-style parent-child datasets.- A
just ci-checkrecipe and the GitHub Actions workflow that runs it. - ADRs and supporting documentation for the
cjindexinput model, CityJSONSeq exchange, and grid traversal changes. - A repo-local profiling workflow driven by
just profile,scripts/profile-tyler.sh, and Geodepot-backed profile-by-name resolution. - Per-run profiling artifacts under
docs/performance/runs/, including structured summaries forperf statand Valgrind Massif. - Retention of raw profiling artifacts and Tyler output under the gitignored
docs/performance/runs/raw/tree for later analysis. - Runner selection for profiling sessions so
perfand Massif can be run independently or together, with failed runs preserved for later inspection. - A focused CLI/debug regression test suite for intermediary tile preparation, debug data replay, grid export/load, tileset-only runs, and object-attribute mapping.
- A
just coveragerecipe backed bycargo tarpaulin, plus a recorded baseline underdocs/testing/coverage-baseline.md.
Changed
- Tyler now resolves every input through
cjindex; the oldmetadata.city.json+**/*.city.jsonlparser is gone. Tyler now takes a single dataset root input instead of separate--metadataand
--featuresarguments. - Tile-model building now relies on
cityjson_lib::ops::mergeto reconcile mixed input transforms, so cjindex inputs with differing transforms no longer need local normalization. - Large
cjindexruns are handled in page-sized chunks with thread-local index reuse, which cuts repeated reads during extent and tile processing. - Grid indexing for
cjindexinputs now consumes decoded scan pages directly instead of paging references and issuing per-feature reads. - Grid vertex counting now accumulates directly into per-cell counts, avoiding per-feature vertex-cell sorting except for thresholded large-feature parallelism.
- Tile conversion now uses thread-local
CityIndexhandles for cjindex reads and defers normal per-feature cleanup until after tile model merging. - The CityJSON-to-GLB pre-write path now skips redundant cleanup and filtering work where the GLB output would not change, and records extra timing information around the remaining hot spots.
- Tyler no longer depends on an external
geoflow-bundleinstallation for GLB export. - For implicit 3D Tiles, tiling is now performed in geographic coordinates.
- 3D Tiles now use
regionbounding volumes instead of boxes. --debug-dump-datanow dumps bincode snapshots and intermediary per-tile CityJSONFeature streams underdebug/, andRUST_LOG=debugfollows the same dump path while also enabling debug logging.--debug-load-datanow continues to support partial replay from any available subset of dumped debug data, and--debug-load-gridnow actively reloads exportedgrid.tsvandfeatures.tsvdata
for quadtree recomputation.- The CLI debug/export surface was consolidated:
--debug-tile-inputsbecame--debug-dump-data,--grid-exportbecame--debug-dump-grid,--grid-export-featuresbecame
--debug-dump-grid-features,--grid-filebecame--debug-load-grid,--3dtiles-tileset-onlybecame--debug-3dtiles-tileset-only, and--geometric-error-factorbecame
--3dtiles-geometric-error-factorwith the-eshorthand removed. --object-attributesnow accepts comma-separatedname:typemappings and still subsets and coerces CityObject attributes before GLB export.--include-parent-attributesnow copies inherited parent attributes even when the parent object type itself is not selected.--3dtiles-metadata-classnow defaults tocitymodel.- When no
--lod-*override is supplied, Tyler now keeps the highest available LoD per CityObject by default. - CityObject type and LoD filtering now run once through the shared
cjindexfiltering path before extent, grid, tile, and export decisions, so tile bounds and output content use the same retained
geometry. - README, Dockerfiles, Nix, and bundled resources were updated for the new pipeline.