Skip to content

JackBrenn/quakejs-rootless

 
 

Repository files navigation

QuakeJS Rootless Project

Play multiplayer Quake III Arena in your browser with Podman / Docker

Docker Hub

Demo

Try it live: gibs.oldschoolfrag.com

About

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

Quick Start

Using Podman (Recommended)

podman run -d \
  --name quakejs \
  -p 8080:8080 \
  docker.io/awakenedpower/quakejs-rootless:latest

Using Docker Run

docker run -d \
  --name quakejs \
  -p 8080:8080 \
  docker.io/awakenedpower/quakejs-rootless:latest

Then open your browser and navigate to http://localhost:8080 to start playing!

Using Docker Compose

Create a docker-compose.yml file:

services:
  quakejs:
    container_name: quakejs
    image: awakenedpower/quakejs-rootless:latest
    ports:
      - '8080:8080'
    restart: unless-stopped

Then run:

docker-compose up -d

Using Kubernetes with Helm

This repository includes a Helm chart in .helm/. The CI workflow builds and pushes a linux/amd64 image, then packages the chart as an OCI artifact with the image pinned as tag@sha256:<digest>.

Local install:

helm install quake .helm \
  --namespace quakejs \
  --create-namespace

Install from the published OCI Helm chart:

helm install quake oci://ghcr.io/jackbrenn/quakejs-rootless/helm/quake \
  --namespace quakejs \
  --create-namespace
ArgoCD Application example
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: quake
  namespace: argocd
spec:
  project: default
  source:
    repoURL: oci://ghcr.io/jackbrenn/quakejs-rootless/helm
    chart: quake
    targetRevision: 0.1.0
    helm:
      values: |
        ingress:
          enabled: true
          className: ""
          hosts:
            - host: quake.example.com
              tls: false
  destination:
    server: https://kubernetes.default.svc
    namespace: quakejs
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

Important values:

image:
  repository: docker.io/awakenedpower/quakejs-rootless
  tag: latest

ingress:
  enabled: false
  className: ""
  hosts:
    - host: quake.example.com
      tls: false

quake:
  fsGame: baseq3

For ArgoCD, consume the published OCI Helm chart and override values there rather than editing rendered manifests.

Building from Source

Building with Podman (Recommended)

  1. Clone the repository:
git clone https://github.com/JackBrenn/quakejs-rootless.git
cd quakejs-rootless
  1. Build the image:
podman build -t quakejs-rootless:latest .
  1. Run the container:
podman run -d \
  --name quakejs \
  -p 8080:8080 \
  quakejs-rootless:latest

Building with Docker

  1. Clone the repository:
git clone https://github.com/JackBrenn/quakejs-rootless.git
cd quakejs-rootless
  1. Build the image:
docker build -t quakejs-rootless:latest .
  1. Run the container:
docker run -d \
  --name quakejs \
  -p 8080:8080 \
  quakejs-rootless:latest

Configuration

Server Configuration

The server configuration can be customized by modifying server.cfg.

Ports

  • 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.

What's Different?

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.

🙏 Credits & Acknowledgments

This wouldn't be possible without these projects or contributors:

License

MIT

About

Play multiplayer Quake III Arena in your browser with rootless Podman / Docker

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 99.7%
  • Other 0.3%