Guide:Dedicated Server
Technical specs:
Here's a rough, conservative estimate of the hardware requirements, assuming a normal survival world where players like to spread out. These are recommended values; with some tuning, the requirements can probably be lowered.
OS: Windows or Linux Memory: 1 GB base RAM + 300 MB per player CPU: 4 Threads recommended Frequency: 1 GHz base + 100 MHz per player
Dedicated server on Windows
Below is a detailed guide for creating a multiplayer server on a computer using Windows operating system.
Last verified for
Windows 11 Home
version 23H2
64-bit operating system
Install Vintage Story
Note
When (default) appears before a piece of information, it's a reminder that the instructions need to be adjusted if the reader did not use the default settings.
When (example) appears before a piece of information, it's a reminder that if the reader used the example provided earlier, then they should have the outcome displayed at this point.
The default install location for Vintage Story is the Roaming folder of AppData. If you copy-paste %AppData%/Vintagestory into the address bar of File Explorer and hit the Enter key, you should be directed to that folder (if it exists). Presumably you already downloaded the game for singleplayer use and have updated to the latest version.
When you install Vintage Story for singleplayer, you get more than one program file. Inside (default) %AppData%/Vintagestory should be both Vintagestory.exe and VintagestoryServer.exe.
If you intend to host from a computer separate than the one you play on, you also need to install the game on the host machine; the process is no different. However, I'm going to refer to the singleplayer installation as %AppData%/Vintagestory and to the host installation as %AppData%/VSserver, regardless of whether the host is a separate machine.
Reminder: Forum and game accounts are currently separate. Log in to account.vintagestory.at rather than vintagestory.at to go directly to the downloads area.
Unless you specifically want to use an older version of the game, use the Recommended Download buttons.
Set data path
If you intend to host from the same machine that you play on, it's highly advisable to designate a separate area for the server data, so it doesn't get mixed up with your singleplayer data (save files, settings, etc). If you're hosting on a separate machine, you can skip this section. But keep in mind that the directions throughout this guide assume distinct file paths for singleplayer data and server data.
Shortcut method:
- Navigate to the location where you will store the server's data, such as a new VSserver folder created in
C:\Users\YourUsername\AppData\Roaming - Create a folder for the server's data and give it a clear name, such as VSserverData
- Open that folder and copy the entire path from the address bar of File Explorer. (example:
C:\Users\YourUsername\AppData\Roaming\VintagestoryServer\VSserverData) - Open the game's application folder; it is
%appdata%/VintageStoryby default. - Create a shortcut of
VintagestoryServer.exe. This can usually be accomplished through the right-click menu; google instructions specific to your operating system version if needed. - Open the Properties of the new shortcut. This can usually be accomplished through the right-click menu.
- Click in the Target field of the shortcut's Properties, then go to the very end of what's written there. Add one space, then
--dataPath=, then Paste the folder path you copied earlier, in quotes. The entire contents of the Target field should now be something like this:"C:\Users\YourUsername\AppData\Roaming\Vintagestory\VintagestoryServer.exe" --dataPath="C:\Users\YourUsername\AppData\Roaming\VintagestoryServer\VSserverData"
Optional: you can move/copy the shortcut, to your desktop and/or your new VintagestoryServer folder
While the following tutorial is for using different versions of the game on a single machine, the latter half deals with setting a dataPath; skip to 2:57.
| How do I...? by Shi No Hakobi-te |
|---|
![]() |
Batch script method (functionally equivalent to the shortcut method above):
- To create a batch script, simply create a blank text document and rename it with the .bat file extension.
- You can edit it by right clicking and selecting edit. Then just type
%appdata%/Vintagestory/VintagestoryServer.exe --dataPath "[PATH]"replacing [PATH] with the desired path for the server's data, then save and close.
Running the script will run the server with the alternate datapath, and will generate its own collection of config files there. This is functionally equivalent to the modified link.
Next:
- Run the shortcut you made of
VintagestoryServer.exeor the batch script. This should create an array of subfolders (such as Mods) inside the VSserverData folder. - Close the server for now.
Configure router/firewall
Presumably you want to share a world with players who don't live at your address and use the same local network. A firewall is a device or program that controls the flow of network traffic involving different security levels. If you want the server to be accessible from outside of your local network, you need to configure your internet router to permit Vintage Story to use a port. This is sort of like opening a door in your firewall, to let certain traffic through. It's not a physical connection, but rather a set of information that directs the traffic.
As an example, Google Voice offers call forwarding, which lets you give people a Google-assigned phone number while keeping your personal SIM card number private. You can change or cancel the Google Voice number without giving up your personal number assigned by your phone service provider. Similarly, port forwarding directs internet traffic to a particular location in your network while keeping the details of that location hidden from people outside your network.
The process for opening a port varies significantly and cannot be effectively detailed here. Google "port forward" with your router's make and model for instructions. Examples: "port forward TP-Link AC1200" or "port forward ASUS RT-AX1800S".
![]()
For the above example, here's what you should put:
Port Forwarding
Name: Vintage Story
Global Port Range: 42420 - 42420
Base: 42420
Protocol: TCP
While TCP/UDP shouldn't prevent TCP from working, change the dropdown selector to just TCP.
For version 1.20 onwards, repeat the above process for UDP protocol.
While permanently open ports, like a 24/7 game server, are more prone to experience malicious efforts such as port scanning bots and brute attack bots than temporarily open ports, the risk is minor.
By the way: configuring the router can happen after launching VintagestoryServer.exe unless you want to advertise to the master server.
Run VintagestoryServer.exe
If you set a new dataPath, instead run the shortcut you made of VintagestoryServer.exe or the batch script.
If Windows Firewall asks for permission, grant any necessary access.
A console should open, with white text on a black background. If it closes right away, you might have another instance of Vintage Story already running; close that and try again.
You don't need to understand everything that's printed in the console, but do skim it. A message along the lines of DATE TIME [Server Event] Dedicated Server now running on Port 42420 and all ips!
is a good indicator that the server is ready for players to log in.
An IP address (Internet Protocol address) is a numeric label assigned by your internet service provider. While it's not risky to give your home address or phone number to most people, some are malicious or will sell your data. Similarly, it's good to be selective about who you share your IP address with: don't post it publicly on the internet in conjunction with identifying personal information. Do give it to friends you want to spend time with, and to Vintage Story community members (staff or volunteers in the Discord server) assisting with technical issues. Your IP address won’t give away sensitive information like your phone number or exact location.
One possible reason for recommendations to censor your IP address is that if the person(s) who set up your router left the password etc the default, somebody outside your network could potentially access your devices; anybody can google the default password for your router model, given enough time and determination. If your router password is not the default anymore, there's very little risk in sharing your IP address.
Simply googling "what's my IP" will yield several sites providing your public IP address. Unless you pay for a static IP address, your IP address will likely change a few times over the course of your server's lifetime. If players suddenly become unable to connect to your server, re-google your IP address and provide players with the new number.
Public IP, also known as an external IP, is the address provided by your internet service provider. Devices on the same network share this IP address when accessing the internet. For specific details, such as location, you can perform an IP lookup check. On the other hand, private, or local, IPs are assigned to each device on your network by your router.
- From the main menu, select Multiplayer. You might already have some servers listed that you joined previously.
- Click the Add new server button.
- Give your server a name; you can easily change it later.
- In the next field, put your IP address. In most cases, you do not need to put the port number after the IP address.
- The password field is irrelevant unless the host set a password (see Guide:Dedicated_Server#Set protections).
- Save by clicking the Create button.
- The server will now be added to the shortlist of multiplayer worlds. Click the name of the server to join.
For any friends who wish to join, they need to complete these same steps, except they need to put the host's IP address rather than their own. It's not important if the name they give the server matches the name the host gave it.
When they click the name of the server to join, they'll be prompted to download the server's modlist. If they Accept, the entire list of server-side and universal mods will be added to a subfolder in the VintageStoryData\ModsByServer folder on their machine; they can add client-side mods to that subfolder if desired.
Set protections
It's highly advisable to put measures in place to prevent people with bad intentions from being able to harm your world.
You can do this via commands in the console or (if you have admin permissions) the in-game chat overlay, or by editing the serverconfig.json file, located in (Example) C:\Users\YourUsername\AppData\Roaming\VintagestoryServer\VSserverData.
Serverconfig changes do not take effect until the server is relaunched. When you've put in place all of the strategies desired from the suggestions below, save the serverconfig.json file or do /autosavenow. Then do /stop and relaunch Vintagestoryserver.exe
Don't advertise
If you don't want strangers to join, you might as well prevent your server showing in the list when somebody selects "Browse public servers".
- Edit serverconfig.json: Change
"AdvertiseServer": true,to"AdvertiseServer": false,. Be sure to end the line with a comma.
OR
- Run a command:
/serverconfig advertise false.
Set a password
- Edit serverconfig.json: Change
"Password": null,to"Password": "thisisnotastrongpw",. Be sure to enclose the password with quotation marks and end the line with a comma.
OR
- Run a command:
/serverconfig password thisisnotastrongpw. No spaces permitted. - Tell the password to your friends. They should open the settings for your server (click the pencil icon next to the server name in Multiplayer menu) and type it in the Password field, then Save.
Use a whitelist
Only individuals added to a "whitelist" will be able to connect to the server. Similarly, a blacklist prevents specific people or mods. As of game version 1.20, dedicated servers use whitelisting by default, while single player worlds open to LAN (local area network) do not.
- Get the exact spelling of your friends' usernames for the game; the quickest place to find it is the bottom-left area of the game's main menu. For each friend, run this command:
/player [username] whitelist on(replace [username] with their username and don't type the brackets). The server does not need to be restarted after whitelisting an individual. - It's impractical to whitelist via json file.
Disabling the whitelist is risky; it's significantly more secure than a password and removing your server's information from the public list. But here's how it works:
- Edit serverconfig.json: Change
"WhitelistMode": "default",to"WhitelistMode": "off",. Be sure to end the line with a comma.
OR
- Run a command:
/serverconfig WhitelistMode [off|on|default]
"Default" means whitelist is on for dedicated servers, but off for single player open to LAN servers.
If your server runs a game version before 1.20:
- Edit serverconfig.json: Change
"OnlyWhitelisted": false,to"OnlyWhitelisted": true,. Be sure to end the line with a comma.
OR
- Run a command:
/serverconfig onlywhitelist true.
For version 1.20 onwards, the serverconfig "OnlyWhitelisted" is obsolete.
Change default role
Instead of default survival player abilities, somebody who joins will only have the abilities described by the role you assign. Suvisitor role "can only visit this world and chat but not use/place/break anything."
- Edit serverconfig.json: Change
"DefaultRoleCode": "suplayer",to"DefaultRoleCode": "suvisitor",. Be sure to enclose the role with quotation marks and end the line with a comma. - Run a command: A command to set the default role code is not currently available. To adjust a player's role from suvisitor to full suplayer, do
/player [username] role suplayer(replace [username] with their username and don't type the brackets). You can do this while they are online or offline. The server does not need to be restarted after changing somebody's role.
Reminder: save changes and relaunch the server for the changes to take effect.
Common errors
See Troubleshooting_multiplayer#Dedicated_server.
Customize world
For a number of reasons, it's widely considered easier to create a custom world via the singleplayer Customize menu than via the serverconfig.json file. Once the save file is created, copy-paste it into the dataPath set up earlier: (example) Roaming\VintagestoryServer\VSserverData\Saves. Then, either rename the save file to default.vcdbs, or edit the serverconfig.json file: change "SaveFileLocation": "./data/Saves/default.vcdbs", to "SaveFileLocation": "./data/Saves/YourWorldNameHere.vcdbs",
Add/remove mods
Assuming that you set a custom data path (such as %AppData%/VSserverData) and launched the server, there should now be a Mods folder within %AppData%/VSserverData.
Inside %AppData%/VSserverData should also be a serverconfig.json file, which can be edited with a program such as Notepad++. The ModPaths key indicates where the server should look for mods to load. For instance,
"ModPaths": [ "Mods", "\\AppData\\VSserverData\\Mods" ],/
Option 1)
You can download/paste mod zip files into %AppData%/VSserverData/Mods. This is best done while the server is offline. Changes made will take effect when the server is re-launched.
Option 2)
You can use commands to install/remove mods, or to list currently-installed mods. See List_of_server_commands#/moddb.
When a player attempts to join your server, they will be prompted to download your list of mods.
Only mods that are tagged as Server-side or Universal will be auto-downloaded in this way. Client-side mods would need to be manually added by the player to the server-specific subfolder within (default) %AppData%/VintagestoryData/ModsByServer.
Gain admin powers
When you join your newly-created server, you should have default privileges of a survival player (role code suplayer). If you want to have access to creative mode etc, you'll need to either change your role or grant yourself specific privileges. Since suplayer role can't manage privileges, you'll need to either run the commands in the console, or edit the serverconfig.json file. See List_of_server_commands#Privilege_Control
The above guide by:
T.Read, July 2024
Dedicated server on Linux
- This section is for x64 processors; if using ARM, please refer to the ARM section below.
This describes how to set up the server as a service on Linux systems. It is focused on the technical differences in installation. Please read the Windows section above for more details on configuring the server settings.
This tutorial assumes you are using Bash.
The '$' symbol indicates a command to run in your terminal.
Requirements
- .NET Runtime 8.0. If you don't have it installed, see how to install .NET manually.
Recommended:
- The ability to create a different user account to run the server under.
- To use the included convenience script for running and operating the service in the background, you will need to install
pgrepandscreenwith your system's package manager. Below are instructions for some common distributions:
Note that pgrep is part of the procps package on most distributions; Use the name procps instead of pgrep when installing.
Some distributions use the package procps-ng instead.
- Debian/Ubuntu/Mint
$ sudo apt update && sudo apt install procps screen
- Red Hat/Fedora
$ sudo dnf install procps-ng screen
- Arch Linux
$ sudo pacman -Syu procps-ng screen
- SUSE/openSUSE
$ sudo zypper install procps screen
Create a non-root user
For security reasons, it is STRONGLY RECOMMENDED to NEVER run the server as the root user.
Do not use your personal account if you are running the server on your personal computer.
On most Linux operating systems, you can create a user with the command useradd.
$ sudo useradd vintagestory -m
Now, log in to the new user account.
$ sudo su -l vintagestory
This will place you in the vintagestory user's home directory as if you had logged in normally. You will not need to leave the home directory for the remainder of this tutorial.
Download the server software
1. First, go to the game client download page.
2. Click "Show all available downloads and mirrors of Vintage Story".
3. Find the newest link that says "Linux tar.gz Archive (server only)". It should be the fifth link in the list.
4. Right click on the link, then select "Copy link".
5. Paste the link into the terminal and download it with your preferred tool, such as curl or wget.
For example, with wget, you would type in wget, press Space, then press Ctrl + Shift + V to paste the link.
$ wget <Ctrl + Shift + V>
It should look like this:
$ wget https://cdn.vintagestory.at/gamefiles/stable/vs_server_linux-x64_<version>.tar.gz
If you are using curl, you will need to add the -O option.
$ curl -O https://cdn.vintagestory.at/gamefiles/stable/vs_server_linux-x64_<version>.tar.gz
6. Extract it to the server directory.
$ mkdir server && tar -C server -xzf vs_server_linux-x64_*.*.*.tar.gz
7. Optionally, you may delete the archive if desired.
$ rm vs_server_linux_*.*.*.tar.gz
8. Make sure the server.sh script is executable.
$ chmod +x server/server.sh
Configuring the server
Now, you need to make sure the server will run using your desired username and data directory. Open the file server/server.sh in your preferred text editor. If you don't have one, you can use nano (you may need to install it via your package manager) with nano server/server.sh. After editing the file, press Ctrl + X, then Y, then Enter to save and exit. If you already have a preferred editor configured, you may omit the EDITOR argument.
Use the following values if you're following this tutorial. Using this specific data path is not necessary, but keeping it near the server files is convenient.
USERNAME=vintagestory VSPATH=/home/vintagestory/server DATAPATH=/home/vintagestory/data
If you will be using mods, you will need to add the path to the Mods directory in your server config at data/serverconfig.json. If you are using a different data path, use that instead of the one displayed below.
- Do not remove the first Mods folder. It is necessary for loading the base game files.
"ModPaths": [
"Mods",
"/home/vintagestory/data/Mods"
]
Opening the firewall
- For port forwarding, see above
Depending on your system's configuration, it may be necessary to add firewall rules to allow external connections.
$ sudo firewall-cmd --permanent --zone=public --add-port=42420/tcp $ sudo firewall-cmd --permanent --zone=public --add-port=42420/udp $ sudo firewall-cmd --reload
$ sudo iptables -A INPUT -p tcp -m tcp --dport 42420 -j ACCEPT $ sudo iptables -A INPUT -p udp -m udp --dport 42420 -j ACCEPT
$ sudo ufw allow 42420/tcp $ sudo ufw allow 42420/udp
Running the server
- See above for more details on configuring the server settings.
Running server.sh starts the server in the background with the user configured in the file. Note that if you want to run two servers, you will need to change the SCREENNAME option in the script.
$ server/server.sh start
Once the server has started, you will need to add yourself to the whitelist so you can log in. It is recommended to also give yourself admin privileges so you can run commands in-game.
This should be the name of your Vintage Story game account that you use to log in when starting the game.
$ server/server.sh command "/whitelist add <username>" $ server/server.sh command "/op <username>"
Cleanup and convenience
Once configuration is complete, it is recommended to disable logging in for the server user account.
$ sudo usermod vintagestory -s /sbin/login
For managing the server without logging in, you can configure sudo to allow running commands as the server user. It is recommended to add a new file under /etc/sudoers.d/ instead of editing the base sudoers file. You may need to install nano via your package manager. If you already have a preferred editor configured, you may omit the EDITOR argument.
$ sudo EDITOR=nano visudo /etc/sudoers.d/vs_server
Add the following line. Then, press Ctrl + X, then Y, then Enter.
<your username> ALL= (vintagestory) NOPASSWD :ALL
You may now run commands as the vintagestory user without logging in with sudo -u vintagestory <command>.
To make running the server.sh script easier, create an alias:
$ echo -e '\n# Manage VS server\nalias vs_server="sudo -u vintagestory /home/vintagestory/server/server.sh $@"\n' >> ~/.bash_aliases && . ~/.bash_aliases
$ vs_server
Usage: /home/vintagestory/server/server.sh {start|stop|status|update|restart|setup ["user name"] ["path"]|command "server command"}
The server console can also be accessed directly with screen.
If you changed the SCREENNAME option in the server script, use that name instead.
While in the console, press Ctrl + A, then D to detach from it without closing the server.
$ sudo -u vintagestory screen -r vintagestory_server
Just like with the server script, an alias can be created to make this easier if desired.
$ echo -e '\n# Open VS server console\nalias vs_console="sudo -u vintagestory screen -r vintagestory_server $@"\n' >> ~/.bash_aliases && . ~/.bash_aliases
Dedicated Servers on ARM64
Note: the ARM64 version is EXPERIMENTAL please report any issues to the discord .
As of , no ARM64 .NET7 version of the MonoMod library is available. Harmony patching library depends on it. Therefore coded mods which use Harmony patching will not work on an ARM64 server. If a beta of the MonoMod library becomes available in future, server owners can try installing it for themselves.
The ARM64 version is available on GitHub.
I recommend using the install script located on the GitHub. The following is a step by step guide on how to use the script on a Debian based system (Ubuntu, Debian, Rasbian, etc).
1. Install the required dependencies to use this script by doing apt -y install curl jq
2. Create a new file named arminstall.sh by running vim arminstall.sh or nano arminstall.sh
3. Copy the contents of the arminstall.sh file from GitHub to your newly created file and save it by using :wq with Vim or Ctrl + X, then Y, then Enter with Nano.
4. Make the script executable by running chmod +x arminstall.sh
5. Run the script by doing ./arminstall.sh
6. Start the server by using ./VintagestoryServer or dotnet VintagestoryServer.dll
This will download the latest version of Vintage Story to the current working directory, then replace the needed files to work with ARM.
If at any time you want to update to the latest version of Vintage Story, simply run the script again.
| Wiki Navigation | |
|---|---|
| Vintage Story | Guides • Frequently Asked Questions • Soundtrack • Versions • Controls |
| Game systems | Crafting • Knapping • Clay forming • Smithing • Cooking • Temperature • Hunger • Mining • Temporal stability • Mechanical power • Trading • Farming • Animal husbandry |
| World | World generation • Biomes • Weather • Temporal storms |
| Items | Tools • Weapons • Armor • Clothing • Bags • Materials • Food |
| Blocks | Terrain • Plants • Decorative • Lighting • Functional • Ore |
| Entities | Hostile entities • Animals • NPCs • Players |
| Miscellaneous | List of client commands • List of server commands • Creative Starter Guide • Bot System • WorldEdit • Cinematic Camera • Adjustable FPS Video Recording • ServerBlockTicking • Adding Mods • Troubleshooting Mods |
