Skip to content

Environment variables

For a seed-managed installation, use the seed inputs. Manage registration, release channels, host policy, the library and stored secrets in the admin UI.

The other sections are process settings for a legacy Compose install or a source checkout, set in deploy/.env.

Many node agent settings can also be set per host in Admin ▸ Fleet ▸ Hosts ▸ Settings. Precedence: per-host override, then agent environment, then default.

This is the practical subset. The full list is docs/configuration.md in the repository.

Read once, on a clean machine. Afterwards the machine’s own state wins, so you can remove the enrollment string from the stack. See Install with Docker.

Variable Default Purpose
QUASAR_ROLE gpu gpu, combined or control-only.
QUASAR_ENROLLMENT required on a GPU host The single-use qenr1.… string from Fleet ▸ Hosts ▸ Add host. Stored as a secret file.
QUASAR_HOME_ROOT required with an agent Host path of the home root, mounted at the same path in the agent. If set on a control-only machine, every GPU host must use it.
QUASAR_TEMPLATE_ROOT templates beside the home root Host path of the template root.
QUASAR_NODE_NAME the host name The agent’s node name. Must match a name bound into the enrollment string.
QUASAR_AGENT_IMAGE required with an agent The node-agent image: a tag (…/quasar-node-agent:latest, pinned to its digest at install) or repository@sha256:<digest>. On a control-only machine, optional: the agent Add host installs when no release names one.
QUASAR_APP_PUID, QUASAR_APP_PGID the image’s user Owner of game and save data (Unraid: 99 and 100).
QUASAR_CONTAINER_NETWORK none App container network: none, bridge or host.

On the first machine (combined or control-only), also:

Variable Default Purpose
QUASAR_CONTROL_PLANE_IMAGE required The control-plane image: a tag (pinned at install) or repository@sha256:<digest>.
QUASAR_PUBLIC_HOST unset; set it The console’s name or LAN address. The certificate names it.
QUASAR_TLS_HOSTS unset More certificate names, comma-separated.
QUASAR_TRUSTED_PROXIES unset Reverse proxies in front of the console. First-run setup and sign-in through a proxy on the HTTP port need it. /0 or a malformed entry refuses the install.
QUASAR_HSTS_MAX_AGE unset (off) Seconds of HSTS on the HTTPS listener. Read HSTS first.
QUASAR_HTTP_PORT, QUASAR_TLS_PORT 8080, 8443 Host ports for HTTP (agents, /health) and HTTPS (console).
QUASAR_POSTGRES_IMAGE built in Quasar’s own Postgres, by tag (pinned at install) or digest. Created once, never updated.
QUASAR_DATABASE_HOST unset Use your own database instead of creating one.
QUASAR_DATABASE_PORT, QUASAR_DATABASE_USER, QUASAR_DATABASE_NAME 5432, quasar, quasar Your database’s connection.
QUASAR_DATABASE_SSLMODE disable Use require or verify-full for a remote database.
QUASAR_DATABASE_PASSWORD required with QUASAR_DATABASE_HOST Take it from the stack’s .env. Read only at install.
QUASAR_AWAIT_RESTORE unset 1 holds the new control plane until you load a Compose dump. Quasar’s own database only. See Move a Compose install.
QUASAR_ENROLL_SEED_IMAGE, QUASAR_ENROLL_AGENT_IMAGE the installed release’s Overrides the images Add host installs, by tag (pinned at install) or digest.

The seed also needs two mounts: the engine socket, and the quasar-machine volume read-only at /var/lib/quasar-machine.

Also seed inputs.

Variable Default Purpose
QUASAR_UPDATER_ALLOWED_NAMESPACES ghcr.io/accreleus/quasar Registry namespaces platform images may come from, comma-separated. Blank means the default. The first machine also checks developer applies against it.
QUASAR_UPDATER_SIGNATURE_MODE off off, verify or require. See Release signatures.
QUASAR_UPDATER_TRUSTED_KEYS none <key-id>:<base64 public key>, comma-separated.
QUASAR_UPDATER_MANIFEST_BASE_URL the project’s GitHub Releases Where signatures are fetched from.
QUASAR_UPDATER_MANIFEST_TIMEOUT_S 15 Timeout for that fetch.
QUASAR_PLATFORM_INSECURE_REGISTRIES unset First machine: plain-HTTP registries allowed for a developer apply.

