Menu
 

Migrating Vintage Story Server from Windows to Linux โ€” Vintage Story Wiki

Migrating a Vintage Story Dedicated Server from Windows to Linux

A recurring question on r/VintageStory: "I've been running my server on Windows for a year. I want to move to Linux for stability/cost/cron-jobs/etc. How do I migrate without losing my world?" The good news: Vintage Story uses cross-platform save files (.vcdbs is a SQLite-backed binary), so the world data transfers cleanly. The not-so-good news: file path conventions, .NET runtime setup, and some mod compatibility quirks need handling. This page walks through the full migration.

Why migrate to Linux

Common reasons admins cite:

  • Cost: Linux VPS plans are typically 30-50% cheaper than equivalent Windows plans (no OS licensing).
  • Memory efficiency: Linux runs more lean for the same hardware. A Vintage Story server typically uses 200-500 MB less RAM on Linux than Windows for the same workload.
  • Cron jobs: Scheduling backups, restarts, and announcements is much easier with bash + cron than Task Scheduler.
  • Uptime stability: Linux can run for months between reboots; Windows benefits from monthly restarts for updates.
  • SSH automation: Easier remote management, log tailing, and scripted maintenance.

Pre-migration audit (do this BEFORE you start)

  1. Note your current Vintage Story version. The target Linux server must run the same version (Windows save loaded by a different version Linux server may convert/upgrade the save format).
  2. List your installed mods. Get each mod's exact filename and version.
  3. Identify your serverconfig.json file and any custom playermods.json or other settings.
  4. Take a fresh backup of VintagestoryData/Saves/ โ€” both the .vcdbs files and any associated playerdata.
  5. Note your port forwarding rules (42420 TCP+UDP is the default).

Step 1 โ€” Provision a Linux box with .NET 7

Most modern Ubuntu 22.04 LTS or Debian 12 installations support .NET 7 directly from the official repository:

# Ubuntu 22.04 / Debian 12
sudo apt update
sudo apt install -y aspnetcore-runtime-7.0
dotnet --version  # Verify: should show 7.0.x

For older distros (Ubuntu 20.04, etc.) you'll need to add Microsoft's package repository first. See Microsoft's .NET on Linux docs for the per-distro setup.

Step 2 โ€” Download the Linux Vintage Story server

From your Vintage Story account downloads page, get the Linux server binary (vs_server_linux-x64_X.X.X.tar.gz). It must be the same version as your Windows install.

mkdir -p ~/vintage-story-server
cd ~/vintage-story-server
wget https://cdn.vintagestory.at/gamefiles/vs_server_linux-x64_1.22.2.tar.gz
tar -xzf vs_server_linux-x64_*.tar.gz
ls VintagestoryServer.dll  # Verify extraction

Step 3 โ€” Transfer save and mods from Windows

The Vintage Story data directory location differs by platform:

PlatformDefault data directory
Windows%APPDATA%/VintagestoryData/ (typically C:/Users/<you>/AppData/Roaming/VintagestoryData/)
Linux (default)~/.config/VintagestoryData/

On Windows, locate your VintagestoryData folder. Copy these subdirectories to the Linux box:

  • Saves/ โ€” contains your world's .vcdbs file
  • Mods/ โ€” your installed mods
  • serverconfig.json โ€” server settings (note: contains your admin password in plain text)
  • ModConfig/ โ€” mod-specific settings (only if you have customized any)
  • playerdata/ โ€” player progress, inventories, claims (if you have any non-default playerdata structure)

On the Linux box, create ~/.config/VintagestoryData/ and copy in:

