Valheim Dedicated Server Admin Guide: Commands, Admin Lists & Backups
How to administer a Valheim dedicated server: every launch argument that matters, adminlist/bannedlist/permittedlist and their crossplay ID trap, the F5 console commands admins actually get (and why cheats do not work on dedicated servers), world backups, graceful shutdown, and the folklore flags that do not exist.
Valheim has no RCON and no remote console in the vanilla dedicated server - administration happens through launch arguments, three text files, and the in-game F5 console. That makes the details of those three surfaces matter more than in most games, and it is also why so many Valheim guides drift into fiction (flags that do not exist, cheats that silently do nothing on a real server). Everything below is the current, verified behavior.
The server itself
The dedicated server is a free Steam tool - app 896660 ("Valheim Dedicated Server"; 892970 is the game itself), installable with SteamCMD:
steamcmd +login anonymous +app_update 896660 validate +quit
The binary is valheim_server.x86_64 (Linux) or valheim_server.exe (Windows), normally wrapped by the shipped start_server.sh / start_headless_server.bat. A quirk worth knowing when things look wrong: the start scripts export SteamAppId=892970 (the game's id) even though the server installs under 896660 - that is correct, do not "fix" it.
If SteamCMD ever reports it cannot find app info for 896660, it is usually a transient Valve-side restriction on anonymous logins (it happened fleet-wide in Nov 2024) - retry, or log in with a Steam account that owns Valheim.
Launch arguments
The whole server config is arguments on the start command - there is no server .cfg file:
| Argument | What it does |
|---|---|
-name | Server name shown in the browser |
-port | Game port (default 2456; the server also uses port+1 for Steam queries) |
-world | World name - picks (or creates) <name>.db/<name>.fwl |
-password | Join password (see rules below) |
-savedir | Where worlds and the admin/ban/permitted lists live |
-public | 1 = listed in the community browser, 0 = join by IP/code only |
Ports: forward 2456-2458/UDP for the Steam backend (game, query, comms). A -crossplay server uses PlayFab relays and needs no port forwarding at all - which also makes it the pragmatic answer to "my router cannot port-forward".
Flags you will see in other guides that do not exist: -permittedonly. Whitelisting is activated by the permittedlist.txt file itself (below), not by a flag.
Password rules
- A password is required for a public server and must be at least 5 characters.
- The password cannot be contained in the server name (or vice versa) - the server refuses to start.
- With
-public 0an empty password is accepted; anyone with the IP or join code can enter.
Vanilla cannot run an unpassworded public server - listings that do are modded.
Admin, ban and whitelist files
Three plain-text files, one player ID per line (// comments allowed), live in the save directory:
Windows: %UserProfile%\AppData\LocalLow\IronGate\Valheim
Linux: ~/.config/unity3d/IronGate/Valheim
(or wherever -savedir points)
| File | Effect |
|---|---|
adminlist.txt | Members may use the admin console commands below |
bannedlist.txt | Players refused at connect |
permittedlist.txt | If non-empty, the server becomes whitelist-only - everyone not listed is refused |
Ban/permit changes are generally re-checked on the next connect attempt, but host documentation contradicts itself on hot-reload - after editing adminlist.txt, restart the server rather than debugging why your admin powers did not arrive.
The crossplay ID trap
On a Steam-only server the entries are bare SteamID64s (76561198xxxxxxxx). On a -crossplay server the files use prefixed platform IDs, case-sensitive:
Steam_76561198012345678
Xbox_2533274808739573
Steam IDs are easy to find (steamid.io, or the in-game F2 panel). Xbox/Game Pass players have no in-game ID display - read it from the server log at connect time, e.g. ... received local Platform ID Xbox_2533274808739573. Crossplay servers also print a 6-digit join code in the console's General Info block - players can join with it instead of an IP.
The F5 console: what admins actually get
Two prerequisites trip almost everyone:
- The console is disabled by default on the client - add
-consoleto the player's Steam launch options (a change from patch 0.148.6, March 2021), then F5 opens it. - The player must be in
adminlist.txtfor the admin commands to work.
Admin commands on a dedicated server:
| Command | What it does |
|---|---|
kick [name/ip/userID] | Kick a player |
ban [name/ip/userID] | Ban (writes bannedlist.txt) |
unban [ip/userID] | Lift a ban |
banned | List current bans |
save | Force a world save now |
Any connected player, no admin needed: help, info, ping, lodbias [1-5].
Why your cheats do nothing
devcommands (the old imacheater) unlocks god/fly/spawn/tod/skiptime and friends in singleplayer or player-hosted sessions only. On a genuine dedicated server the cheat command set is blocked, admin or not - that is by design, not a broken adminlist. Enabling them requires a server-side mod (JereKuusela's "Server devcommands" on Thunderstore, which still gates usage to adminlist.txt members). Native admin commands (kick/ban/save) are unaffected.
World files and backups
A world is exactly two files under worlds_local in the save dir: <world>.db (the actual world) and <world>.fwl (metadata/seed). To back up manually, stop the server and copy both together - restoring or copying while the server runs risks corruption, and Valheim has a rare but acknowledged world-corrupting bug, so the community-standard practice is a backup before every restart and every update, not just on schedule.
The server keeps its own safety nets: .old copies of both files on every save, plus the rotating -backups/-backupshort/-backuplong chain (defaults: 4 kept, first after 2h, then every 12h).
Running several servers? Always pair -world with an explicit per-instance -savedir - reusing a world name across instances can silently pick up the wrong .db.
Updating and stopping without losing progress
Update = the install command again (+app_update 896660 validate). Valheim is version-locked: a client on a different build simply cannot connect, so update the server promptly after every game patch - "my friends suddenly cannot join" right after a patch day is almost always this.
Shutdown is the sharp edge: the server saves cleanly on SIGINT (Ctrl-C), but SIGTERM handling is unreliable enough that the standard systemd advice is explicit KillSignal=SIGINT (and generous stop timeouts in containers). kill -9 never saves - you lose everything since the last autosave (default 30 min).
Player cap
The cap is 10 players and vanilla has no flag or config to raise it. Mods can (server-only ones like MaxPlayerCount, or ValheimPlus - the latter must be installed by every connecting client too), but part of Valheim's simulation runs peer-side, so pushing far past 10 invites desync regardless.
Folklore traps
-permittedonly- not a real flag; the whitelist activates viapermittedlist.txt.- "devcommands then god" on a dedicated server - blocked in vanilla; needs a server mod.
- Bare SteamID64s on a crossplay server - crossplay lists want
Steam_/Xbox_prefixed IDs. - Stopping with SIGTERM/SIGKILL - use SIGINT or lose up to 30 minutes of progress.
- Editing world files while the server runs - stop first; copy
.dband.fwltogether. - Linux first run crashing on
steamclient.so- install the 32/64-bit steam client libs your distro is missing; it is the most common "server will not even start" ticket.
MantaScope tracks the live Valheim server list - browse populated servers with real player counts, population history, uptime and per-server pages, and claim your own server to get monitoring, population graphs, downtime alerts and Discord notifications alongside the file-and-console tools above.