Also seed inputs, on a GPU or combined host. These are the node agent’s own settings. The most common one:

Variable Default Purpose
QUASAR_APP_MOUNT_ALLOW unset Host folders apps may bind besides the home root, comma-separated. Read-only unless an entry ends :rw, e.g. /mnt/games,/mnt/saves:rw.

Most QUASAR_* node-agent settings in the sections below work here too, such as QUASAR_ENCODER and the ABR knobs. The full list is “Agent variables” in docs/configuration.md. A setting the install manages, like the render node or the enrollment file, is refused.

To change an input later:

Terminal window
docker exec -it quasar-recovery quasar-recovery reconfigure --yes QUASAR_UPDATER_SIGNATURE_MODE=verify

reconfigure accepts the trust settings, QUASAR_HOME_ROOT, QUASAR_TEMPLATE_ROOT, QUASAR_APP_PUID, QUASAR_APP_PGID, QUASAR_CONTAINER_NETWORK, the agent variables, and on the first machine QUASAR_PUBLIC_HOST, QUASAR_TLS_HOSTS, QUASAR_TRUSTED_PROXIES, QUASAR_HSTS_MAX_AGE, the ports and the Add host images. An empty value (QUASAR_APP_MOUNT_ALLOW=) removes a setting. It replaces the affected services and rolls back if they don’t verify. Database inputs and the node name need a reinstall.

Changing QUASAR_HOME_ROOT doesn’t move saves. Move the old root’s contents into the new root first, or players start with fresh homes. It worked when the host’s Settings show the new root as verified and an existing save loads.

Variable Notes
DATABASE_URL Postgres connection string.
CONTROL_PLANE_URL Agent side. WebSocket URL of the control plane.
POSTGRES_PASSWORD Compose. Generated on a fresh install.

redeploy.sh generates missing secrets and never overwrites existing ones. Hosts join with a QUASAR_ENROLLMENT string from Add host, or with ENROLLMENT_TOKEN set to a token minted there (the part of the string after its last .).

