A Valheim dedicated server VPS runs Iron Gate’s free Linux server (SteamCMD app 896660) around the clock, so your world stays online after the host logs off. Iron Gate publishes no CPU or RAM minimum; the community-maintained Docker project measured about 2.8 GB of RAM at idle and recommends 2 cores with 4 GB as a minimum and 4 fast cores with 8 GB as the target. The game is built for 1–10 players, a Steam-only server needs UDP ports 2456–2457, and crossplay is one launch flag.
This guide follows Iron Gate’s dedicated server guide and the files in the server build Steam serves today (depot dated September 25, 2026, the day Patch 1.0.16 shipped) on Ubuntu 24.04 LTS. It covers the Valheim 1.0 changes that older guides miss, a systemd unit that stops the server the way Iron Gate says to, and what one weekend of play costs compared with keeping the world online all month.
Key takeaways
- Valheim's dedicated server is a free Steam tool (app 896660) that SteamCMD downloads without a Steam account; Iron Gate publishes no RAM or CPU minimum, and the game is built for 1 to 10 players.
- The valheim-server-docker README measured about 2.8 GB of RAM at idle and recommends 2 cores with 4 GB as a minimum and 4 fast cores with 8 GB as the target, because one thread does most of the work.
- A Steam-backend server needs UDP 2456-2457; -crossplay routes traffic through a relay and is required for console, Microsoft Store and Mac App Store players, and the stock start script enables it.
- Valheim 1.0 (September 9, 2026) saves each world as a folder of chunk files instead of a .db and .fwl pair, so stop the server and back up the whole save folder.
- Run the server under systemd with KillSignal=SIGINT, Iron Gate's documented stop; a stopped VPS is still billed, so back up and delete a weekend world between sessions, while one left on never costs more than its monthly price in a billing period.
How much RAM and CPU does a Valheim dedicated server VPS need?
Iron Gate’s manual gives no CPU or RAM figure. The most detailed public numbers come from the README of the community-maintained valheim-server-docker project, which measured its own server. Every sizing figure we could source (checked October 2026):
| What | Figure | Source |
|---|---|---|
| Memory at idle, no players | About 2.8 GB RSS | valheim-server-docker README |
| CPU at idle | About 30% of one core on a 2.40 GHz Xeon E5-2620 v3 | valheim-server-docker README |
| CPU with players | 42% of one core with 1 player, 53% with 2 | valheim-server-docker README |
| Minimum | 2 cores, 4 GB RAM | valheim-server-docker README |
| Recommended | 4 high-clocked cores, 8 GB RAM | valheim-server-docker README |
| Players | 1 to 10 | Iron Gate 1.0 FAQ |
| Disk for the server files | About 2.2 GB (2,075 MB server depot + 111 MB Steamworks redistributable) | Steam depot manifests, September 25, 2026 build |
| Linux libraries | glibc 2.29 or newer; libatomic1, libpulse0, libpulse-dev | Iron Gate manual |
The same README found that one thread does about 70% of the work once players connect, so a few fast cores beat many slow ones. The 1.0 FAQ adds that the 1.0 optimizations will not help large builds much. Our reasoning, not a benchmark: load follows what players do more than how many log in, because exploring generates terrain and every piece of a large base is one more object to simulate and save.
Which plan fits your group?
| Group | Plan | vCPU / RAM / NVMe | Why |
|---|---|---|---|
| 2–4 friends, evening sessions | Quartz Q4 (quartz-4gb) | 2 shared / 4 GB / 80 GB | Meets the community minimum, with about 1.2 GB above the 2.8 GB idle figure for Ubuntu and growth. Watch memory as the world grows. |
| 5–10 friends: the default pick | Quartz Q8 (quartz-8gb) | 4 shared / 8 GB / 160 GB | Matches the recommended 4 cores and 8 GB. |
| Up to 10 players with large bases | Chrono C8 (chrono-8gb) | 2 dedicated / 8 GB / 100 GB | Same RAM. The busy main thread gets CPU time that no neighbor shares. |
Quartz Q8
KVM · 1 Gbps port · Istanbul · initial credit $5
- vCPU
- 4 shared
- RAM
- 8 GB
- NVMe
- 160 GB
- Traffic
- Istanbul: 5 TB/month
- Per hour$0.05/hour
- Per day (24 h)$1.20/day
- Monthly cap$25.00/month
Start on Quartz Q8 unless your group is small and explores little. If a 4 GB server is killed for lack of memory (the troubleshooting matrix shows the check), move the world to an 8 GB plan with the backup routine below. Full specs are on the Quartz Q8 plan page, and the Chrono C8 plan page lists the dedicated-core option for large bases.
What changed for dedicated servers in Valheim 1.0?
Valheim left Early Access with version 1.0 on September 9, 2026, and Iron Gate posted four patch notes (1.0.10 through 1.0.16) between September 11 and September 25. Its September 30 update says more bug-fix patches are coming, so plan for frequent server updates. These are the points that matter for a server owner:
- Worlds are folders now. The Patch 0.221.13 notes introduced the new save system that 1.0 shipped: “Instead of saving a world with the .db and .fwl files it’s now stored in folders and the world (.db) is split up in multiple files (chunks).” A world in the old format is backed up before its first conversion. Guides that tell you to copy one
.dband one.fwlfile describe pre-1.0 saves. - New player IDs. 1.0 uses new platform IDs such as
V_123456789. Patch 1.0.12 fixed the ban and permitted lists so that older IDs such asSteam_123456789work as well. - Same launch parameters. The September 25 server build still accepts every parameter in Iron Gate’s online guide (dated April 11, 2024), so the flags in this guide are current.
- Still 1–10 players, still no official mods. The 1.0 FAQ calls Valheim “a game for 1-10 players” and says there is no official mod support on PC and none on consoles.
- Crossplay on every platform. Valheim 1.0 is available on Steam, the Mac App Store, the Microsoft Store, Xbox, PlayStation 5 and Nintendo Switch 2, with crossplay between all of them (1.0 FAQ). A dedicated server lets non-Steam players in only when it runs with
-crossplay.
Warning: Keep a copy of any pre-1.0 world before its first start on 1.0. Iron Gate’s Patch 1.0.15 notes say items on item stands and armor stands lost their upgrade levels when worlds were converted to the new save format before Patch 1.0.12. One of the two workarounds Iron Gate gives is to restore the backup made at that first load, which loses any progress since.
Which ports does a Valheim server need? Steam vs crossplay
A server on the Steam backend needs UDP 2456 and 2457: Iron Gate’s manual says Valheim “uses the specified Port AND specified Port+1”. A crossplay server sends its traffic through a relay, so according to the same manual it “does not require Port Forwarding”. Three documents mention a third port, and they do not agree:
| Document | Ports | Context |
|---|---|---|
| Iron Gate manual and online guide | UDP 2456–2457 (the port and port+1) | Steam backend. Crossplay needs no port forwarding. |
start_ comment, current build | “ports 2456-2458” | A forwarding note above the launch line |
| valheim-server-docker README | Adds UDP 2458 when crossplay is on | “used for the crossplay backend communication”; its modding notes add that some mods need port+2 as well |
A VPS has a public IP address and no home router, so on a VPS “port forwarding” only means allowing the ports in the firewall. A single rule for UDP 2456 to 2458 covers all three documents. None of them lists a TCP port.
Should your server use the Steam or the crossplay backend?
| Steam backend (no flag) | Crossplay backend (-crossplay) | |
|---|---|---|
| Who can join | Steam players only: Windows, Linux, macOS, Steam Deck | Any platform: Steam, Microsoft Store, Mac App Store, Xbox, PS5, Switch 2 |
| Network path | Directly to your server | Through a PlayFab relay, per the manual |
| How players join | Join IP with YOUR_ | Public IP and port, a join code, or the server list |
| Join code | None | A new code each time the server restarts (Patch 0.211.7) |
| Mods | The BepInEx pack’s own start script launches without -crossplay | The Docker README warns that some mods misbehave with crossplay |
If every player owns Valheim on Steam, leave crossplay off. Add -crossplay as soon as one friend plays on a console or bought the game outside Steam, for example from the Microsoft Store or Mac App Store: the manual says that without the flag only Steam users can see and join the server. Note that the stock start_server.sh in the current build already passes -crossplay; the systemd unit below lets you choose.
How to install a Valheim dedicated server on Ubuntu 24.04
Run these steps over SSH as a non-root sudo user. On a fresh server, connect with an SSH key and work through the VPS security checklist first: key-only login, no root login and automatic updates.
1. Allow SSH and the game ports in the firewall
Allow SSH before you enable the firewall, or you lock yourself out. If you moved SSH to another port, allow that port instead of 22. The game rule uses the port-range form from the ufw manual, which requires a protocol:
sudo ufw allow 22/tcp
sudo ufw allow proto udp from any to any port 2456:2458 comment 'Valheim'
sudo ufw enable
sudo ufw status verbose
2. Install SteamCMD and the libraries Iron Gate lists
Valve’s SteamCMD page installs it from Ubuntu’s multiverse repository as a 32-bit package. The installer shows the Steam license, which you must accept with I AGREE:
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd
Then install the three packages from the manual’s “Required packages” list. The Dockerfile that Iron Gate ships in the server folder installs the same three, plus curl:
sudo apt install libatomic1 libpulse0 libpulse-dev
The manual sets a floor of GLIBC_2.29 and GLIBCXX_3.4.26 and offers docker_start_server.sh for older systems. Ubuntu 24.04 ships glibc 2.39 and Debian 12 ships 2.36, so neither needs the Docker route.
Debian 12: SteamCMD comes from the non-free component, and Valve’s page notes that add-apt-repository no longer works on Bookworm, so add non-free to your APT sources by hand. The three library packages have the same names.
3. Create a steam user
Valve warns against running SteamCMD as root. Create a steam user without sudo rights, then switch to it:
sudo useradd -m -s /bin/bash steam
sudo -iu steam
4. Download the server: app 896660
The Valheim Dedicated Server is a free Steam tool with app ID 896660, and it downloads without a Steam account or a game purchase. Valve’s docs put +force_install_dir before the login:
/usr/games/steamcmd +force_install_dir /home/steam/valheim +login anonymous +app_update 896660 validate +quit
For the September 25, 2026 build the download is about 1.9 GB and takes about 2.2 GB on disk. The app also installs the Steamworks SDK Redist, which places linux64/steamclient.so in the server folder. Type exit to return to your sudo user.
5. Read the stock start script once, then leave it alone
These are the working lines of /home/steam/valheim/start_server.sh in the current build (sudo cat shows the whole file):
export LD_LIBRARY_PATH=./linux64:$LD_LIBRARY_PATH
export SteamAppId=892970
# NOTE: Minimum password length is 5 characters & Password cant be in the server name.
# NOTE: You need to make sure the ports 2456-2458 is being forwarded to your server through your local router & firewall.
./valheim_server.x86_64 -name "My server" -port 2456 -world "Dedicated" -password "secret" -crossplay
- The server needs
LD_LIBRARY_PATHpointing atlinux64andSteamAppId=892970, which is the game’s app ID, not the server tool’s. - The password needs at least 5 characters and must not appear in the server name; keep it out of the world name too. A rejected password stops the server at start-up with
Error bad passwordin the log. - The default launch line enables crossplay.
Iron Gate’s manual says Steam resets this file on every update and recommends editing a copy. A systemd unit is a better copy: it holds your settings, survives updates and restarts the server when it crashes.
Run the Valheim server 24/7 with systemd
Keep the server name, world and password in a separate root-only file, so you can change them without touching the unit. Unit files in /etc/systemd/system are readable by every user, and an environment file with mode 600 is not. The password still appears on the server’s command line, where any user on the same VPS can read it with ps, so use a password you do not use anywhere else:
sudo install -m 600 /dev/null /etc/valheim.env
sudo nano /etc/valheim.env
VALHEIM_NAME=Viking Hall
VALHEIM_WORLD=Midgard
VALHEIM_PASSWORD=change-this-long-password
VALHEIM_ARGS=-public 0
VALHEIM_WORLDnames an existing world or creates a new one with that name.VALHEIM_PASSWORDneeds 5 or more characters and must not be part of the server name or the world name. Stick to letters, digits and hyphens so no character needs escaping.VALHEIM_ARGSholds optional flags.-public 0keeps a Steam-only server out of the server list; friends join with Join IP. For crossplay, setVALHEIM_ARGS=-crossplayinstead.
Now create /etc/systemd/system/valheim.service:
[Unit]
Description=Valheim dedicated server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/valheim
EnvironmentFile=/etc/valheim.env
ExecStartPre=-/usr/games/steamcmd +force_install_dir /home/steam/valheim +login anonymous +app_update 896660 +quit
ExecStart=/usr/bin/env LD_LIBRARY_PATH=/home/steam/valheim/linux64 SteamAppId=892970 \
/home/steam/valheim/valheim_server.x86_64 -name ${VALHEIM_NAME} -port 2456 \
-world ${VALHEIM_WORLD} -password ${VALHEIM_PASSWORD} $VALHEIM_ARGS
KillSignal=SIGINT
TimeoutStartSec=30min
TimeoutStopSec=120
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
KillSignal=SIGINTstops the server the way Iron Gate documents: the manual says to stop it with Ctrl+C, which sends SIGINT, and Patch 0.143.5 says “Use CTRL-C or SIGINT”. systemd sends SIGTERM unless told otherwise (systemd.kill).TimeoutStopSec=120gives the server two minutes to save before systemd kills it, the stop timeout the valheim-server-docker README uses.ExecStartPreupdates the server on every start, because Steam updates players’ games automatically and Iron Gate’s patch notes ask hosts to update before players join. The leading-lets the installed build start if Steam is unreachable, andTimeoutStartSec=30minleaves room for a large download.${VALHEIM_NAME}in braces stays one argument even with spaces, while the bare$VALHEIM_ARGSsplits into separate flags, per the systemd.service manual./usr/bin/envsets the two variables from the stock script for the server process only, not for SteamCMD.
For what each section of a unit file does and how to debug one, see our guide to creating a systemd service. Load and start the service, then follow its log:
sudo systemctl daemon-reload
sudo systemctl enable --now valheim.service
sudo journalctl -u valheim.service -f
The first start downloads any update and generates the world, which can take a few minutes. The manual says the server is ready when the log shows Game server connected. A crossplay server also logs its join code, which this command finds:
sudo journalctl -u valheim.service | grep -i "join code" | tail -n 1
In Valheim, open Join game and use Join IP with YOUR_SERVER_IP:2456, then enter the password.
Where are Valheim world saves on a Linux server?
The manual’s default save path on Linux is ~/.config/unity3d/IronGate/Valheim in the home folder of the user that runs the server. With this setup that is /home/steam/.config/unity3d/IronGate/Valheim, and the -savedir parameter moves all of it elsewhere.
| Item | Location inside the save folder | Source |
|---|---|---|
| Worlds | worlds_: in 1.0, one folder per world, split into chunk files; a pre-1.0 world is a .db plus .fwl pair | Patch 0.209.8, Patch 0.221.13 |
| Automatic backups | Separate backup folders (1.0 format) | Patch 0.221.13 |
| Admin, ban and permitted lists | adminlist., bannedlist., permittedlist. | Iron Gate manual |
| Legacy worlds | worlds/: the location before Patch 0.209.8, no longer written | Patch 0.209.8 |
Back up the whole Valheim folder instead of picking files by name: it holds every world, its backups and the three lists. In 1.0 the server rewrites only the chunks that changed and checks each save after writing it. The valheim-server-docker README warns that a copy taken during a save can capture a chunk index that points at chunk files the server has already replaced. Stopping the service first makes the copy consistent.
The server’s built-in backups
| Parameter | Default | What it does |
|---|---|---|
-saveinterval 1800 | 30 minutes | How often the world saves |
-backups 4 | 4 | How many automatic backups to keep: the first at the short interval, the rest at the long one |
-backupshort 7200 | 2 hours | Interval for the first automatic backup |
-backuplong 43200 | 12 hours | Interval between the later backups |
By default that means one backup about 2 hours old and three taken 12 hours apart. They sit on the same disk as the world, so deleting the VPS deletes them too. A world that stays online needs copies of its own: the nightly backup timer below makes them, and our VPS backup guide with restic sends copies off the server.
Admins, bans and the permitted list
Each list takes one Platform User ID per line in the format [Platform]_[User ID], which is case sensitive. Each player can read their ID in the game’s F2 panel, and the server log shows it too. Valheim 1.0 IDs look like V_123456789; since Patch 1.0.12 the ban and permitted lists accept older Steam_123456789 IDs as well.
sudo -u steam nano /home/steam/.config/unity3d/IronGate/Valheim/adminlist.txt
sudo systemctl restart valheim.service
The manual does not say whether the server rereads the lists while it runs, so restart after you edit one. Admins open the console with F5 to use Kick, Ban, Unban and Banned. The manual’s bold warning applies to permittedlist.txt: adding one person to it bans everyone else, so add every player’s ID, starting with your own.
What does a Valheim server cost: one weekend or always on?
The server software is free, so the cost is the hours the VPS exists. A weekend from Friday 18:00 to Sunday 23:00 is 53 hours, the same weekend our Minecraft server cost guide uses. Billing is by the hour: every hour a server exists is charged at the plan’s hourly rate. The price tapes and cost tables on this site count every started hour as a full hour, so they show the most a duration can cost; the cost calculator charges a partial hour to the nearest cent, as the bill does. Every server is billed by the hour: the plan’s hourly rate is deducted from the server’s prepaid balance for every hour it exists, powered on or off, until you delete it.
| Duration | Hours on the meter | Cost $0.05 | Note |
|---|---|---|---|
| 4 hours | 4 | $0.20 | |
| 8 hours | 8 | $0.40 | |
| 1 day | 24 | $1.20 | |
| 2 days 5 hours | 53 | $2.65 | |
| 7 days | 168 | $8.40 | |
| 30 days | 720 | $25.00 | Capped at the monthly price |
The same sessions on the three plans from the sizing table:
| Session | Quartz Q4 (4 GB) | Quartz Q8 (8 GB) | Chrono C8 (8 GB, dedicated) |
|---|---|---|---|
| One 4-hour evening | $0.12 | $0.20 | $0.28 |
| One weekend (53 hours) | $1.59 | $2.65 | $3.71 |
| A full week | $5.04 | $8.40 | $11.76 |
| Always on, one month | $15.00 | $25.00 | $35.00 |
There is no billing mode to choose up front. A world your group visits most evenings can simply stay online: a server you leave on is a monthly VPS with an automatic cap, so Quartz Q8 never costs more than $25.00 in a billing period (one month from your order date), with no contract. Renting a daily VPS for a long Saturday or a three-day weekend is the same hourly billing counted in 24-hour days, $1.20/day on Quartz Q8. Every plan is on the pricing page, and the VPS cost calculator prices your own schedule.
How you pay: your account runs on prepaid credit with a minimum top-up of $5, and each server starts with an initial credit, paid at checkout and used for that server’s hours (hourly VPS billing explained walks through it). When a server’s balance falls to about one day of usage, a top-up invoice is issued. Pay it before game night: a server whose balance reaches zero is suspended, and under the Terms a suspended server that stays unpaid for 7 days is deleted with its data, world included.
Stopped is not free: A stopped server is still billed, because its vCPU, memory, disk and IP addresses stay reserved for you; only deleting the server stops billing. That rule is common. In the Hourly VPS Fine-Print Index of 20 providers (checked October 2, 2026), 12 bill a stopped server in full, 5 charge only for its storage and 3 depend on the setup. Which providers bill stopped servers has the details.
Pick the data center closest to most players. The guide to choosing a VPS location explains the latency trade-off, and HourlyVPS deploys in Istanbul today, with New York coming soon. Istanbul plans include the monthly traffic allowance listed for each plan, prorated for a server that exists for part of a billing period. For the same weekend math on another survival game, see the Palworld dedicated server guide. For VPS prices across 20 providers, see how much a VPS costs.
Weekend world or always-on world?
| How your group plays | Setup | Why |
|---|---|---|
| Weekends or game nights, then a break | Quartz Q8 by the hour; back up and delete between sessions | A stopped server is still billed; a deleted one is not |
| Online most evenings | Quartz Q8, left on, with the nightly backup | Charges stop at the monthly price for the rest of each billing period |
| 10 players and large bases, for weeks | Chrono C8, left on | Dedicated cores for the single busy thread; the monthly cap limits the bill |
| You want mods without touching Linux | A managed Valheim host | A web panel replaces SSH, and the BepInEx pack’s README lists hosts that install the loader automatically |
Back up, move and restore a Valheim world
For weekend-only play the routine is short: on Sunday, stop the server so no chunk is mid-write, archive the save folder, pull the archive to your own computer and check it, then delete the server in the portal. Only the delete stops billing. The checklist before you delete a VPS covers what else to copy off and revoke first.
On the server:
sudo systemctl stop valheim.service
sudo tar -czf ~/valheim-$(date +%F).tar.gz -C /home/steam/.config/unity3d/IronGate Valheim
sudo chown "$USER": ~/valheim-*.tar.gz
On your own computer:
mkdir -p valheim-backups
rsync -avP 'you@YOUR_SERVER_IP:valheim-*.tar.gz' valheim-backups/
for f in valheim-backups/valheim-*.tar.gz; do tar -tzf "$f" > /dev/null && echo "OK $f"; done
Without rsync on Windows, scp you@YOUR_SERVER_IP:valheim-*.tar.gz . does the same job. Next session, deploy a new server and repeat install steps 1 to 4, the environment file and the unit. Enable the unit with sudo systemctl enable valheim.service, without --now, so it does not create a fresh world before the restore. Upload the archive with rsync -avP valheim-backups/valheim-YYYY-MM-DD.tar.gz you@NEW_SERVER_IP:, then restore it on the server:
sudo -u steam mkdir -p /home/steam/.config/unity3d/IronGate
sudo tar -xzf ~/valheim-YYYY-MM-DD.tar.gz -C /home/steam/.config/unity3d/IronGate
sudo chown -R steam:steam /home/steam/.config/unity3d/IronGate/Valheim
sudo systemctl start valheim.service
Keep VALHEIM_WORLD the same as before. A new server usually has a new IP address, so send your friends the new IP:2456; on crossplay, the join code changes on every restart anyway. Restore once as a test before you rely on this routine.
Always-on world: a nightly backup timer
A world that runs all month never gets the Sunday routine, so let systemd run it. This timer stops the server at 05:00 server time (timedatectl shows the time zone), archives the save folder, deletes archives older than 14 days and starts the server again, which also installs any update through ExecStartPre. Pick an hour when nobody plays, because the server is offline while the archive is written. First the script:
sudo nano /usr/local/sbin/valheim-backup
#!/bin/sh
set -e
mkdir -p /var/backups/valheim
tar -czf "/var/backups/valheim/valheim-$(date +%F).tar.gz" -C /home/steam/.config/unity3d/IronGate Valheim
find /var/backups/valheim -name 'valheim-*.tar.gz' -mtime +13 -delete
Make it executable with sudo chmod 755 /usr/local/sbin/valheim-backup, then create /etc/systemd/system/valheim-backup.service:
[Unit]
Description=Nightly Valheim world backup
[Service]
Type=oneshot
ExecStartPre=/usr/bin/systemctl stop valheim.service
ExecStart=/usr/local/sbin/valheim-backup
ExecStopPost=/usr/bin/systemctl start --no-block valheim.service
And /etc/systemd/system/valheim-backup.timer:
[Unit]
Description=Run the Valheim world backup every night
[Timer]
OnCalendar=*-*-* 05:00:00
Persistent=true
[Install]
WantedBy=timers.target
ExecStopPostruns even when the backup fails (systemd.service), so the server always comes back, and--no-blockreturns at once instead of waiting for an update download (systemctl). Aoneshotservice has no start timeout by default, so a slow save does not fail the job.Persistent=trueruns a backup missed while the VPS was down at the next boot (systemd.timer). For moreOnCalendarpatterns, see systemd timers instead of cron.
Enable the timer, then run one backup now as a test (it stops the server while it runs):
sudo systemctl daemon-reload
sudo systemctl enable --now valheim-backup.timer
sudo systemctl start valheim-backup.service
ls -lh /var/backups/valheim
The archives still live on the VPS. Pull them to your computer now and then with the rsync command above, using the remote path /var/backups/valheim/valheim-*.tar.gz, so a lost or deleted server does not take the world with it.
Move a world from your PC to the server
On Windows, the manual’s default save path is %USERPROFILE%/AppData/LocalLow/IronGate/Valheim, and local worlds sit in its worlds_local folder. A world kept in Steam Cloud is stored under Steam’s userdata folder instead (Patch 0.209.8). In 1.0 a world is a set of chunk files and folders whose exact layout Iron Gate does not document, so copy the whole worlds_local folder rather than picking files. Upload it to your home directory on the server with scp -r or rsync. Then stop the service, copy the folder into place and set VALHEIM_WORLD in /etc/valheim.env to the world’s name as the game’s world list shows it, letter case included. Do this before the server has ever started with that world name; otherwise it has already created a fresh world under the same name.
sudo systemctl stop valheim.service
sudo -u steam mkdir -p /home/steam/.config/unity3d/IronGate/Valheim
sudo cp -r ~/worlds_local /home/steam/.config/unity3d/IronGate/Valheim/
sudo chown -R steam:steam /home/steam/.config/unity3d/IronGate/Valheim/worlds_local
sudo nano /etc/valheim.env
sudo systemctl start valheim.service
A pre-1.0 world (a .db and .fwl pair) is converted on its first load, and Iron Gate’s notes say a backup is made first.
Mods on a Linux Valheim server: BepInEx, with caution
Iron Gate has no official mod support. Its statement on mods says using them is at your own risk and that compatibility with newer versions is not guaranteed. Consoles have no mod support, so a server whose mods every player must install is PC-only in practice, and the valheim-server-docker README warns that some mods misbehave with crossplay.
The community’s loader is BepInExPack_Valheim on Thunderstore: version 5.4.2351 (September 24, 2026), built on BepInEx 5.4.23.5 and maintained by community members, not by Iron Gate. Its Linux server instructions are to copy the pack’s contents into the server folder and launch with its start_server_bepinex.sh, which sets five environment variables and then execs the server. Under systemd you set the same variables in an override. Back up the save folder first, then copy the pack in as the steam user (check the Thunderstore page for a newer version number):
sudo apt install unzip
sudo -iu steam
curl -L -o bepinex.zip https://thunderstore.io/package/download/denikson/BepInExPack_Valheim/5.4.2351/
unzip bepinex.zip -d bepinex
cp -r bepinex/BepInExPack_Valheim/. /home/steam/valheim/
exit
Then point the service at the loader. As your sudo user, open an override:
sudo systemctl edit valheim.service
[Service]
ExecStart=
ExecStart=/usr/bin/env DOORSTOP_ENABLED=1 \
DOORSTOP_TARGET_ASSEMBLY=/home/steam/valheim/BepInEx/core/BepInEx.Preloader.dll \
LD_LIBRARY_PATH=/home/steam/valheim/doorstop_libs:/home/steam/valheim/linux64 \
LD_PRELOAD=libdoorstop_x64.so SteamAppId=892970 \
/home/steam/valheim/valheim_server.x86_64 -name ${VALHEIM_NAME} -port 2456 \
-world ${VALHEIM_WORLD} -password ${VALHEIM_PASSWORD} $VALHEIM_ARGS
The empty ExecStart= clears the original line, which systemd requires before a new one. The values match start_server_bepinex.sh in pack 5.4.2351, so compare them with the script in your download. After sudo systemctl restart valheim.service, the pack’s README says BepInEx bootstrap messages appear in the terminal, which under systemd means the journal. Install only mods whose page says they support the current Valheim version, and follow each mod’s notes on whether players need it too.
Updates break mods. The unit updates Valheim on every start, and a game patch can break a mod until its author updates it. If you run mods, you may prefer to remove the ExecStartPre line and update on purpose once your mods support the new version. The trade-off: players’ games update automatically, so they may be unable to join until the server catches up.
Valheim server troubleshooting matrix
| Symptom | Likely cause | Fix |
|---|---|---|
Server exits right after it starts; the log shows Error bad password | Password shorter than 5 characters, or part of the server or world name | Change VALHEIM_, then restart |
| Steam friends time out when joining | UDP 2456–2457 not allowed, or a different -port | sudo ufw status must list 2456:; join with IP: |
| Console, Microsoft Store or Mac App Store friends cannot join | Server runs on the Steam backend | Set VALHEIM_, then restart |
| Yesterday’s join code does not work | Join codes change on every restart | Read the new code from the journal, or join by IP: |
| Players get a version error after a game patch | Server is older than the players’ games | sudo systemctl restart valheim. updates it first |
| A fresh, empty world appeared | VALHEIM_ does not match the world’s name | Stop the service, fix the name (case included), start again |
| Only one player can join; everyone else is refused | permittedlist. has entries | Add every player’s ID, or empty the file |
| Admin commands do nothing | Wrong ID format or case in adminlist. | Copy the ID from the F2 panel or the log, then restart |
| Server killed after hours of play | Out of memory | Check sudo journalctl -k | grep -i "out of memory"; move the world to an 8 GB plan |
| Lag and rubber-banding near large bases | The busy main thread is short of CPU time | top -H -u steam shows one thread near 100%; consider dedicated vCPU (Chrono C8) |
| Server offline; the portal shows it suspended | The server’s balance reached zero | Pay the top-up invoice; an unpaid suspended server is deleted after 7 days |
| Mods stopped loading after an update | Mod not yet updated for the new Valheim version | Remove the mod or wait for its update; restore your backup if the world was affected |
Most of these show up in the log first. sudo journalctl -u valheim.service -n 100 prints the last 100 lines.
Deploy this setup
Host a Valheim world for the weekend
Quartz Q8 · 4 shared vCPU · 8 GB RAM · 160 GB NVMe · Istanbul
- Per hour$0.05/hourFor this job
- Per day (24 h)$1.20/day
- Monthly cap$25.00/month
Starts with a $5 initial credit, which goes into the server’s balance and pays for its hours.
Billed by the hour, never more than $25.00 per billing period. Delete the server and billing stops.



