How to set up a Valheim server from scratch
Full setup walkthrough for a Valheim dedicated server: deploy via SteamCMD, configure the start_server.sh / start_headless_server.bat launch parameters, set up adminlist.txt and banlist.txt, install BepInEx and Jotunn for mods, add Thunderstore modpacks (ValheimPlus Revamp, EpicLoot), enable crossplay with Xbox via PlayFab, and fix the common errors.
1. What you need first
- An active Valheim plan on Fatality Servers. See our Valheim hosting plans.
- A Steam copy of Valheim (or Xbox Game Pass copy) for each player.
- Enough RAM โ Valheim's dedicated server is fairly light but grows with world file size. 4 GB for a fresh vanilla 4-player world; 8-12 GB for a 10-player world with extensive base building; 16+ GB for a heavily modded Thunderstore stack.
- A basic SFTP client (FileZilla, WinSCP) โ Valheim is entirely file-based for config and mods.
- The player Steam64 IDs of anyone you want to make admin โ find at steamid.io.
Sizing note: Valheim perf is dominated by world state โ how many structures, zones loaded, and tamed creatures exist. A 200-day vanilla 10-player world typically lives in 3-5 GB RAM. Add BepInEx + 30 Thunderstore mods and you're closer to 8 GB. Size up for the six-month mark, not wipe day.
2. Deploy the server (1-click)
Our Valheim template runs SteamCMD to pull the dedicated server (Steam App ID 896660), writes a starter start_server.sh with your configured world name and password, generates the world, and opens UDP 2456-2458 on your plan's IP.
-
Pick the Valheim template at checkout
On the Valheim hosting page, pick a plan sized for your slot count. Vanilla caps at 10 players; community mods like ValheimMoreSlots push higher. Pick the location closest to your Viking band.
-
Wait for SteamCMD
Server binary is ~1.5 GB. First install takes 2-4 minutes. World generation on first boot adds another 60-90 seconds as the terrain is seeded.
-
Confirm the server is listening
[...] Game server connected Local server is running at port 2456. Steam manager on port 2457 [...] [Dedicated server] Available on the server list. Starting to listen on port 2456 Server 'MyValheimServer' has been registered with the community hub.Once you see Server has been registered with the community hub, your server appears in the in-game Community Servers list within 2-5 minutes.
3. File layout & where things go
/server-root/
โโโ valheim_server.x86_64 โ Linux server binary
โโโ valheim_server.exe โ Windows server binary
โโโ start_server.sh โ Linux launcher script (edit this)
โโโ start_headless_server.bat โ Windows launcher script
โโโ unstripped_corlib/ โ .NET corlib (don't touch)
โโโ valheim_server_Data/ โ Unity engine assets (don't touch)
โโโ BepInEx/ โ (later) mod loader install root
โ โโโ core/
โ โโโ plugins/ โ drop .dll plugins here
โ โโโ config/ โ per-plugin config files
โ โโโ LogOutput.log โ mod load diagnostics
โโโ doorstop_libs/ โ BepInEx Unity injection (don't touch)
โโโ run_bepinex.sh โ Linux BepInEx launcher (replaces start_server.sh)
โโโ doorstop_config.ini โ BepInEx injection config
~/.config/unity3d/IronGate/Valheim/
โโโ worlds_local/ โ world save location (on server host)
โโโ MyWorld.db โ world state (structures, items, creatures)
โโโ MyWorld.db.old โ auto-backup on each save
โโโ MyWorld.fwl โ world seed metadata
โโโ adminlist.txt โ Steam64 IDs granted admin
โโโ banlist.txt โ Steam64 IDs banned
โโโ permittedlist.txt โ whitelist (if using permitted-only mode)
World files come in pairs. A world is .db (state) + .fwl (seed/meta). Both must have the same filename โ MyWorld.db and MyWorld.fwl โ or the server fails to load. When migrating a world, always copy both files.
4. Launch parameters
Valheim reads its settings from the launch command line, not a config file. Edit start_server.sh (Linux) or start_headless_server.bat (Windows). A typical launch line:
./valheim_server.x86_64 \
-name "My Valheim Server" \
-port 2456 \
-world "MyWorld" \
-password "change-me-min-5-chars" \
-public 1 \
-crossplay \
-savedir "/home/container/.config/unity3d/IronGate/Valheim" \
-logFile "/home/container/logs/valheim-server.log" \
-nographics -batchmode
Parameters you should know:
-nameโ server browser name, shown in the Community tab. 64 chars max.-portโ game port. Default 2456; Valheim also uses2457(Steam query) and2458(meta). Don't change unless you know what you're doing.-worldโ the world name. Must match the.db/.fwlfilename without extension.-passwordโ join password. Minimum 5 characters; must NOT appear in the server name; Valheim rejects weak/matching passwords at startup.-public 1โ list on Valheim's community server browser.-public 0hides it (still joinable by direct IP).-crossplayโ enable Xbox / PlayFab crossplay. Required for Game Pass players to find your server.-savedirโ override save location. Useful for keeping worlds on a separate volume.-nographics -batchmodeโ headless server mode. Always include both on Linux dedicated.
The password must not appear in the server name. This is a Valheim-enforced rule that prevents hints. If you set -name "MySecretServer" -password "Secret", the server refuses to start. Same for short (<5 char) passwords. Check the console if the server won't boot.
5. Admins, banlist & permitted list
Three plain-text files in ~/.config/unity3d/IronGate/Valheim/worlds_local/ (or wherever -savedir points) control access:
5.1 adminlist.txt โ grant admin
# One Steam64 ID per line. Lines starting with # are ignored.
76561198012345678
76561199876543210
Admins get the in-game F5 console with commands like ban, kick, save, lodbias, ping, plus cheat-style commands (spawn, god, fly) when devcommands is enabled.
5.2 banlist.txt โ ban by Steam64
76561198000000000
76561198111111111
Banned players can't join. Edits are picked up without a restart โ admins can also ban <steamid> from the in-game console, which appends to the file automatically.
5.3 permittedlist.txt โ whitelist mode (optional)
76561198012345678
76561199876543210
If permittedlist.txt exists AND has at least one entry, ONLY those Steam64s can join (regardless of password). Delete or empty the file to disable whitelist mode.
Use the in-game console to manage admins live. Instead of SFTP-editing adminlist.txt and reloading, press F5 in-game as an existing admin and run admin <steamid> / removeadmin <steamid>. Changes are written to disk immediately and take effect the moment the target reconnects.
6. Installing BepInEx (mod loader)
Valheim mods run through BepInEx, the standard Unity mod-loader. BepInEx hooks the Unity runtime before game code loads and gives plugins a way to patch game code at runtime.
-
Download the Valheim-specific BepInEx build
Don't grab the generic BepInEx โ use the Valheim-tuned build from Thunderstore:
- denikson-BepInExPack_Valheim on Thunderstore (valheim.thunderstore.io) โ this is the package 99% of Valheim mods expect.
-
Extract into the server root
The ZIP contains
BepInEx/,doorstop_libs/,doorstop_config.ini, and eitherrun_bepinex.sh(Linux) orwinhttp.dll(Windows). Upload them to the server root alongsidevalheim_server.x86_64. -
Change the startup script to use BepInEx
Linux: launch via
run_bepinex.shinstead ofstart_server.sh. Our panel has a toggle โ flip it and the launcher swaps automatically.Windows: BepInEx auto-injects via
winhttp.dllwhen the server starts โ no script change needed. -
Restart and check the log
Console should show:
[Info : BepInEx] BepInEx 5.4.22.0 - valheim_server (2026/04/18 12:34:56) [Info : BepInEx] Built-in configuration changed to: ... [Info : BepInEx] Loaded 0 patcher method(s) from [...] [Info : BepInEx] Loaded 0 plugin(s) from [...]Zero plugins is expected at this stage โ we'll add them next.
7. Installing Jotunn & plugins
Jotunn ("The Viking" in Icelandic) is the Valheim modding API โ the equivalent of Bukkit for Minecraft or SMAPI for Stardew. Most modern Valheim mods depend on Jotunn, so install it first.
-
Download Jotunn from Thunderstore
ValheimModding/Jotunn on Thunderstore. The ZIP contains
plugins/Jotunn/Jotunn.dll. -
Drop into
BepInEx/plugins/Upload the Jotunn folder into
BepInEx/plugins/on the server. Final path:BepInEx/plugins/Jotunn/Jotunn.dll. -
Restart & verify load
Log line:
[Info : BepInEx] Loading [Jotunn 2.X.X]. If you see it, Jotunn is live and you can install any Jotunn-based plugin the same way โ extract its ZIP, drop the.dllintoBepInEx/plugins/, restart.
Popular server-side plugins
- ValheimPlus Revamp โ community fork of the original V+. Configurable stack sizes, build limits, smelting speed, more.
- EpicLoot โ Diablo-style magic loot with rarities, sets, enchantments.
- World Advancement & Progression โ smooth biome unlocks; great for RP servers.
- ServerCharacters โ force character state to be stored on the server (for RP / anti-cheat).
- Custom Raids โ add new events to your world.
- AzuAutoStore โ auto-sort items into chests from a distance; popular QoL mod.
Some mods are client-only, some are server-only, many are both. Check each mod's Thunderstore page โ look for the "Client" / "Server" / "Both" tag. Installing a client-only cosmetic mod on the server does nothing but add log noise; installing a server-only balance mod on the client can cause desync. Match the scope.
8. Thunderstore modpacks
Large Valheim modpacks (50-200 mods) are best installed via r2modman or Thunderstore Mod Manager on the client side. For the server side:
-
Use r2modman's server export
r2modman has a Create server code button that packages your client profile into a single downloadable ZIP. Extract into the server's root folder โ it includes BepInEx, plugins, and configs in the correct layout.
-
Or match mod-by-mod via SFTP
For fine-grained control, upload each mod's files from
BepInEx/plugins/<ModName>/individually. Any mod that ships assets (textures, models) belongs alongside its.dllin the same folder. -
Sync the
config/folderMany mods expose in-game configuration that writes to
BepInEx/config/<modname>.cfg. If you've tuned values on your client profile, SFTP the matching config files up to the server for consistent behaviour.
Popular community modpacks:
- Monsterlabz โ adventure + content expansion stack (~80 mods)
- OdinPlus+ โ feature-rich survival overhaul (~100 mods)
- Valheim Enhanced โ QoL-focused pack, cleaner for vanilla-plus feel
9. Crossplay with Xbox (PlayFab)
Iron Gate uses PlayFab for Xbox Game Pass crossplay. On the server side, enabling crossplay is one flag.
-
Add
-crossplayto the launch lineIf it isn't already there, append
-crossplaytostart_server.sh(or the Startup tab on our panel). Restart. -
Xbox players join via "Join by Code"
Crossplay servers don't show in the regular Community Servers list on Xbox โ they need the 6-character crossplay code that appears in your Steam client's server list. Share that code with your Xbox friends.
-
Pin the server to PC friends
On the Steam client, after joining once the server is favorited and reconnects automatically. Xbox players need the code each session unless they use "Join via Friends List."
Crossplay limits some mods. Any mod that changes network packets or adds client-side assets (cosmetic overhaul, new biomes, new enemies) breaks Xbox clients. Safe mods for crossplay servers: tuning tweaks (stack sizes, decay rate, XP), server-only balance mods, admin tools. Unsafe: EpicLoot, content-expansion mods, anything with new prefabs.
10. Connect and test
-
Launch Valheim on your PC
From the main menu โ Start Game โ Join Game.
-
Find via Community
The Community tab shows all
-public 1servers. Type your server name in the filter. Shows up 2-5 minutes after first boot. -
Or use Join IP
At the bottom of the Join Game screen: Join IP โ enter
YOUR-SERVER-IP:2456, then the password. -
Smoke-test admin
Press
F5in-game. If the console opens, typehelpfor the command list. Tryping(latency check) andlodbias. Admin commands only work if your Steam64 is inadminlist.txt.
11. Common errors and fixes
Server starts but doesn't show in Community list
-public 0or missing-public 1โ server is hidden from the public list (direct IP still works)- Password fails Valheim's rules: needs to be 5+ chars and NOT appear in the server name
- UDP ports 2456-2458 blocked โ check panel firewall
- Wait 2-5 minutes for Iron Gate's master list to index new servers
"The server is using an incompatible version"
Client/server Valheim version mismatch. Fixes:
- Update the server via the panel's Update button (SteamCMD refresh)
- If the client is ahead of the server (e.g. you updated client during a PTR), roll back the client to the release branch in Steam โ Valheim โ Betas
World won't load: "Invalid save file"
- The
.dband.fwldon't share the same filename โ check for typos - Corrupt save โ use the auto-backup: rename
MyWorld.db.oldtoMyWorld.db, restart - World was created on a newer Valheim version โ update the server
- Last resort: rollback from the panel's snapshot tab
BepInEx isn't loading
- Linux: you're still starting via
start_server.shinstead ofrun_bepinex.sh. Switch the launcher. - Windows:
winhttp.dllisn't in the server root โ re-extract the BepInEx pack. - Check
BepInEx/LogOutput.logfor exceptions โ usually a .NET version mismatch or missingdoorstopfiles.
Plugin loads but desyncs clients
- Mod is marked "server+client" on Thunderstore โ clients need to install it too
- Mod version mismatch between server and clients โ Thunderstore pins versions; pick a specific build for everyone
- Mod conflict โ two mods patching the same prefab. Check
LogOutput.logfor Harmony-patch collision warnings.
Server CPU spikes / TPS drops
- Too many loaded zones from players spread across the map โ Valheim keeps zones alive while a player is near them. No fix other than denser play or fewer players.
- Item spam from mod-added auto-builders or drop-all-on-death plugins โ inspect the world folder for items near origin (
0,0,0) where old player deaths pile up. - Upgrade to a higher-clock CPU plan โ Valheim is single-thread bound, clock speed wins.
Xbox crossplay players can't find the server
-crossplaymissing from launch line โ add, restart- Xbox client needs the crossplay code (6-char string from Steam server entry), not the IP
- Server has a non-crossplay-safe mod loaded that breaks Xbox protocol โ disable content / network mods, restart
"Failed to connect: version difference"
Often a mod reporting a mismatched version handshake. Have the affected client unsubscribe + resubscribe to the mod in r2modman or reinstall the modpack.
World/backup recovery
Every save writes MyWorld.db and keeps the previous save as MyWorld.db.old. Our panel adds another layer: 15-minute rolling snapshots of the full worlds_local/ folder with 30-day retention. Rollback from the dashboard in one click.
Stuck on something specific? Email support with your server IP, the last 200 lines of valheim-server.log (or BepInEx/LogOutput.log if the issue is mod-related), and your start_server.sh โ we'll usually have an answer within the hour.