# Offline tools City generation stays in TypeScript. `npm run cli` generates a world from OSM; `npm run export-city -- world.json public/cities/demo` publishes its tiled form. Exports are immutable: choose a new directory for a new city revision. Each export contains a versioned manifest, gzip tiles with SHA-256 hashes and a compact navigation index. Buildings are repeated whole at tile boundaries; clients deduplicate IDs. Geometry extending outside the chosen OSM bbox does not create tiles outside the city. `generate-worker.ts` implements the isolated server job: fetch OSM, generate, export into an unpublished staging folder, then rename it into the catalogue. `rust.mjs` provides npm entry points for Cargo without changing the system PATH.