Environment Reference
Configure Nexus with the following environment variables. Defaults are provided for a standard Docker setup.
NexQuake is designed to be drop-in compatible with any protocol 15 (NetQuake) dedicated server binary. The bundled nqserver is the stock WinQuake engine with minimal patches. Put custom server binaries in SERVER_DIR; Nexus prepends that directory to PATH ahead of BIN_DIR.
Startup Options
| Variable | Default | Description |
|---|---|---|
HTTP_PORT |
1337 |
Main HTTP and WebSocket listener port. |
QUICKSTART |
ffa |
Quickstart catalog entries from CFG_DIR/game.json (for example ctf,arena or all). Invalid names are ignored. See Quickstart Catalog. |
LOG_LEVEL |
info |
Logging verbosity. Accepts: error, warn, info, debug. |
CONSOLE_TIMESTAMPS |
1 |
Timestamps on operator console log lines. Accepts: 0, 1. |
DEBUG_RELAY |
0 |
Logs UDP relay traffic with source/destination, length, and byte preview. Accepts: 0, 1. |
POOL_SIZE |
1 |
Per-line servers.ini scaling cap for -port 0 startup entries (minimum 1). Controls the maximum backend servers in that entry's backend pool. 1 (the default) disables autoscaling and pool-style slist instance counts for those entries. Set higher (for example 10) to enable demand-driven scale-out. |
Authentication
| Variable | Default | Description |
|---|---|---|
AUTH_ISSUER |
empty | OIDC Issuer URL (e.g. https://accounts.google.com). |
AUTH_AUDIENCE |
empty | OIDC Audience (Client ID). |
AUTH_JWT_HEADER |
Authorization |
HTTP header for OIDC JWT token. |
AUTH_ADMIN_ID |
empty | Optional comma-separated list of OIDC claim matchers (e.g. email:[email protected], group:admins) required for admin access. If left empty, any successfully verified JWT from AUTH_ISSUER + AUTH_AUDIENCE is treated as admin. Logs identify users by email, preferred_username, name, or sub. |
AUTH_CLIENT_IP_HEADER |
empty | HTTP header to trust for client IP resolution (e.g. CF-Connecting-IP, X-Forwarded-For, X-Real-IP). If unset or the header value is invalid, falls back to the direct connection IP. |
AUTH_RCON_PASSWORD |
empty | Legacy-style shared secret for in-game rcon_password. |
Client-Side Options
| Variable | Default | Description |
|---|---|---|
CL_CONCURRENCY |
16 |
Sets the number of game files to download simultaneously. Set 0 for unbounded (capped by queue size). |
CL_SMENU |
0 |
If 1, auto-opens the server search menu on client start up to make joining a server easier. |
CL_ARGS |
empty | Set launch arguments for client start up in shell-style strings (i.e. use single quotes for multiple args). |
CL_URL_ARGS |
1 |
If 1, lets players add extra client startup arguments in the URL after ?, separated by &. Set 0 to disable URL argument passthrough. |
CL*ARGS Examples
Example: Always Disable Sound
CL_ARGS=-nosound
CL_URL_ARGS=0
Example: Name With Quotes (Safe Shell Form)
This works in bash because the whole value is single-quoted:
CL_ARGS='-nosound +name "Player1"'
CL_URL_ARGS=0
If you prefer double quotes around the whole value, escape the inner quotes:
CL_ARGS="-nosound +name \"Player1\""
CL_URL_ARGS=0
Example: Allow User Options
Enable URL arguments:
CL_ARGS='-nosound +skill 3 +name "BrowserPlayer"'
CL_URL_ARGS=1
Now a link can add extra startup arguments:
https://quake.example.com/?+exec&ctf.cfg&+name&TheShadow
Notes:
- Use & between arguments.
- If you need a space inside an argument, write it as %20 (for example Player%20One).
Paths
| Variable | Default | Description |
|---|---|---|
GAME_DIR |
/app/game |
Root directory for game data (id1, mods). |
CFG_DIR |
/app/etc |
Default configuration directory (game.json, servers.ini, cfg templates). |
CD_DIR |
/app/cd |
Root directory for CD audio tracks (.ogg/.mp3). |
LOGS_DIR |
/app/logs |
Where Nexus and server logs are written. |
BIN_DIR |
/app/bin |
Core runtime binaries and bundled assets (nexus, nqserver, nqwasm/). |
SERVER_DIR |
/app/server |
Bind-mountable override directory for custom server binaries. Searched before BIN_DIR. |
CLIENT_DIR |
/app/bin/nqwasm |
Location of WASM client assets (index.wasm, index.html). |