Fully local and Dockerized QuakeJS server. This project bundles assets and server binaries so gameplay does not depend on content.quakejs.com.
From the repository root:
docker compose up --build -dThen open:
http://localhost:8080
To stop:
docker compose downBuild locally:
docker build -t treyyoder/quakejs:latest .Run:
docker run -d --name quakejs -e HTTP_PORT=8080 -p 8080:80 -p 27960:27960 treyyoder/quakejs:latest- Main game settings live in server.cfg.
- Remote administration is disabled by default. Set a strong
rconpasswordin server.cfg before enabling it. - See Quake 3 server variable reference at https://www.quake3world.com/q3guide/servers.html.
You can run this project without Docker by reproducing the container steps:
- Clone https://github.com/nerosketch/quakejs and run npm install.
- Copy server.cfg into both quakejs/base/baseq3/server.cfg and quakejs/base/cpma/server.cfg.
- Copy include/ioq3ded/ioq3ded.fixed.js to quakejs/build/ioq3ded.js.
- Copy include/assets into quakejs/html/assets.
- Update quakejs/html/index.html host/port in the same way entrypoint.sh does.
- Serve quakejs/html on your desired HTTP port and run:
node build/ioq3ded.js +set fs_cdn localhost:8080 +set fs_game baseq3 +set dedicated 1 +exec server.cfg- This repo targets current Docker Compose syntax (no compose file version key).
- The container installs Node 22 by default (configurable via Docker build argument NODE_MAJOR).
- Port 27960 is TCP because QuakeJS browser clients connect to the game server over WebSockets.
Thanks to begleysm and their QuakeJS fork/documentation:
