- HTML 40.4%
- Python 27.4%
- Rust 15.4%
- TypeScript 8%
- Shell 4.9%
- Other 3.8%
Promotes the P3.3/P3.4 service-seam work to main: #193 inventory/economy authority design, #194 component re-census, #195 inventory / #196 economy / #197 broadcast / #198 knowledge seam services, #199 craft/trade gate close-out. Six fat-Rust-shell seam services now built + isolation-validated; remaining work is world-gated (DB swap, oracle cutover) or the P3.5 realtime core. |
||
|---|---|---|
| clean-room-server | ||
| DataExtract | ||
| docs | ||
| rust | ||
| tools | ||
| ubuntu-scripts | ||
| web | ||
| .gitignore | ||
| install-r1.sh | ||
| ISSUES.md | ||
| LICENSE | ||
| README.md | ||
Dune Awakening — Server Tools
A clean, scriptable toolkit for installing, running, and tuning your own Dune: Awakening Self-Hosted Server on Linux.
Steam app 4754530 · self-hosted, private, non-commercial use
What this is
Dune: Awakening ships a self-hosted server tool through Steam, but running it well means hand-driving Kubernetes (k3s), containerd image imports, four Funcom operators, and a per-world database. This project wraps all of that in two things you can actually use:
- One command to stand a server up (
dune setup) and one to run it (dune server start), on any common Linux distribution. - A documented map of every value you can tune — thousands of console variables (CVars) and class config settings, extracted from your own server binary and organized so you can find the knob you want.
You bring a Steam-purchased copy of the server tool; this repository brings the glue, the automation, and the reference material. Nothing here is a Funcom product, and no Funcom game content is redistributed (see Legal & IP boundary).
Table of contents
- Choose your stack
- Quick start — recommended (Rust + web UI)
- Quick start — bash (legacy)
- The
dunecommand surface - Tuning your server (CVars & class settings)
- Platform support
- Project layout
- Security model
- Legal & IP boundary
- License, use restrictions & contributing
Choose your stack
The Rust dune binary + Node/React-TSX web UI is the correct, recommended way
forward — that is where the work goes. The bash ubuntu-scripts/ + Python web
server are legacy: kept as a battle-tested fallback/reference, but no longer
the path new features land on. Use the Rust + web stack unless you have a
specific reason to stay on bash.
Rust dune + web UI (recommended) |
bash ubuntu-scripts/ + Python web (legacy) |
|
|---|---|---|
| What | One distro-agnostic Rust binary plus a Node + React/TSX web interface. | The original Ubuntu port of Funcom's Alpine installer plus a Python panel server. |
| Best for | Everything — new installs on any common distribution and a graphical control panel. | A fallback for the longest-running, most-exercised code path; reference. |
| Distro model | Abstracts the init system and package manager — runs on systemd and OpenRC, apt and dnf and apk. | Targets systemd + apt (Ubuntu/Debian family). |
| Install | install-r1.sh |
ubuntu-scripts/setup.sh |
Both stacks drive the exact same underlying system — k3s, kubectl, steamcmd,
the Funcom battlegroup lifecycle, and the edge-advertisement step. The opaque
bg-util editor handoff is preserved byte-for-byte in both. Server-data
extraction (tools/dune-extract/, Python) is shared by both and feeds the web
viewers — it is the canonical extractor, not part of the legacy bash stack.
Quick start — recommended (Rust + web UI)
Prerequisites
| Requirement | Why |
|---|---|
A Steam-installed Dune: Awakening Self-Hosted Server (app 4754530) |
Supplies the container images and Funcom scripts the installer imports. |
| Rust toolchain | Builds the dune binary. |
| Node.js 20 or newer | Builds the web UI (skip with --no-web). |
jq, openssl, curl |
Runtime helpers the installer checks for. |
Install
# From the repository root:
./install-r1.sh # build + install to /usr/local/bin (prompts for sudo)
# Alternatives:
./install-r1.sh --user # install to ~/.local/bin (no sudo)
./install-r1.sh --no-web # the dune binary only, skip the web UI
./install-r1.sh --build-only
This installs dune, the dune-server and battlegroup command aliases, and a
dune-web launcher.
Stand up and run a server
dune doctor # read-only: confirm detected distro / init / package manager
dune setup # install k3s + operators, then create your world
dune server start # bring the world up and print the player connect address
dune server status # live world + per-map game-server state
No need to type
sudo. Cluster commands need root to read k3s's configuration. Rundune-server status(orsetup,battlegroup, etc.) as your normal user and the binary re-launches itself undersudoautomatically, prompting once. Read-only commands such asdune doctornever ask.
Optional: the web control panel
dune daemon & # privileged loopback API on 127.0.0.1:8787
dune-web # serve the web UI on 127.0.0.1:8080
Open http://127.0.0.1:8080 for the home portal, the install/server panels, and
the item and CVar database browsers. The API contract is documented in
docs/api/daemon-api.md; build details live in
rust/README.md and web/README.md.
Quick start — bash (legacy)
The bash stack is legacy — kept as a battle-tested fallback. New features land on the Rust + web stack above; use this only if you have a specific reason to prefer the original Ubuntu path.
# 1. Steam-install the server tool (app 4754530) and note its folder.
# 2. Host prerequisites:
sudo apt update && sudo apt install -y jq openssl coreutils gawk grep curl sudo
sudo add-apt-repository multiverse && sudo apt install -y steamcmd # for `battlegroup update`
# 3. Install k3s (single-binary Kubernetes — official one-liner):
curl -sfL https://get.k3s.io | sh -
# 4. Run the installer (preflight runs first and fails fast on missing deps):
bash ubuntu-scripts/setup.sh
Full prerequisites, the battlegroup admin CLI
(status | start | stop | restart | edit | backup | ...), and troubleshooting
are in ubuntu-scripts/README.md. Known bootstrap
quirks are tracked in ISSUES.md.
The dune command surface
A single binary, dispatched by subcommand (and by the dune-server /
battlegroup aliases).
| Command | Purpose |
|---|---|
dune setup |
Preflight, install k3s, install the four Funcom operators, and create a world. |
dune server start | stop | restart | status | address | edge |
World lifecycle and the player-facing connect address. |
dune battlegroup ... |
Battlegroup administration (list, status, backup, edit, and more). |
dune cvar-check |
Boot-time read-back: verify which CVars your world actually loaded. |
dune cvar-dump / config-dump / tuning-dump |
Offline catalog generation from your own server binary (CVars / class config / combined). |
dune doctor |
Read-only probe of the detected distribution, init system, and package manager. |
dune net status | sync | mode |
Network mode (direct port-forward vs tunnel) and host-IP-change reconciliation. |
dune daemon |
The privileged, loopback-only HTTP API the web UI talks to. |
Tuning your server (CVars & class settings)
A Dune: Awakening server is tuned through console variables (CVars) in
UserEngine.ini and class config settings ([/Script/Module.Class]
sections) in UserGame.ini. Apply changes with
battlegroup apply-default-usersettings, then restart the world.
The hard part is knowing what exists. This repository ships a curated,
generated catalog under DataExtract/CVAR/:
| Start here | What it gives you |
|---|---|
TUNING-SURFACE.md |
The map of everything tunable without modifying the game binary — which CVars and class settings are reachable from an INI file versus which are hardcoded or cheat-gated. |
tuning-surface.html |
A single self-contained browser view of the entire INI-reachable surface, with search, filters, and copy-to-INI. |
CVARS-INDEX.md |
The console-variable index — 38 namespaces, each with its own detail file (for example CVARS-Vehicle.md, CVARS-Sandworm.md, CVARS-Net.md). |
CVARS-SERVER.md |
The server-relevant console variables. |
CONFIG-SETTINGS.md |
The UCLASS config settings for UserGame.ini / UserEngine.ini. |
These files document names and behavior extracted from the binary you own;
the names themselves remain Funcom's intellectual property. Regenerate the
catalog from your own server binary with dune cvar-dump, dune config-dump,
and dune tuning-dump.
Note. Some values are flagged inside the game engine as cheat-only and are silently ignored when set from a normal config file on a stock shipping server.
TUNING-SURFACE.mdmarks these;dune cvar-checkshows you what your running world actually loaded.
Platform support
The distro-agnostic stack abstracts the init system and package manager rather
than assuming any one distribution. "End-to-end" below means a full run of
dune setup through to game servers reporting Running.
| Distribution | Init / packages | Status |
|---|---|---|
| Ubuntu 24.04 / 26.04 | systemd / apt | Verified end-to-end on live bare metal and in a VM (both game servers running). |
| Debian 12 | systemd / apt | Verified end-to-end in a VM (both game servers running). |
| Fedora 43 | systemd / dnf | Verified end-to-end in a VM (both game servers running). |
| Alpine 3.21 | OpenRC / apk (musl libc) | Verified end-to-end in a VM (one game server running; the second is purely a memory-sizing limit, not a code limit). |
| Arch, RHEL/Rocky/Alma, openSUSE | systemd / pacman, dnf, zypper | Detected and mapped by dune doctor; full bring-up not yet exercised. |
The compiled dune binary is also available as a single static (musl) artifact
that runs on both glibc and musl hosts. Detailed evidence and per-distribution
notes are in docs/SUPPORT-MATRIX.md.
Project layout
| Path | Contents |
|---|---|
rust/ |
The dune binary (dune CLI library + crate) and the privileged loopback daemon. |
web/ |
The Node + React/TSX web UI (home portal, install/server panels, item and CVar viewers). |
ubuntu-scripts/ |
The bash installer and battlegroup admin CLI (the legacy stack). |
tools/dune-extract/ |
The Python extraction tooling shared by both stacks (the canonical extractor, not part of the legacy bash stack). |
DataExtract/CVAR/ |
The curated, generated CVar and class-config catalog. |
docs/ |
Architecture, the daemon API contract, the platform support matrix, and connectivity references. |
install-r1.sh |
Build-and-install entry point for the recommended stack. |
ISSUES.md |
Known bootstrap quirks and their workarounds. |
Security model
- The daemon binds loopback only (
127.0.0.1) and is the single component that performs privileged operations. The web server reverse-proxies to it; the browser never holds the daemon token. - Privilege is requested, not assumed. Cluster commands self-elevate through
sudoonly when run as a non-root user, and only for operations that need it. - The
bg-utileditor handoff is kept byte-identical to Funcom's original invocation, so the opaque editor integration is never altered. - Your credentials stay yours. Your Funcom login token and any instance- specific addresses are read at runtime and are never committed to this repository.
Legal & IP boundary
Not affiliated with Funcom. Provided as-is, for private-server use only.
Dune: Awakening is the intellectual property of Funcom Oslo A/S and the Dune rights holders (Legendary Entertainment, Herbert Properties LLC). All trademarks, characters, lore, game content, and engine-string identifiers cataloged here (CVar names and UCLASS paths) remain the sole property of their respective rights holders. Only the original installer code, tooling, and the curation, organization, and annotation of the catalog are MIT-licensed work in this repository. You must independently purchase and Steam-install the Self-Hosted Server tool from Funcom to use any of this. The full boundary is in
LICENSE.
Takedown / rights-holder contact. If Funcom Oslo A/S, the Dune rights
holders, or any party with a legitimate IP claim wishes this repository to be
taken down, modified, or amended in any way, please contact
sponge@unityailab.com or contact@unityailab.com directly. This
repository operates in full compliance with the wishes of all named IP holders
and will be removed or amended on request — no cease-and-desist or legal
escalation needed. A direct email to either address is the fastest path to
resolution.
Not redistributed here (and enforced by .gitignore): Funcom's container
images (images/), Funcom's original Alpine scripts (scripts/), any personal
Funcom login token, and raw uncurated string dumps. Forks must preserve these
exclusions — Funcom's content and personal credentials never belong in a
derivative repository.
License, use restrictions & contributing
Original work is licensed MIT with a prominent IP-boundary notice — see
LICENSE.
You may
- Fork, modify, and redistribute the original code and the curation of the catalog under MIT.
You may not
- Claim ownership of CVar names, UCLASS paths, or Dune trademarks — those remain Funcom's.
- Redistribute Funcom's
images/orscripts/— they are not in this repository and not covered by its license. - Run a commercial or paid Dune: Awakening server with this tooling. Paid access, paid boosters, pay-for-play, server-rental businesses, donation-tier- gated content, or any arrangement exchanging money for access to a server running on this tooling is prohibited. This repository is for private, non- commercial servers only. Funcom has not sanctioned commercial self-hosting, and running one undermines that goodwill.
Contributing — clean-room hygiene. Do not paste from Funcom's Alpine
scripts. Describe the desired behavior in plain English in your issue or pull
request, and the fix is derived independently. Running on a distribution outside
those listed above? Open an issue — dune doctor and the bash preflight warn on
unknown systems, and small adjustments may be all that is needed.