Variable Default Purpose
BOOTSTRAP_ADMIN_EMAIL unset Creates the first admin at boot. Idempotent.
BOOTSTRAP_ADMIN_USERNAME unset With the above.
BOOTSTRAP_ADMIN_PASSWORD unset With the above. Set all three or none.
REGISTRATION_MODE closed Initial registration mode for a fresh database. The admin UI wins afterwards.
PUBLIC_BASE_URL unset Public URL for invite links and signaling. Set it when a proxy rewrites Host.
NODE_NAME hostname Agent side. Stable identity for this host.
QUASAR_ENROLLMENT unset Agent side. The Add host string: control-plane address, pinned fingerprint and a single-use token (1 hour by default, up to 30 days). CONTROL_PLANE_URL / ENROLLMENT_TOKEN override its parts.
Variable Default Purpose
QUASAR_SECRET_KEY unset Base64 of 32 bytes. Encrypts credentials stored in the admin UI. Back it up; it can’t be recovered.
QUASAR_SECRET_KEY_PREVIOUS unset Comma-separated decrypt-only predecessor keys (<version>:<base64>). Rotate with QUASAR_SECRET_KEY=2:<new-base64> and keep the old key here as 1:<old-base64>; rows written under it keep decrypting while new writes use the new one.
Variable Default Purpose
QUASAR_TLS auto auto or off.
QUASAR_TLS_ADDR :8443 HTTPS listener.
QUASAR_TLS_HOSTS unset Names and IPs for the generated certificate. Required for LAN access.
QUASAR_TLS_CERT unset Your own certificate. Set with the key or not at all.
QUASAR_TLS_KEY unset Your own key.
QUASAR_TLS_DIR /var/lib/quasar-control/tls Where the generated certificate is kept.
QUASAR_HTTP_REDIRECT auto Redirect browser routes from HTTP to HTTPS.
QUASAR_ALLOWED_ORIGINS unset Overrides the allowed-origins list in Admin (even when empty). Unset: Admin manages it; with no list, same-origin only. * is rejected.
QUASAR_TRUSTED_PROXIES unset Proxy IPs or CIDRs whose forwarded client address and protocol are trusted. First-run setup and sign-in through a proxy on the HTTP port need it.
LISTEN_ADDR :8080 HTTP listener.
CONTROL_PORT 8080 Compose. Host port for HTTP.
QUASAR_TLS_PORT 8443 Compose. Host port for HTTPS.
QUASAR_COMPRESSION true gzip compression of text responses. Set false only behind a compressing reverse proxy.
QUASAR_ACCESS_LOG errors off, errors or all: which requests get one log line. true/false map to all/off.
CONTROL_PLANE_FINGERPRINT unset Agent side. Manual certificate pin (SHA-256), overriding the one in QUASAR_ENROLLMENT.
QUASAR_ALLOW_PLAINTEXT_AGENT off Agent side. 1 allows a ws:// control-plane URL to a non-localhost address.
Variable Default Purpose
QUASAR_HOME_ROOT unset Fallback managed-home root. Without any root, managed-home apps can’t launch. redeploy.sh sets /var/lib/quasar/homes.
QUASAR_HOMES_GC 1 (on) Agent. Sweep throwaway homes (agent- + 8 hex + - + 8 hex) past retention so the home root doesn’t fill the disk. 0 disables; inert with no home root.
QUASAR_HOMES_GC_RETENTION_HOURS 72 Hours a throwaway home must be idle before it’s collectable.
QUASAR_HOMES_GC_DRY_RUN 0 (off) 1 logs what would be deleted, removes nothing.
QUASAR_STORAGE_PROVIDER auto auto or local (mount-path storage). volume is rejected.
QUASAR_ARTWORK_DIR /var/lib/quasar-control/artwork Artwork cache. Needs a persistent volume.
QUASAR_ARTWORK_PROVIDER steamgriddb steamgriddb or none.
QUASAR_STEAMGRIDDB_API_KEY unset Or set it in the admin UI, which wins.
Variable Default Purpose
QUASAR_ENCODER auto AMD and NVIDIA use vulkan, Intel va, no GPU openh264. Set va, nvenc, vulkan or openh264 to override.
QUASAR_RENDER_NODE software Pin a DRM render node. Prefer a /dev/dri/by-path/ path; leave software for the SW path.
QUASAR_NVIDIA_DRIVER_HOST_PATH automatic Recovery override: the host directory already mounted at /opt/quasar/nvidia-driver in the agent. It doesn’t create the mount. Custom stacks without container identity also need QUASAR_PULSE_IMAGE. Recreate the agent after changing it.
QUASAR_CUDA_DEVICE 0 NVENC device index on a multi-GPU host.
QUASAR_ZEROCOPY off Full zero-copy on the VA path.
QUASAR_GOP 60 Frames between keyframes.
QUASAR_SLICES 8 H.264 slices per frame.
QUASAR_TARGET_USAGE 6 VA speed against quality, 1 to 7.
QUASAR_QUEUE_BUFFERS 3 Encode queue depth.
QUASAR_VULKAN_H264 on 0 moves H.264 off Vulkan when a vendor fallback exists.
QUASAR_VULKAN_HEVC on 0 moves HEVC off Vulkan when a vendor fallback exists.
QUASAR_VULKAN_AV1 on 0 moves AV1 off Vulkan when a vendor fallback exists. Doesn’t bypass a driver restriction.
QUASAR_VULKAN_MAX_SESSIONS 2 Concurrent Vulkan encode sessions per GPU.
QUASAR_REQUIRE_HW_RENDER 1 Fail a session that falls back to software rendering.
Variable Default Purpose
QUASAR_ABR_MODE smooth smooth, protective or off.
QUASAR_ABR 1 Legacy switch. 0 means off.
QUASAR_ABR_FLOOR_KBPS unset Explicit floor.
QUASAR_ABR_FLOOR_RATIO 0.3 Floor as a fraction of the tier bitrate.
QUASAR_ABR_LADDER on in smooth Encoder speed escalation under saturation.
QUASAR_ABR_LADDER_RESOLUTION off Opt-in resolution step-down. Needs smooth; applies to the next session.
QUASAR_ABR_LADDER_FPS off Opt-in 120-to-60 fps step-down. Needs smooth; applies to the next session.

