A Valheim dedicated server has no settings file. Everything is set by arguments on its start line, plus three small text files that decide who is an admin, who is banned and who may join. This guide goes through every argument in Iron Gate's server manual, what each world modifier and preset really changes, where the world is saved and how to move one in, and which ports matter with and without crossplay.
Which version this covers. Valheim left Early Access with version 1.0 on 9 September 2026, and 1.0 changed how worlds are saved. Everything here was checked on dedicated server 1.0.16 installed with SteamCMD (app 896660) on Linux, against the Valheim Dedicated Server Manual PDF that ships with the server and Iron Gate's patch notes. Where we write "in our test", we started that server and looked at what it did.
On Windows the server is started by start_headless_server.bat, and on Linux by start_server.sh, both in the server's install folder. The Linux script that ships with 1.0.16 starts the server with this line:
Steam resets both scripts every time the server updates, so the manual tells you to make a copy, edit the copy and start the server from it. Note that the shipped script already includes -crossplay; if you want a Steam-only server, remove it (see ports below).
| Argument | Default | What it does |
|---|---|---|
| -name "My server" | – | The name shown in the server list. |
| -port 2456 | 2456 | The game port. The server uses this port and the next one (2456 and 2457 by default). On a crossplay server the number is still used to tell apart servers that share a public IP. |
| -world "Dedicated" | – | The world to load. If no world with that name exists, a new one is created with a random seed. |
| -password "secret" | – | The password players must enter. Iron Gate's start script states the rules: at least 5 characters, and the password can't be contained in the server name. |
| -public 1 | 1 | 1 lists the server in the in-game browser. 0 hides it; players then join with Join IP. The manual suggests 0 for a LAN server. |
| -savedir [path] | see below | Where worlds and the admin, ban and permitted lists are stored. |
| -logFile "path" | – | Writes the server log to this file. |
| -saveinterval 1800 | 1800 | Seconds between world saves (30 minutes). |
| -backups 4 | 4 | How many automatic backups to keep. The first is taken at the short interval, the rest at the long one: by default one backup 2 hours old and three 12 hours apart. |
| -backupshort 7200 | 7200 | Seconds before the first automatic backup (2 hours). |
| -backuplong 43200 | 43200 | Seconds between the later automatic backups (12 hours). |
| -crossplay | off | Runs the server on the crossplay backend (PlayFab), so players on every platform can join. Without it the Steam backend is used and only Steam players can see and join the server. |
| -instanceid "1" | – | Only for several servers on the same port from the same machine (same MAC address): give each a different value so each gets its own PlayFab ID. |
| -preset hard | – | Applies a world modifier preset. Valid values: Normal, Casual, Easy, Hard, Hardcore, Immersive, Hammer. |
| -modifier raids none | – | Sets one world modifier. Repeat it for each modifier you want to change. |
| -setkey nomap | – | Turns on one world modifier checkbox. Repeat it for each one. |
The values in the Default column are the ones the manual gives. The community wiki's example start lines also add -nographics -batchmode.
In our test, 1.0.16 started normally with a 3-character password and printed no warning. The server will not stop you from breaking the rules, so follow them yourself: 5 or more characters, and nothing that appears in the server name.
These three arguments set the same options as the World Modifiers screen in the game. A modifier is stored in the world as a "global key", and a key at 100 means normal. To see exactly what each value does, we started a 1.0.16 server with each value and read the keys it saved into the world.
| Modifier | Values | What the server stored |
|---|---|---|
| combat | veryeasy, easy, hard, veryhard |
veryeasy: player damage 125, enemy damage 50, enemy speed and size 90 easy: player damage 110, enemy damage 75, enemy speed and size 95 hard: player damage 85, enemy damage 150, enemy speed and size 110, enemy level-up rate 120 veryhard: player damage 70, enemy damage 200, enemy speed and size 120, enemy level-up rate 140 |
| deathpenalty | casual, veryeasy, easy, hard, hardcore |
casual: equipped items are kept, skill loss rate 15 veryeasy: skill loss rate 15 easy: skill loss rate 50 hard: unequipped items are deleted, skill loss rate 150 hardcore: all items are deleted and all skills reset |
| resources | muchless, less, more, muchmore, most | Resource rate 50, 75, 150, 200 and 300 (0.5x to 3x). |
| raids | none, muchless, less, more, muchmore | Event rate 0, 200, 150, 60 and 30. A higher event rate means more time between raids; 0 turns raids off. |
| portals | casual, hard, veryhard |
casual: every item can go through portals, ores and metals included hard: portals can't be used near an active boss veryhard: no portals at all |
The manual lists no "normal" value for a single modifier: normal is simply the absence of the key. To put everything back to normal, use -preset normal (below).
| Key | Effect |
|---|---|
| nobuildcost | Building costs no materials. |
| playerevents | Raids are chosen by each player's own progress rather than by which bosses have been killed on the server. |
| passivemobs | Enemies don't attack until provoked. |
| nomap | No map or minimap. |
| noportals | No portals. Not in the manual's list of -setkey values, but 1.0.16 accepted it and stored the key; it is the same key -modifier portals veryhard sets. |
| Preset | What it set in our test |
|---|---|
| normal | Clears every modifier back to normal. |
| casual | Combat very easy, death penalty casual, resources more, raids none, portals casual, plus passive enemies and player-based raids. |
| easy | Combat easy, raids less. |
| hard | Combat hard, raids more. |
| hardcore | Combat very hard, death penalty hardcore, raids more, portals hard, no map. |
| immersive | No map, no portals, and fire hazards (wood can catch fire and spread). |
| hammer | No build cost, passive enemies, raids none. |
Three rules, all of which we confirmed on 1.0.16:
-preset first. A preset overwrites every modifier set before it. Started with -modifier raids none -preset hard, the world ended up with Hard's raids, not none. Put the preset first and the modifiers after it.-preset normal, which cleared all of them.-preset Hardcore -modifier Combat VeryEasy worked the same as the lowercase form.
Without -savedir, the manual gives these default save folders:
| System | Default save folder |
|---|---|
| Windows | %USERPROFILE%\AppData\LocalLow\IronGate\Valheim |
| Linux | ~/.config/unity3d/IronGate/Valheim |
Inside it, worlds live in worlds_local, and adminlist.txt, bannedlist.txt and permittedlist.txt sit directly in the save folder. With -savedir, the same layout is created under the path you give.
Before 1.0, a world was two files in worlds_local: MyWorld.fwl (name and seed) and MyWorld.db (everything that changed). 1.0 introduced a new save system that, in Iron Gate's words, "splits world data across chunks" and is "designed to be resilient against mid-write failures". On 1.0.16 a world is a folder:
The number goes up as the server saves again. Copy or back up the whole MyWorld folder, never single files out of it.
An older world still in the two-file format is converted the first time 1.0 loads it. In our test, 1.0.16 loaded a world made by the last pre-1.0 server, and on its first save wrote the new OldWorld folder and moved the original pair aside as OldWorld_backup_ plus a date and time, .fwl and .db, in worlds_local. Keep that backup. The early 1.0 conversion lost the level and variant of items on item and armour stands; Iron Gate fixed it in patch 1.0.12, so a world converted on 1.0.12 or later converts correctly.
worlds_local: a folder with the world's name on 1.0, or the .fwl and .db pair for a world you haven't opened since 1.0.worlds_local. If the server already has a world with that name, move that one out of the way first.-world to the world's name, not its seed, and start the server.The world's modifiers travel with it: they are stored in the world, so you don't need to repeat them as arguments.
The server creates three text files in its save folder. Each starts with a comment line, and you add one player ID per line below it:
| File | What it does |
|---|---|
| adminlist.txt | Players who can use the admin console commands. |
| bannedlist.txt | Players who can't join. |
| permittedlist.txt | A whitelist. As soon as one player is on it, everyone else is banned. |
The manual gives the ID format as [Platform]_[User ID], case-sensitive, for example Steam_ followed by the player's 17-digit Steam ID. You can read a player's ID from the server log, or in game from the F2 panel. 1.0 also introduced IDs that start with V_; patch 1.0.12 fixed the ban list and permitted list so that both the new form and the old Steam_ form work.
An admin presses F5 in game to open the console. The admin commands the manual lists are kick [name], ban [name], unban [name] and banned (lists banned players).
Players connect straight to your server, so the ports have to be reachable from the internet. Forward UDP 2456 and 2457, or your -port and the port after it, to the server, and allow them in its firewall. In our test, 1.0.16 listened on the game port over UDP (IPv4 and IPv6) and on the next port over UDP (IPv4), and on nothing else that needs forwarding. The second port was open even with -public 0.
A comment in the shipped start_server.sh says to forward 2456–2458. The manual says 2456–2457, and in our test nothing listened on 2458. Forwarding it does no harm, but it isn't needed.
The server sends its traffic through a relay server, so the manual says no port forwarding is needed. Players can join with the server's public IP and port, with a join code, or from the server list. They can't join with a local (LAN) IP or a loopback address such as 127.0.0.1, which catches out people testing from the same house. Without -crossplay only Steam players can join, so anyone playing on another platform needs a crossplay server.
Valheim is built for 1 to 10 players on a server, and Iron Gate's 1.0 FAQ says that hasn't changed with 1.0.
Steam overwrites start_server.sh and start_headless_server.bat on every update, and your settings go with them. Edit a copy.
Under 5 characters, or contained in the server name (server "Vikings", password "Vikings123"). The server starts anyway, so nothing tells you. Pick a password that has nothing to do with the name.
The preset wipes the modifiers you set before it. Always preset first, then modifiers.
Modifiers are saved in the world. Start once with -preset normal to clear them, then add back the ones you want.
A crossplay server can't be reached by a local or loopback IP. Use the public IP and port, or the join code.
On 1.0, copy the whole world folder. For an old two-file world, the .fwl and .db belong together. And -world takes the world name, not the seed.
Adding one player to permittedlist.txt turns it into a whitelist and locks out everyone not on it, the admin included if they forgot themselves.
The manual says to stop the server with Ctrl+C. Closing the window may leave the server running in the background.
The dedicated server is a separate Steam app. When the game updates, update the server too; players can't join a server running a different version.
NodeMesh runs your Valheim server on your own PC or server, and its Config tab sets the start-line arguments for you as form fields: server name, world name, password, whether the server is listed, the difficulty preset, the five world modifiers (combat, death penalty, resources, raids, portals), the five checkboxes (no map, no portals, no build cost, passive enemies, player-based raids), the save interval, the number of backups and both backup intervals, and crossplay. NodeMesh puts -preset before the modifiers on the start line for you. You save, then restart from the same page.
NodeMesh starts the server with -savedir pointing at a save folder inside the server's own folder, so the world is in save/worlds_local and adminlist.txt, bannedlist.txt and permittedlist.txt are in save. Those lists are not Config-tab fields; edit them in the Files tab.
Host Valheim on your own hardware. NodeMesh's Config tab sets the arguments and world modifiers for you.
Start hosting with NodeMesh