Field manual / Local stack
Run CSJS
The local stack includes the Next.js website, the Java/Quarkus master, PostgreSQL, and Keycloak. Start the native dedicated server separately to play over its integrated WebSocket connection.
Install the toolchain
You need Docker with Compose, Node.js 24 with pnpm 11, Java 17, and zip. Then install the client and website dependencies:
pnpm --dir game/client install --frozen-lockfile
pnpm --dir website install --frozen-lockfileRun services separately
Build the browser client, then use separate terminals for the master and website.
make client
docker compose -f deploy/compose.yml up -d database keycloak
make master-run
pnpm --dir website devThe website is at http://localhost:3000 and the master is at http://localhost:8080. Playing does not require an account. Start the game server in the next step.
Run the complete stack
Package your local Steam assets, then let Compose build and start the website, master, and database:
make assets
make upIn another terminal, start the native game server using the directory containing your valve/ and cstrike/ folders:
make server-run STEAM_HALF_LIFE="/absolute/path/to/Half-Life"Open the local game server. Follow service logs with make logs and stop everything with make down.
Verify each service
curl -fsS http://localhost:3000
curl -fsS http://localhost:8080/q/health
curl -fsS http://localhost:27016/healthz
docker compose -f deploy/compose.yml psThe game server accepts WebSockets on TCP 27016 and native clients on UDP 27015. Join it directly; the master does not register or monitor game servers.