JoinGG

Setting up a Valheim dedicated server that keeps its world

SteamCMD app 896660, the start script arguments, UDP 2456 and 2457, how Valheim 1.0 stores a world, and moving your own world onto the server.

SweetMask · 6 min read

A Valheim dedicated server keeps its world in the save folder of the user it runs as, not the install directory. Reinstalling the server never touches it; starting the server once as a different user creates a fresh world somewhere else. Worlds go missing in ordinary ways: a -world name typed differently, a server killed instead of stopped, backups kept on the same disk.

Installing it with SteamCMD

The dedicated server is its own free Steam app, 896660, and SteamCMD fetches it with an anonymous login:

steamcmd +force_install_dir /home/valheim/server +login anonymous +app_update 896660 validate +quit

Run the same line after every patch. Iron Gate's notes have long told players to match the patch version of the server they join, and 1.0, released on 9 September 2026, has been followed by a run of 1.0.x patches, the latest 1.0.16 on 25 September. SteamCMD and app IDs covers the tool itself, and players who only want to join can start with installing Valheim and joining a server.

The start script

The install includes start_server.sh for Linux and start_headless_server.bat for Windows. Iron Gate's guide to dedicated servers says to copy the script and edit the copy, since Steam resets the original every time it updates. The line to change, in a Linux copy, looks like this:

./valheim_server.x86_64 -name "Brine and Oak" -port 2456 -world "Skerry" -password "tarred-rope" -public 1 -savedir "/home/valheim/saves"
  • -name is what the server list shows.
  • -port is the game port. Valheim also uses the one above it, so the default pair is 2456 and 2457.
  • -world loads the world with that name, or creates a new one if none has it.
  • -password must be at least five characters and must not appear in the server name, a rule written into the script's own comments. Check it first when a server exits at start-up.
  • -public 1 lists the server; -public 0 hides it, so it can only be joined by IP.
  • -savedir moves the worlds and the permission files to a path you choose, which also stops a run under the wrong user from starting a new world elsewhere.
  • -saveinterval is in seconds. The default, 1800, saves every 30 minutes.
  • -backups sets how many automatic backups are kept, four by default. The first follows -backupshort (7200 seconds unless changed) and the rest -backuplong (43200).
  • -crossplay moves the server to the crossplay backend, below.

There is no argument for a player limit. Iron Gate describes 1.0 as a game for one to ten players.

Ports and crossplay

On the default Steam backend, both UDP ports have to reach the machine, forwarded on the router and open in the firewall; the port forwarding guide covers the router side. With -crossplay, the server runs on PlayFab and sends its traffic through a relay, so nothing needs forwarding. Crossplay is also the only way players outside Steam, console players included, can join at all. They can connect by IP and port or from the server list, and anyone already on the server can read out the join code from the pause menu. Crossplay and community servers covers who can reach what. If you run more than one crossplay server on the same machine, give each a unique -instanceid; Iron Gate added it so that servers sharing a MAC address get separate PlayFab IDs.

Where the world lives, and what 1.0 changed

The default save path is ~/.config/unity3d/IronGate/Valheim on Linux and %USERPROFILE%\AppData\LocalLow\IronGate\Valheim on Windows. Worlds sit in its worlds_local folder, and the three permission lists sit in the save path itself. Until 1.0 a world was two files, Name.db and Name.fwl. Valheim 1.0 brought in a save system that splits a world into chunks, so each world is now a folder of many files and a save writes only the chunks that changed. Backups get folders of their own. The first time a 1.0 server loads an old two-file world it converts it, making a backup first.

Two habits follow from that. Copy a world as a whole folder with the server stopped, never file by file from under a running one. And keep the conversion backup until you are sure of the result: Iron Gate's notes for patch 1.0.15 say worlds converted before 1.0.12 lost the upgrade levels of items on item and armour stands, and the remedy they offer is that backup. While the format was in public testing, Iron Gate also said it had not been tested with mods.

Stop the server with Ctrl+C, or with SIGINT from a service manager, as Iron Gate's own notes advise. Killing the process loses whatever changed since the last save. The built-in backups share a disk with the world they protect, so copy them elsewhere on a schedule; backups that leave the building explains why the location matters more than the count.

Moving your own world onto the server

  1. On your PC, find the world in %USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local. A world kept in Steam Cloud is under Steam's userdata folder instead, in the directory for app 892970.
  2. Stop the server.
  3. Copy the world into the server's worlds_local: the whole folder for a world last saved in 1.0, or both the .db and the .fwl for an older one.
  4. Set -world to the world's name exactly as it appears, and start the server.
  5. Join and look around before anyone builds. A bare spawn with nothing on it means the name did not match and the server made a new world. Yours is still on disk: correct the name and restart.

Admins, bans and the permitted list

adminlist.txt, bannedlist.txt and permittedlist.txt take one ID per line, in the form platform, underscore, number: Steam_ followed by a SteamID64, for example. A player's ID appears in the server log when they connect and in the F2 panel in game. Newer IDs start with V_, and patch 1.0.12 fixed the lists so the older Steam_ form works alongside them. Admins get kick, ban, unban and banned in the F5 console. One line in permittedlist.txt turns the server into a whitelist, because everyone not on it is refused; a password is the lighter option, and private servers and passwords compares the two.

Mods

Iron Gate has no official mod support, and it would not promise that any mod would work in 1.0. The usual loader is BepInEx, packaged for the game as BepInExPack Valheim on Thunderstore, which ships a start_server_bepinex.sh for dedicated servers. Anything that adds items or creatures generally has to be on every client as well, at a matching version. Mods built on the Jötunn library can declare exactly that, and a client without the right version is disconnected with a version mismatch error. Console players cannot install mods, so a server that needs client-side mods is a PC server, whatever the -crossplay flag says.

If the server does not show up in the list

Start with the log. A password that breaks the rules, or a path that does not exist, stops the server before it registers anywhere. Then check -public, since 0 hides the server on purpose. On the Steam backend both UDP ports must be forwarded and open, and a home connection behind carrier-grade NAT cannot be reached that way at all; that is one good reason to use -crossplay and its relay, and hosting from behind CGNAT covers the others. The in-game list is long: search for the name, or skip it and add the server by IP and port, or by the join code from someone already playing. If players can see the server but not join it, compare version numbers. A server that missed the latest patch turns away everyone who has it, and the SteamCMD line above fixes that.

Tags
valheimdedicated serverbackups
Share

SweetMask

Published · 6 min read

All articles

Keep reading

Guides · Valheim

How to Install Valheim and Join a Server

The first troll that finds your house does not open the door. It swings a tree at the wall, the wall stops being a wall, and then the wooden roof falls in.

· 9 min read