About fifteen more tuning settings exist; leave them unless you’ve measured a problem.

Variable Default Purpose
QUASAR_VRAM_MIN_FREE_MB 1024 Free GPU memory needed to admit a launch. 0 disables the check.
QUASAR_VRAM_INFLIGHT_ESTIMATE_MB the floor Memory reserved for very recent launches.
QUASAR_VRAM_STALENESS_SECS 20 Maximum age of a memory sample.
QUASAR_PLACEMENT_POLICY spread spread, least-loaded or locality.
Variable Default Purpose
QUASAR_APP_DISPLAY_ENV on Pass session resolution and frame rate to app containers.
QUASAR_APP_GAMESCOPE_ENV on Also pass the gamescope variables.
QUASAR_APP_SHM_SIZE 1g Shared memory for app containers.
QUASAR_APP_STOP_TIMEOUT_SECS 10 Graceful stop window.
QUASAR_APP_PUID unset Run apps as this user ID.
QUASAR_APP_PGID unset Run apps as this group ID.
QUASAR_APP_PIDS_LIMIT 8192 Process limit.
QUASAR_IDLE_TIMEOUT_SECS 120 End idle sessions after this long.
QUASAR_CONSOLE_DISCONNECT_GRACE unset (never; 10 min for a monitor read as off) Control plane. Stop an auto-started console session once its display connector has been absent this long (a Go duration; 0 stops at once). Unset, an absent connector never stops it, but a monitor still connected that the agent reads as off over DDC/CI stops it after 10 minutes.
Variable Default Purpose
QUASAR_AUDIO_REQUIRED off Fail the session instead of running silently. Recommended.
QUASAR_MIC_DISABLED off Turn the microphone off for this host.
Variable Default Purpose
QUASAR_LIBRARY_SCAN_INTERVAL unset Library discovery interval when set, as a Go duration (360m, 6h); the admin setting wins when unset. 0 disables discovery entirely; a bare number fails startup.
QUASAR_LIBRARY_PROVIDERS steam Allowed providers.
QUASAR_IMAGE_REGISTRY_HOSTS ghcr.io Registries Quasar resolves images and artwork from.
QUASAR_IMAGE_CATALOG_REPO accreleus/quasar-images owner/name of the GitHub repo app-image sync fetches the manifest from; point it at a fork or mirror.
QUASAR_IMAGE_CATALOG_PATH quasar-manifest.json The manifest’s path within that repo.
QUASAR_ARTWORK_MAX_BYTES 8388608 Maximum artwork size (8 MiB).

On an owned install, see the trust settings above; it detects releases from the project’s repository with no token. A legacy Compose install’s updater is described in Legacy Compose installs.

Release detection on a legacy Compose or source control plane:

Variable Default Purpose
QUASAR_PLATFORM_RELEASE_REPO accreleus/quasar GitHub repository (owner/name) to read releases from; a fork works. off disables detection (empty means the default).
QUASAR_PLATFORM_RELEASE_TOKEN unset Optional GitHub token, for a private fork or higher rate limits. Never logged.
QUASAR_PLATFORM_RELEASE_ASSET_HOSTS github.com,objects.githubusercontent.com,release-assets.githubusercontent.com Hosts release assets may download from. If you see “redirect host is not allowed”, add the host the job names.
QUASAR_PLATFORM_REGISTRY ghcr.io Registry for platform images on the edge channel. Added to QUASAR_IMAGE_REGISTRY_HOSTS automatically. Anonymous pull only.
QUASAR_PLATFORM_RELEASE_DETECT_INTERVAL 168h Overrides the detection schedule (weekly, Monday 02:00 UTC) as a Go duration. 0 stops scheduling. “Check now” always works.

The release channel is set on the Releases tab, not here. See Updating Quasar.

See Experimental options before enabling these.

Variable Default Purpose
QUASAR_FEC_MODE derived off, fixed or auto. Not recommended for browsers.
QUASAR_FEC_PERCENTAGE 0 Redundancy percentage.
QUASAR_INTRA_REFRESH 0 Vulkan only, patched image only.
QUASAR_INTRA_REFRESH_PERIOD 0 60 is the validated value.

Recommended on every host that serves media: the UDP send buffer.