Try it live: gibs.oldschoolfrag.com
This project fork provides a fully local QuakeJS server built on @treyyoder's original QuakeJS project with the goal of a creating modern, lightweight, and secure alternative.
Key improvements in this fork:
- Modern base: Docker Hardened Image (Debian 13), Node.js 22.x LTS, Nginx-light
- Security: Significant CVE reduction, goal of zero High or Critical CVEs, runs as non-root
- Updated NPM packages where possible
- Multiplexed web and game traffic over a single port
- Small image size (~280MB)
What this fork has not done (so far):
- Recompile original game code from ioquake3 (still old game code)
- Introduce new functionality
podman run -d \
--name quakejs \
-p 8080:8080 \
docker.io/awakenedpower/quakejs-rootless:latestdocker run -d \
--name quakejs \
-p 8080:8080 \
docker.io/awakenedpower/quakejs-rootless:latestThen open your browser and navigate to http://localhost:8080 to start playing!
Create a docker-compose.yml file:
services:
quakejs:
container_name: quakejs
image: awakenedpower/quakejs-rootless:latest
ports:
- '8080:8080'
restart: unless-stoppedThen run:
docker-compose up -d- Clone the repository:
git clone https://github.com/JackBrenn/quakejs-rootless.git
cd quakejs-rootless- Build the image:
podman build -t quakejs-rootless:latest .- Run the container:
podman run -d \
--name quakejs \
-p 8080:8080 \
quakejs-rootless:latest- Clone the repository:
git clone https://github.com/JackBrenn/quakejs-rootless.git
cd quakejs-rootless- Build the image:
docker build -t quakejs-rootless:latest .- Run the container:
docker run -d \
--name quakejs \
-p 8080:8080 \
quakejs-rootless:latestThe server configuration can be customized by modifying server.cfg.
- 8080 - Multiplexed Web interface and Game server port. Web requests are handled by Nginx directly, while WebSocket game traffic is seamlessly forwarded internally. This makes proxying behind SSL natively supported via a single port.
This fork builds upon the excellent work of @treyyoder/quakejs-docker with the following updates:
| Component | Original | This Fork |
|---|---|---|
| Base OS | Ubuntu 20.04 | Debian 13 Docker Hardened Image |
| Node.js | 14.x | 22.x LTS |
| Web Server | Apache 2 | Nginx Light |
| Networking | Dual Port | Single Port Multiplexed via Nginx |
| CVEs | 5 critical, 14 high, 999+ medium | 0 critical, 0 high, 2 medium, 15 low |
| Container User | root | non-root |
CVE counts as of 04.04.2026 — Results provided by Docker Scout.
This wouldn't be possible without these projects or contributors:
- @treyyoder - Original quakejs-docker implementation that made fully local QuakeJS servers possible
- @nerosketch - QuakeJS fork with local server capabilities
- @inolen - Original QuakeJS project
- @mescanne - Single-port multiplexing concept via Nginx WebSocket routing
MIT