selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
quakejs-docker logo

Self-host quakejs-docker

v1.0

Browser-based Quake 3 Arena server with web admin console

ReleaseOpen Source
Updated4 months ago
LanguageJavaScript
Setup difficultyEasy
Stars
240
Storage
about a gigabyte of disk for the image
Ports
80 (HTTP server for game page, assets, WebSocket tunnel, and admin console), 27960 (Internal Quake 3 game server port (proxied via Apache))
Docker
treyyoder/quakejs
Install with Docker Compose
Front page lobby showing server name, current map, players, leaderboard, and Join buttonAdmin console chat tab in public mode (no sign-in)Admin console sign-in dialogAdmin console chat tab with admin view showing team chat and private messagesLeaderboard/stats tab showing kills, deaths, K/D ratio, matches playedServer tab with current map, map change, announcements, backup controlsMatch tab with presets, game rules, player slots, mutators, server identityPlayers tab showing connected players, bots, and bans managementMaps tab with upload, lvlworld install, rotation, and installed mapsLog tab with crashes, audit trail, and raw server log

What is quakejs-docker?

QuakeJS-Docker packages the QuakeJS project — a port of Quake 3 Arena to WebAssembly — into a hardened, multi-architecture Docker image. It serves the game, assets, WebSocket tunnel, and a full-featured admin console over a single HTTP port (default 8080). The console provides map uploads and installation from lvlworld.com, bot management, player kick/ban with real IP tracking behind reverse proxies, match presets (FFA, duel, TDM, CTF), persistent leaderboards, automatic daily backups, and optional Discord/Slack notifications when a player joins an empty server. Retail Quake 3 assets (pak0.pk3) can be supplied by the owner via upload or EXTRA_PAKS URL; the image ships only demo content. The container runs unprivileged, uses signed images for amd64 and arm64, and persists maps, passwords, and state in Docker volumes.

Should you self-host quakejs-docker?

quakejs-docker scores 48/100 on selfhost.directory (how scoring works) and ranks #39 of 62 in Game Servers. It has 240 GitHub stars.

It shipped 1 stable release in the past year. The latest, v1.0, came out on 6 September 2026.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is written mostly in JavaScript.

Its closest alternative on selfhost.directory is minecraft (78/100, 14 491 stars). It scores higher overall, so compare the two before you pick. See quakejs-docker vs minecraft side by side.

Features

  • Automatic Backups
  • Bot management
  • Browser-based Quake 3 Arena
  • Discord/Slack notifications
  • Map management
  • Match presets
  • Persistent leaderboards
  • Player Management
  • Player voting
  • Real IP tracking behind reverse proxies
  • Reserved slots
  • Unprivileged container
  • Web Admin Console

quakejs-docker README

How to install quakejs-docker

Install quakejs-docker with Docker Compose

Docker (Docker Desktop or the engine)
Environment variables
ADMIN_PASSWORD, TRUSTED_PROXIES, NOTIFY_WEBHOOK, EXTRA_PAKS

docker compose up -d

Run from repository root

How to configure quakejs-docker

  • ADMIN_PASSWORDConsole password; unset generates one on first start, empty string disables console

    Console password; unset generates one on first start, empty string disables console

    values: any string or empty

  • ADMIN_USERadminConsole username (default: admin)

    Console username (default: admin)

    values: any string

  • BOT_CEILING24Maximum number of bots the game module can allocate (default: 24)

    Maximum number of bots the game module can allocate (default: 24)

    values: integer

  • EXTRA_PAKSURLs to fetch additional .pk3 files at startup (with optional #sha256=)

    URLs to fetch additional .pk3 files at startup (with optional #sha256=)

    values: whitespace-separated URLs

  • FS_GAMEbaseq3Game directory/mod to run (default: baseq3)

    Game directory/mod to run (default: baseq3)

    values: baseq3, cpma, etc.

  • NOTIFY_COOLDOWN900Seconds between notifications (default: 900)

    Seconds between notifications (default: 900)

    values: integer seconds

  • NOTIFY_WEBHOOKDiscord or Slack incoming webhook URL for notifications when a player joins an empty server

    Discord or Slack incoming webhook URL for notifications when a player joins an empty server

    values: webhook URL

  • Q3_GAME_LOG_MAX52428800Max size of games.log before rotation in bytes (default: 52428800)

    Max size of games.log before rotation in bytes (default: 52428800)

    values: integer bytes

  • Q3_HUNK_MEGS256Memory hunk size in MB for the game server (default: 256)

    Memory hunk size in MB for the game server (default: 256)

    values: integer MB

  • Q3_LOG_MAX20971520Max size of console log before truncation in bytes (default: 20971520)

    Max size of console log before truncation in bytes (default: 20971520)

    values: integer bytes

  • TRUSTED_PROXIESReverse proxy IPs/CIDRs to skip when reading X-Forwarded-For for real player addresses

    Reverse proxy IPs/CIDRs to skip when reading X-Forwarded-For for real player addresses

    values: comma-separated IPs or CIDRs

quakejs-docker releases & version history

More in Gaming

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…