Real-time, server-authoritative multiplayer arena game. Move across a floating grid of tiles that shake then fall; dash to bump opponents off the map. Last player alive wins. Backend is Deno; frontend is HTML + ES Modules with Three.js. 2–8 players per room, no bundlers required.
Requirements: Deno (latest stable).
Start the server:
deno run -A backend/server.tsThen open http://localhost:8000/ in a browser. Optionally pass a room with ?roomId=custom. Health check at /health. WebSocket endpoint at /ws?roomId=.
Controls: Arrow keys to move, Space to dash.
Single-process, server-authoritative simulation that also serves the static frontend.
- HTTP: serves files from
frontend/with entry atfrontend/index.html - WebSocket: upgrade at GET /ws?roomId= for gameplay
- Health: GET /health
- Loops: fixed tick TICK_RATE for simulation and STATE_SNAPSHOT_RATE for snapshots
Key files:
backend/server.tsbackend/game.tsbackend/messages.tsbackend/types.tsbackend/config.tsbackend/leaderboard.tsbackend/utils/time.ts
See details in backend/README.md.
Single-page client using Three.js, ES modules, and light prediction/reconciliation. Connects via WebSocket to the backend.
Key files:
frontend/index.htmlfrontend/main.jsfrontend/net.jsfrontend/render.jsfrontend/input.jsfrontend/ui.jsfrontend/touch.jsfrontend/constants.js
See details in frontend/README.md.
backend/— HTTP + WebSocket server, simulation, validation, leaderboardfrontend/— HTML + ES modules clientSPEC.md— product and technical specificationREADME.md— this document
- Run tests:
deno test -A backend/game_test.ts- Server constants live in
backend/config.tsand are mirrored client-side infrontend/constants.js. The server remains authoritative. - Edit frontend files and refresh the page; no build step needed.