mkdir -p ~/.config/VintagestoryData/{Saves,Mods,ModConfig,playerdata}
# Transfer files from Windows via SCP, SFTP, or a USB drive
# Example with SCP from Windows (using Cygwin or WSL):
scp -r /c/Users/you/AppData/Roaming/VintagestoryData/* user@linux-server:~/.config/VintagestoryData/

Step 4 โ€” Verify file ownership and permissions

On Linux, file ownership matters. Make sure the user who will run the server owns the files:

chown -R $USER:$USER ~/.config/VintagestoryData/
chmod -R u+rwX ~/.config/VintagestoryData/

For systemd-managed servers, the systemd unit's User= directive determines ownership requirements. Match that.

Step 5 โ€” First launch

cd ~/vintage-story-server
dotnet VintagestoryServer.dll --dataPath ~/.config/VintagestoryData/

Watch the console output for:

  • "Server started" message โ€” good
  • Mod load errors โ€” check that the mod files transferred correctly
  • "Save format upgraded" โ€” expected if minor version changed; safe
  • Crash on world load โ€” see our crash log location guide

Step 6 โ€” Port forwarding on the new Linux host

If your Linux box is behind NAT (home server, residential connection), update your router's port forwarding to point to the new server's LAN IP:

  • Port: 42420
  • Protocol: TCP and UDP (both are required since v1.18+)

If you're on a VPS with a public IP, just configure the host firewall:

sudo ufw allow 42420/tcp
sudo ufw allow 42420/udp

Step 7 โ€” Set up systemd auto-start (recommended)

Create /etc/systemd/system/vintagestory-server.service:

[Unit]
Description=Vintage Story Dedicated Server
After=network.target

[Service]
Type=simple
User=vintagestory
WorkingDirectory=/home/vintagestory/vintage-story-server
ExecStart=/usr/bin/dotnet VintagestoryServer.dll --dataPath /home/vintagestory/.config/VintagestoryData/
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable vintagestory-server
sudo systemctl start vintagestory-server
sudo systemctl status vintagestory-server  # Verify running
journalctl -u vintagestory-server -f  # Live log tail

Common migration issues

SymptomCauseFix
Server crashes immediately.NET 7 not installed or wrong versiondotnet --version should show 7.0.x; install if missing
"Save file not found"Wrong --dataPath argumentVerify the path; absolute paths work most reliably
"Permission denied" on save loadFile ownership mismatch from Windows-style ACLschown -R user:user ~/.config/VintagestoryData/
Players can connect but world is wrong / emptySave file didn't transfer correctlyVerify .vcdbs file size matches the Windows source
Mods fail to loadMod author Windows-specific dependencyRare; check the mod's page for Linux compatibility
Server runs but no one can connectLinux firewall or VPS firewall blocking port 42420sudo ufw allow 42420/tcp and /udp
Existing player names not recognizedplayerdata directory didn't transferRe-transfer the playerdata/ folder; verify file timestamps

Post-migration checklist

  • [ ] Linux server starts cleanly on first launch
  • [ ] Save file loads with correct world data (matching size and seed)
  • [ ] All mods load without errors in server-main.txt
  • [ ] At least one trusted player can connect from outside the LAN
  • [ ] Existing player progress (inventory, position, claims) is intact
  • [ ] Backups are scheduled (cron job, host backup, or manual)
  • [ ] Systemd auto-restart is enabled and tested
  • [ ] Original Windows server is stopped (don't run both)
  • [ ] DNS / connect URL communicated to all players
  • [ ] Backup of Windows save kept offline for 30 days in case rollback needed

What you DON'T need to migrate

  • Windows-specific scheduled tasks โ€” replace with cron
  • Windows Defender exclusions โ€” Linux doesn't need them
  • Steam files โ€” Vintage Story doesn't use Steam
  • Anti-cheat configs โ€” Vintage Story doesn't have one
  • Sound/graphics drivers โ€” dedicated server doesn't render

Performance expectations after migration

Expect:

  • ~200-500 MB lower idle RAM use
  • ~5-10% faster chunk generation (better .NET 7 Linux JIT)
  • Same tick rate (single-thread bottleneck applies on both)
  • Better long-term uptime (no monthly forced reboots)
  • Lower hosting cost if you're paying for the OS license

Related guides

Don't want to manage Linux yourself? Supercraft Vintage Story hosting runs on managed Linux with .NET 7 auto-updated, systemd auto-restart configured, hourly backups, and 5 regions worldwide. Migrate from your home Windows setup in 15 minutes by uploading your save via FTP. Plans from $5.99/mo.

Tired of fighting this issue every patch?

Run a managed Vintage Story server with us. We handle the patches, mod-version pinning, save backups, and DDoS protection. Set up in 3 minutes, 5 datacenter regions, no contract.

See Vintage Story hosting plans โ†’
Top