Architecture
Layer map
Runtime
Owns scene rendering, input, camera, presence visualization, XR session lifecycle, media surfaces, and quality profiles.
- App:
apps/runtime-web - Shared package:
packages/runtime-core
Media plane
Owns voice, screen share, track lifecycle, and media transport.
- Provider:
LiveKit - API integration:
apps/api
State plane
Owns room state, participant presence, transforms, and room logic.
- App:
apps/room-state - Provider:
Colyseus
Control plane
Owns tenants, templates, rooms, asset metadata, links, and deployment metadata.
- App:
apps/control-plane - API integration:
apps/api
Asset pipeline
Owns import rules, validation, compression presets, and quality budgets.
- Package:
packages/asset-pipeline - Templates:
packages/templates
Core flows
Join room
- User opens a room link.
apps/runtime-webfetches room manifest fromapps/api.- Runtime requests state token and media token from
apps/api. - Runtime joins
apps/room-stateandLiveKit. - Runtime renders the room using manifest-driven scene config.
Create room
- Admin opens
apps/control-plane. - Control plane creates tenant/room records through
apps/api. - Assets are registered and attached to template slots.
- API generates the manifest and room link.
- Runtime consumes the published room config without code changes.
Boundaries that must hold
- Runtime never owns persistent tenant CRUD.
- Media plane never becomes the source of truth for room state.
- Research spikes never become the default product runtime.
- Templates configure scenes; they do not fork the runtime.
Source: docs/architecture.md in vrata-labs/platform at revision 380b2e7ff1dd, license Apache-2.0. GitHub