Valheim ยท Server setup

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.

  1. 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.

  2. 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.

  3. 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 uses 2457 (Steam query) and 2458 (meta). Don't change unless you know what you're doing.
  • -world โ€” the world name. Must match the .db/.fwl filename 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 0 hides 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.

  1. 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.
  2. Extract into the server root

    The ZIP contains BepInEx/, doorstop_libs/, doorstop_config.ini, and either run_bepinex.sh (Linux) or winhttp.dll (Windows). Upload them to the server root alongside valheim_server.x86_64.

  3. Change the startup script to use BepInEx

    Linux: launch via run_bepinex.sh instead of start_server.sh. Our panel has a toggle โ€” flip it and the launcher swaps automatically.

    Windows: BepInEx auto-injects via winhttp.dll when the server starts โ€” no script change needed.

  4. 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.

  1. Download Jotunn from Thunderstore

    ValheimModding/Jotunn on Thunderstore. The ZIP contains plugins/Jotunn/Jotunn.dll.

  2. Drop into BepInEx/plugins/

    Upload the Jotunn folder into BepInEx/plugins/ on the server. Final path: BepInEx/plugins/Jotunn/Jotunn.dll.

  3. 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 .dll into BepInEx/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:

  1. 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.

  2. 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 .dll in the same folder.

  3. Sync the config/ folder

    Many 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.

  1. Add -crossplay to the launch line

    If it isn't already there, append -crossplay to start_server.sh (or the Startup tab on our panel). Restart.

  2. 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.

  3. 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

  1. Launch Valheim on your PC

    From the main menu โ†’ Start Game โ†’ Join Game.

  2. Find via Community

    The Community tab shows all -public 1 servers. Type your server name in the filter. Shows up 2-5 minutes after first boot.

  3. Or use Join IP

    At the bottom of the Join Game screen: Join IP โ†’ enter YOUR-SERVER-IP:2456, then the password.

  4. Smoke-test admin

    Press F5 in-game. If the console opens, type help for the command list. Try ping (latency check) and lodbias. Admin commands only work if your Steam64 is in adminlist.txt.

11. Common errors and fixes

Server starts but doesn't show in Community list

  • -public 0 or 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 .db and .fwl don't share the same filename โ€” check for typos
  • Corrupt save โ€” use the auto-backup: rename MyWorld.db.old to MyWorld.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.sh instead of run_bepinex.sh. Switch the launcher.
  • Windows: winhttp.dll isn't in the server root โ€” re-extract the BepInEx pack.
  • Check BepInEx/LogOutput.log for exceptions โ€” usually a .NET version mismatch or missing doorstop files.

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.log for 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

  • -crossplay missing 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.