This is a Risk browser game monorepo (npm workspaces) with 6 packages. No Docker, no database, no external services needed — everything runs in-memory on Node.js v22.
Standard commands are in the root README.md and package.json scripts. Key ones:
| Task | Command |
|---|---|
| Install deps | npm install |
| Typecheck | npm run typecheck |
| Tests | npm run test |
| Build all | npm run build |
| Dev server (backend) | npm run dev:server (port 4242) |
| Dev server (frontend) | npm run dev:web (port 5173) |
- Build order matters:
shared-typesmust build beforegame-engine, which must build before any app. The root npm scripts handle this automatically, so always use root-level commands (npm run dev:server) rather than running workspace dev commands directly. - Server does not log a "listening" message to stdout when started with
tsx watch. Verify it's running withcurl http://127.0.0.1:4242/healthwhich should return{"ok":true,...}. - No database or
.envrequired: All state is in-memory. Default config values work out of the box (seeapps/server/src/config.ts). - Frontend connects to backend at
http://127.0.0.1:4242by default (viaVITE_API_BASE_URL). Both must be running for the game UI to work. - API-driven game testing: You can create lobbies, add bots, and start games via REST API without the browser. See
apps/server/src/routes/lobbies.tsandapps/server/src/routes/games.tsfor endpoints.