2.5D rooms where presence has location
Spatial
2.5D rooms where you and your friends exist as avatars in the same launcher. Engine stages 0–3 shipped (domain, transport, codec, simulation). Renderer is next.
Concept illustration. Live render coming when the renderer ships.
What it actually does
- 2.5D rooms with avatar presence
- Engine ships as a platform-agnostic Dart package
- Audio spatialization (SoLoud on desktop, Web Audio on web)
- Voice tied to avatar position is on the roadmap
Surfaces
Spatial room
The 2.5D room itself.
Avatar
Player avatar with nameplate.
Audio falloff
Distance-based audio spatialization.
Voice in spatial
Voice tied to position.
The concept
Not a 3D world. Not a 2D chat. A spatial overlay where presence has location.
A spatial room is a top-down 2.5D space inside your launcher. Your avatar moves; other people's avatars move. Audio fades with distance. Nameplates float above characters. The room state is small, deterministic, and replicable — and it doesn't replace your friends list, it adds geography to it.
What we've built
Engine work is partway through. Three landmark milestones are in the codebase today.
Stage 0
The room model
Typed positions, avatars, room state. Pure Dart — no Flutter, no host concerns.
Stages 1–3
The plumbing
Transport, codec, FakeSpatialTransport. Replicates a room without a network.
Stage 3
Reproducible tests
SpatialSimulation runs deterministic rooms in tests. Bugs reproduce on demand.
What's next
Two cards. Honest. No dates.
Coming
Real multiplayer transport
LiveKit DataChannel binding for room state. Replaces the in-process Fake transport.
Coming
The visible room
The Flame-based renderer. Your avatar in a room you can see.
Why platform-agnostic engine
The engine package has zero knowledge of LiveKit, Centrifugo, Riverpod, or Django.
Host adapters live in lib/features/spatial/. The engine itself stays portable: audio comes via injected AudioSpatializer, transport is interface-shaped, cosmetics are pluggable. This means Spatial can target web (Web Audio spatializer) or mobile (Flutter audio) without the engine knowing.
Voice in spatial
ComingVoice rooms exist today on /chat. Voice tied to your avatar's position in a spatial room is on the roadmap.
See /chat#voice for opt-in voice today.