A networked 3D virtual world built with Rust and Bevy. https://cartopolis.org
  • Rust 95.7%
  • WGSL 1.5%
  • HTML 1%
  • Shell 0.8%
  • Python 0.6%
  • Other 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
viberfox-agent 5983bf38ae
Some checks are pending
CI / wasm & android targets (push) Blocked by required conditions
CI / test cartopolis (push) Has started running
The switches that bisect a render bug can be reached from the phone (#146)
2026-08-23 21:38:38 +00:00
.cargo build: stop forcing incremental compilation onto the shipping profiles 2026-08-13 16:59:34 +00:00
.claude/skills refactor(brand): rename viberfox to cartopolis, cool the surface ramp 2026-08-11 17:52:22 +00:00
.forgejo/workflows build(android): compile the APK's Java with javac and d8 2026-08-23 20:47:02 +00:00
assets fix(map): denominate the road ladder in depth, not in millimetres 2026-08-23 20:02:44 +00:00
crates feat(dev): put the bisecting switches where the phone can reach them 2026-08-23 21:32:39 +00:00
deploy fix(net): reach every remote simulator over TLS, on every build 2026-08-13 20:45:07 +00:00
docs feat(dev): put the bisecting switches where the phone can reach them 2026-08-23 21:32:39 +00:00
tools feat(ui): draw the icons from a font we ship 2026-08-17 10:33:53 +00:00
.env.example Add AI assistant system with Anthropic API 2026-06-10 20:04:24 +02:00
.git-blame-ignore-revs build: gate rustfmt in CI, and keep git blame readable across the reformat 2026-08-06 17:20:50 +02:00
.gitattributes refactor(brand): rename viberfox to cartopolis, cool the surface ramp 2026-08-11 17:52:22 +00:00
.gitignore refactor(brand): rename viberfox to cartopolis, cool the surface ramp 2026-08-11 17:52:22 +00:00
AGENTS.md docs: add a contributor guide and point the entry points at it 2026-07-27 23:52:47 +02:00
Cargo.lock fix(sim): persist session tokens so "stay signed in" survives a restart 2026-08-21 12:12:49 +00:00
Cargo.toml build: one tungstenite, and two dead bevy features plus a dead dep gone 2026-08-19 09:47:18 +00:00
CHANGELOG.md feat(brand): move to cartopolis.org and its service subdomains 2026-08-12 06:04:14 +00:00
CLAUDE.md docs: retire the no-dex constraint from the notes it shaped 2026-08-23 20:48:32 +00:00
LICENSE refactor(brand): rename viberfox to cartopolis, cool the surface ramp 2026-08-11 17:52:22 +00:00
LICENSE-APACHE feat(android): behave like an app the system can suspend, and answer Back 2026-08-10 22:27:18 +00:00
LICENSE-MIT refactor(brand): rename viberfox to cartopolis, cool the surface ramp 2026-08-11 17:52:22 +00:00
LICENSE-THIRD-PARTY.md refactor(brand): rename viberfox to cartopolis, cool the surface ramp 2026-08-11 17:52:22 +00:00
README.md docs: the client starts offline, and the menu is no longer a navigator 2026-08-17 16:06:43 +00:00

Cartopolis

A digital twin of the real world that you can walk around in.

Cartopolis assembles a living 3D city out of open data. The streets, the buildings, the ground relief and the trees are real, imported from OpenStreetMap and public geodata registries. So is the weather, the position of the sun, and the tram that is genuinely due in four minutes. Stand on a pavement in a real place and keep going up — through the atmosphere, past the planet turning below you, into orbit — then drop back down anywhere on Earth. No loading screens, and no invented geography.

It is written in Rust on the Bevy engine, runs in a browser, on the desktop and on Android, and is free and open source.

  • Real places, streamed — the world loads around you as you move, anywhere on the planet.
  • Pavement to orbit — one continuous space, from a doorway to the whole globe.
  • Raised from the map — buildings from real footprints, measured terrain, routing, street names and points of interest.
  • A sky that behaves — physically-based atmosphere, day and night, sun, moon, stars and real forecast weather.
  • Live city data — departure boards and vehicle positions from the actual transit feed.
  • Shared and editable — an authoritative server keeps people, avatars and edits in sync; objects can be placed and reshaped in the world, with an AI panel to help.

The map, the sky and the weather work anywhere on Earth. Three things do not, because they come from national open-data registries rather than a global one: measured ground relief, high-detail (LoD2.2) buildings and live transit are the Netherlands only. Everywhere else those degrade rather than break — the ground goes flat, buildings are extruded from their OpenStreetMap footprints, and the departure boards stay empty.

Screenshots

Groningen city centre The same streets at dusk Third-person avatar
Planned route Atmosphere limb from 120 km Earth from orbit

Generated with cargo shots from the camera positions in docs/shots.toml — headless, no window, same framing every time.

Try it

One codebase, three builds:

  • Browser — open cartopolis.org. Nothing to install; needs a WebGPU-capable browser.
  • Desktop — Linux and Windows binaries on the releases page, or build from source (macOS included). This is the fastest and most capable of the three. The published binaries need a CPU with AVX2 and FMA — roughly 2013 or newer; on anything older, build from source.
  • Android — an APK at cartopolis.org/apk (arm64, Android 9+); the page walks through the dialogs Android shows for an app that did not come from the Play Store. Early days: it is the map viewer only, and the least-tested of the three. What that means.

Where the platforms differ, one API hides it (platform/).

Running from source

cargo run -p cartopolis

Starts offline: the streamed map and a local avatar, no simulator and no account. Sign in to a server from ☰ ▸ Sign in… to share a world with other people.

cargo run -p cartopolis -- --connect <host>        # split mode: connect to a live sim (TLS)
cargo run -p cartopolis -- --offline               # no sim: single user, no auth or persistence
cargo run -p cartopolis_simulator                  # the sim server, standalone

You need a Rust toolchain, a C compiler and a working GPU driver — details, release builds and the web build are in the development guide. Run git lfs install before cloning: binary assets live in Git LFS and several are compiled into the binary, so a pointer file fails at runtime rather than at build time.

Documentation

  • User manual — controls, getting around, authoring, the developer panel.
  • Changelog — what changed, per release.
  • Development guide — prerequisites, dev loop, tests, code map, conventions, CI.
  • Server guide — deploying the sim and the self-hosted geo services.
  • docs/notes/ — standing constraints and measurements; CLAUDE.md's Known issues is the trap list worth skimming first. docs/adr/ and docs/abstract/ are a frozen archive of the earlier decision log.

Architecture

Crate Role
cartopolis_core Shared protocol types and tile/coordinate math
cartopolis_geo Bevy-free map geodata: MVT decode, road classes, tree scatter, the routing graph
cartopolis_simulator Headless TCP simulation server (Tokio + SQLite), no Bevy
cartopolis Bevy game client — rendering, ECS systems, UI
big_space Vendored floating-origin fork, for planet-scale coordinates

Licence

Cartopolis is dual-licensed under MIT OR Apache-2.0, at your option — the Rust ecosystem's default pair, and the licence of the vendored big_space fork, so the two sets of notice obligations line up. LICENSE has the detail.

That covers the source. The map data, the geodata services, the avatars and the font each carry their own terms, and several of them — the ODbL, CC BY 4.0, the OFL — require their notice to travel with anything built from the work. LICENSE-THIRD-PARTY.md is that notice, and it is the canonical list: it ships in the release tarball, in the Windows zip and inside the APK, and the in-app About panel renders it. The Credits below are the same list written for a reader; add a source to the file, not only here.

Credits

  • Engine — built with Bevy.
  • Floating originbig_space by Aevyrie, MIT OR Apache-2.0. Vendored here as a fork ported to the Bevy release we track.
  • Avatar charactersQuaternius Ultimate Modular Men/Women, CC0. Consider supporting the work on Patreon.
  • Map data — © OpenStreetMap contributors, under the ODbL. Building detail and POIs come from Overpass, place search and reverse geocoding from Nominatim — both self-hosted, and usable against the public instances under the OSMF usage policies.
  • Vector tilesVersaTiles, in the Shortbread schema. Self-hosted mirror of their OSM-derived planet build.
  • Buildings (LoD2.2)3DBAG by the 3D geoinformation group, TU Delft, CC BY 4.0 — derived from the Kadaster's BAG registry and AHN, both via PDOK. Netherlands only.
  • ElevationAHN height rasters (DTM/DSM), served by PDOK, CC0. Netherlands only.
  • Public transport — live departures and vehicle positions from OVapi, the open key-free feed of Dutch NDOV operator data. Netherlands only.
  • Weather — forecasts from MET Norway, CC BY 4.0, and global cloud cover from the NOAA Global Forecast System, public domain.
  • Night sky — star positions and magnitudes from the HYG Database v4.1 by David Nash, CC BY-SA 4.0 — a compilation of the Hipparcos, Yale Bright Star and Gliese catalogs.
  • TypePlus Jakarta Sans by Tokotype, SIL Open Font License 1.1.