Files

Shared protocol

city.proto defines WebSocket messages, city generation jobs and room snapshots. Run npm run proto:generate to regenerate the committed TypeScript bindings. Rust bindings are generated by Cargo using a vendored protoc executable.

Handshake protocol version is 1. Positions are signed centimetres and resident IDs are uint32. Snapshots replace the AOI; deltas use absolute changed values so intermediate ticks can be coalesced. New fields must be additive; never reuse field numbers. An incompatible save version is rejected explicitly.

Static city format v1 uses JSON + gzip, independently of the network protocol.