Fast, social 3D spaceship combat for the web. The implementation contract is in plan.md; architecture boundaries are summarized in docs/architecture.md.
Engineers start with AGENTS.md, then implement only the approved vertical slice in next.md.
The accepted browser product is still the two-player first-person lobby/movement infrastructure MVP described below. Battle domain/protocol/simulation/server/client and procedural presentation/audio foundations now include a committed first authoritative cannon vertical. It is not yet a complete playable match or accepted battle browser flow. See next.md for the exact remaining integration order.
The next approved design activity, after committing the returned integration work, is a research-led world/ship/character/GUI pass applied to one representative Arrival-to-cannon gameplay path. It is a blockout and design-system sprint, not broad final-art production.
Room dimensions and layouts may change substantially during this pre-acceptance pass. Free commercially usable third-party assets are allowed when redistribution is permitted, provenance and license are recorded, and existing performance/transfer budgets still pass.
A development-only solo world tour is committed and validated with licensed props, mapped materials, local typography, detailed hull/interior/worker presentation, and per-space atmosphere. It remains a visual review environment, not a game loop or multiplayer battle acceptance.
- Node
24.14.1 - pnpm
10.17.1through Corepack - Effect v4 prerelease
4.0.0-beta.97 - Preact + direct Three.js
- Colyseus authoritative game server
- Separate trusted VoiceRouter shell
corepack pnpm install
corepack pnpm dev- Web:
http://localhost:5173 - Game server:
http://localhost:2567/health/live - VoiceRouter:
http://localhost:2568/health/live
The VoiceRouter readiness endpoint intentionally returns 503 until the trusted LiveKit mixer subsystem is implemented. It must never claim secure readiness with a client-side-only mixer.
Start the normal development processes:
corepack pnpm devOpen http://localhost:5173/?worldTour=1.
- Click the canvas for pointer lock, then use full mouse look and
WASD. - Press
Escapeto release the mouse. - Use the accessible scene buttons or Back/Next to visit Arrival, Hangar, Airlock, Interior, and Cannon focus.
- Toggle collision debug information from the tour panel.
The panel is labeled DEVELOPMENT BLOCKOUT TOUR and Local geometry review - no lobby or game loop. No second browser or lobby is required.
Run these in separate human terminals:
node node_modules/tsx/dist/cli.mjs apps/server/src/main.ts
node node_modules/vite/bin/vite.js apps/web --host 127.0.0.1 --port 45173 --strictPortOpen http://127.0.0.1:45173/ in two independent browser profiles or one normal and one private window.
- Click the 3D world to capture the mouse, look around in first-person, and walk with camera-relative WASD.
- In browser A, select Create Lobby and note the six-character crew code.
- Enter that code in browser B and Join.
- Both browsers should enter
SHARED HANGARand show2 / 2 crew connected. - Move/look in both browsers. Each remote player keeps the same server-assigned color in every browser. The masthead displays FPS, RTT, unacknowledged commands, interpolation occupancy, correction, and bytes.
This is the accepted infrastructure flow, not a playable game match yet. Voice and ship customization remain intentionally unavailable; station/combat foundations may exist in source but are not accepted or reachable end-to-end until the integration gates in next.md pass.
Press F3 or select Show diagnostics to view the bounded client profiler and network graph. Select Export profile after at least several seconds in the shared hangar to download a redacted JSON capture. The file is capped at 64 KB and excludes lobby/session/capability/player/URL data.
For the remaining physical-device gate, capture profiles on the desktop-minimum and recommended classes while both players move for at least 60 seconds:
- GTX 1060 6 GB, RX 580 8 GB, or Apple M1-class graphics at 1080p output / at least 1600x900 internal Low.
- RTX 3060, RX 6600 XT, or Apple M2 Pro-class graphics at 1080p High or 1440p Medium.
Headless evidence is diagnostic only; the desktop-minimum target must sustain the Section 16 definition of 60 FPS. Mobile gameplay is post-launch/best-effort.
corepack pnpm test:twice
corepack pnpm typecheck
corepack pnpm lint
corepack pnpm check:boundaries
corepack pnpm test:types
corepack pnpm build
corepack pnpm bundle:checkUse the red-green-refactor sequence in plan.md for every subsystem. Do not weaken compiler options or package boundaries to make a feature compile.