- Python 62.3%
- JavaScript 27.6%
- HTML 9.9%
- CSS 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| artwork | ||
| config | ||
| docs | ||
| runtime | ||
| tests | ||
| vendor | ||
| web | ||
| .gitignore | ||
| install.py | ||
| README.md | ||
| RELEASE_NOTES_0.1.1.md | ||
| VERSION | ||
Valheim Dashboard — Worldkeeper
Update reliability and progress fixes: release notes.
Interface preview using example data. Appearance and available controls depend on your configuration. Click the image for full size.
A standalone Valheim operations dashboard in the GameOps ecosystem: world-tree artwork, deep blue and gold, live server state and population, world-save metadata, automatic-backup inventory, journal, and a guarded manual update workflow.
The dashboard runs on a Linux dashboard host and controls an existing systemd Valheim server over a dedicated, restricted SSH key. It can be used independently of Nexus. Nexus can add it with its existing Standard Nexus hooks profile. No Docker, Node runtime, Forgejo account, Proxmox API or original author's LAN is required. The game server must already exist; this package does not create worlds.
Ecosystem responsibilities
- GameOps Blueprint Builder: describes the server and deployment topology.
- GameOps Host Dashboard: supplies the general dashboard and reusable security/control contract.
- Valheim Dashboard: owns the Valheim interface, world metadata and guarded updater.
- Nexus Game Fleet: discovers status and calls the unchanged login/status/action APIs.
The shared GameOps core is included under vendor/gameops, pinned to commit
70a0298 from gameops-host-dashboard. Installation never downloads a moving branch.
See vendor/README.md for provenance. Do not copy improvements into unrelated games:
generic improvements belong upstream; Valheim-specific behavior stays here.
Requirements
Two systemd Linux environments (physical hosts, VMs or LXCs are all suitable), Python 3.11+, OpenSSH, an existing Valheim systemd service, a working SteamCMD installation owned by the game account, and a TLS reverse proxy. The supported first release uses Valheim's Steam backend and local A2S telemetry. It deliberately blocks updates when the player query cannot establish that the running server is empty. Crossplay needs a trustworthy alternate population adapter before updates can be enabled under this policy.
Use a copied start script outside the Steam-managed game directory. The game service must stop gracefully on SIGINT and allow enough time to save. Installation, saves and backup directories must be distinct; the install directory must not be a mount point because activation uses a directory rename. Chunked worlds and classic worlds are both backed up in full. Free space must cover backups, a staged installation and retained recovery files.
Deploy from this repository
- Copy
config/valheim.example.jsonand edit all paths, instance ID, world name, query port and public address. List every startup/environment/unit configuration file needed to restore your server. No secrets belong in this JSON. - Copy
config/blueprint.example.json, or create a universal GameOps remote blueprint with the same project ID, systemd service and local A2S port. Use your own dashboard/game/ingress addresses and hostname. Keep the instance ID stable when replacing an existing generic board. - Copy this complete repository and both reviewed JSON files to both Linux hosts.
On the dashboard host, prepare a dedicated key:
sudo python3 install.py --role dashboard --blueprint my.blueprint.json \
--valheim-config my.valheim.json --prepare-key
Copy the public key to the game host. Obtain its SSH host key through a trusted console and prepare a known-hosts file; do not blindly accept an ssh-keyscan result. Then install the game-host endpoint:
sudo python3 install.py --role controller --blueprint my.blueprint.json \
--valheim-config my.valheim.json --public-key-file /root/dashboard.pub
Install the web dashboard on the dashboard host:
sudo python3 install.py --role dashboard --blueprint my.blueprint.json \
--valheim-config my.valheim.json --known-hosts-file /root/game.known_hosts
The first install prompts for a dashboard password, or accepts --password-file.
Re-running preserves existing login credentials, sessions and instance identity.
It restarts only the dashboard/controller units, not the game. Avoid reinstalling
a controller while a game operation is active. Publish the blueprint listener
through your existing HTTPS proxy and restrict its port to ingress and local
Nexus connections. See docs/DEPLOYMENT.md for services and rollback.
To use the same Valheim updater with the general GameOps frontend, pass
--generic to the dashboard installation. This is how both dashboards can share
one update implementation while retaining different interfaces.
The game-host metadata service publishes a small read-only snapshot every ten seconds. The SSH account never needs membership of the game group or access to private world saves. Stale metadata is reported as unavailable.
What is real data?
Population comes from Steam A2S; uptime and state come from systemd. World metadata comes from the configured save directory, including current chunked saves. File modification times are not a claim that a consistent backup has completed while the server is running. The interface does not invent game days, boss kills, biomes, player positions, an RCON console, or a world map. A future optional mod adapter can add those with explicit capabilities and its own installation contract.
Tests
python3 -m unittest discover -s tests -v
The updater tests simulate game service/Steam outcomes using temporary worlds. They test occupied/unknown player rejection, stale review rejection, verified full backups, staging failure, changed target builds, retained originals and keeping a previously stopped server stopped. Running the tests never touches a real game.
Read the update policy before enabling maintenance. Review the staging branch before adopting a new release. No automatic scheduling or hidden game update is performed by installation.
