Use case · Game server

Stationeers dedicated server on Linux: SteamCMD, setting.xml, port 27016

A Stationeers dedicated server is RocketWerkz's headless build of the game, SteamCMD app 600760, which installs with an anonymous login and runs on Linux as rocketstation_DedicatedServer.x86_64. You start it with -load or -loadlatest and a world name, pass settings with -settings, and players connect to its GamePort, 27016 by default. This page covers the install, setting.xml, the port, saves and backups, and the machine to put it on.

See the machines

What the server build is

RocketWerkz publishes the server separately on Steam, free, as Stationeers Dedicated Server, app 600760. Its Steam announcement of June 2022 says it can be downloaded and run anonymously, so SteamCMD needs no Steam account. The same code base builds the game and the server; the server build strips the parts a headless process does not need.

The reference for flags is the Stationeers Dedicated Server Guide on GitHub, kept by Dean Hall, RocketWerkz's CEO, with an example launch script, runstationeers-linux.sh. Most launch flags are console commands with a leading dash: -load "Base" at launch is load "Base" at runtime. -settingspath is the exception; it only works at launch. The guide dates from 2022 and 2023; where later Steam patch notes changed something (saves, above all), this page follows the patch notes.

What loads the machine

RocketWerkz publishes no hardware figures for the server. The patch notes do say where the load comes from, and that is what to size against:

LoadWhat RocketWerkz has writtenOur reading for the host
Base sizeAtmospherics, room generation and large bases are the recurring targets of performance passes (2026 updates)Single-thread speed and spare cores both matter; a big base grows the work per tick
PlayersServerMaxPlayers accepts 1-30, default 10; in its own playtests for the Sept 2025 update RocketWerkz regularly had up to 10 players online at onceSet the cap to the group you actually have
SavingSaves are one compressed .save file; only the snapshot pauses the game tick, which RocketWerkz expects to stay under a second; compression then runs in the background (Sept 2025)SSD storage keeps save writes short
NetworkOn a 50,000-object save, client bandwidth fell from about 650 KB/s to under 100 KB/s (Aug 2026)Even a full server sits far inside a 500 Mbps port

Memory use depends on the world and the base. RocketWerkz wrote in September 2025 that the terrain system it replaced never released explored ground from memory. It gave no figure for the new one, so watch free -h on your own world.

Choosing the machine

  • x86-64 only, by our inference: the Linux binary is named .x86_64 and no ARM build is listed, so skip the ARM lines.
  • A rack server or blade: each has an out-of-band controller (HPE iLO, Dell iDRAC or a Supermicro BMC) with a browser console once you add a console login, so a server that hangs at boot is still yours to fix. Most cartridges have power control only.
  • Ubuntu: Valve's SteamCMD page gives the apt package for Ubuntu and Debian; on the widest Linux server lines the one-click images run up to Ubuntu 26.04.
  • City: put it near the players. The five locations each publish a test IP to ping before you order.

The game server machines are whole servers: root, every core and the full disk set for one tenant, on an unmetered port with one IPv4. A ready machine is live about 30 minutes after the order is approved; a build to order takes 4-24 hours.

Installing on Ubuntu 24.04

Install SteamCMD from multiverse as Valve's page describes, create a service user, pull app 600760 into its home, and turn on the firewall with SSH only. The apt step may show Valve's licence prompt: answer it before pasting the rest.

sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd
sudo useradd -m -s /bin/bash stationeers
sudo -u stationeers bash -c 'cd /home/stationeers && mkdir -m 700 -p data && /usr/games/steamcmd +force_install_dir /home/stationeers/server +login anonymous +app_update 600760 validate +quit'
sudo sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw
sudo ufw allow OpenSSH
sudo ufw --force enable

Then make the first save and the settings file by hand, in the foreground:

  1. Start it once: sudo -u stationeers bash -c 'cd /home/stationeers/server && ./rocketstation_DedicatedServer.x86_64 -settingspath /home/stationeers/data/setting.xml -loadlatest Base mars -settings StartLocalHost true ServerVisible false SavePath /home/stationeers/data'. With a save name and a world, -loadlatest creates the world when no save of that name exists. That form and the name mars come from the 2022 guide, which predates the September 2025 save rework, and the help text now flags deprecated worlds: check help new and help loadlatest at the console. The guide warns that on Linux the console may print nothing useful, though input still works; its world list is the fallback: moon, mars, europa, europa2, mimas, vulcan, vulcan2, space, loulan, venus. Newer builds may hide some of them.
  2. At the console type save Base, wait for it to finish, then quit.
  3. Lock the file before any secret goes in: sudo chmod 600 /home/stationeers/data/setting.xml. Then sudo -u stationeers nano /home/stationeers/data/setting.xml and set ServerName, ServerPassword, ServerAuthSecret and ServerMaxPlayers. A missing property goes in as an XML element named after it; that is our reading of the guide's one example, a ServerAuthSecret element. On the next foreground start, settings print at the console shows whether it took.
  4. Open the game port: sudo ufw allow 27016/udp.

setting.xml and the launch flags

-settings takes key-value pairs separated by spaces and writes them to the settings file; -settingspath moves that file and must come first. Without it the file is setting.xml beside the executable. Properties the guide lists, with its defaults:

PropertyDefaultPurpose
StartLocalHostfalseMust be true, or nobody can connect
ServerVisibletruePings RocketWerkz's master server for the server list
GamePort27016The port players connect to
LocalIpAddress0.0.0.0Bind address; set it on a multi-IP host
ServerPasswordnullJoin password
AutoSave / SaveIntervaltrue / 300Autosave, interval in seconds
ServerMaxPlayers10Range 1-30
UPNPEnabledtrueWe set false: a public IP has no router to ask
SavePathnullCustom save folder

Anything on the launch line is visible in ps to every local user. That is why the unit below carries no passwords: they live in the 600-mode file.

Running it under systemd

The unit updates the game, then starts it with the log on stdout (-logFile -, Unity's flag), so journalctl -u stationeers -f shows it.

# /etc/systemd/system/stationeers.service
[Unit]
Description=Stationeers dedicated server
Wants=network-online.target
After=network-online.target

[Service]
User=stationeers
WorkingDirectory=/home/stationeers/server
ExecStartPre=-/usr/games/steamcmd +force_install_dir /home/stationeers/server +login anonymous +app_update 600760 +quit
ExecStart=/home/stationeers/server/rocketstation_DedicatedServer.x86_64 -logFile - -settingspath /home/stationeers/data/setting.xml -loadlatest Base mars -settings StartLocalHost true ServerVisible true GamePort 27016 UPNPEnabled false AutoSave true SaveInterval 300 SavePath /home/stationeers/data
TimeoutStartSec=1800
Restart=always
RestartSec=15

[Install]
WantedBy=multi-user.target

Load it with sudo systemctl daemon-reload && sudo systemctl enable --now stationeers. The - on ExecStartPre lets the server start when SteamCMD exits with an error; it does not cover a hang, so TimeoutStartSec=1800 sets a 30-minute ceiling on the whole start, download included. RocketWerkz documents no exit codes for a crash, so Restart=always brings it back whatever the exit status.

Joining and administering

Players join by address and port, join 203.0.113.10:27016 at the client console or from the server list. RocketWerkz recommends against Steam P2P connections, which can desync, so a public IP with the port open is the dependable route.

With a ServerAuthSecret in both the server's and the client's settings, a connected client runs server commands: serverrun save "Base". Under systemd the server console takes no input, so kick and ban go the same way: serverrun kick CLIENT_ID, serverrun ban CLIENT_ID, and serverrun ban refresh after a manual edit of the ban list, which sits under SavePath. On a host with several IPs, the guide's known issue is a listed server that times out on join: set LocalIpAddress.

Saves, backups and updates

Everything the server writes lives in /home/stationeers/data: the save folder with its autosaves, setting.xml and the ban list. A December 2025 fix makes a dedicated server save reliably when the last player leaves. Before stopping a busy server, save from a connected client whose ServerAuthSecret matches the server's: serverrun save "Base". Archive the whole folder nightly; there is no pipe in the job, so a failed tar shows as an error in the log:

# /etc/cron.d/stationeers-backup  (first: sudo install -d -m 700 /var/backups/stationeers)
30 4 * * * root umask 077; tar -czf /var/backups/stationeers/data-$(date +\%F).tar.gz -C /home/stationeers data > /var/backups/stationeers/last-run.log 2>&1
50 4 * * * root find /var/backups/stationeers -name 'data-*.tar.gz' -mtime +14 -delete

Copy the archives off the machine yourself. If rsync does it, leave out --delete, so an emptied folder cannot wipe the off-site copies.

  1. Restore: sudo systemctl stop stationeers, then sudo ls -l /var/backups/stationeers/ and test the archive: sudo tar -tzf /var/backups/stationeers/data-DATE.tar.gz > /dev/null && echo ok. Stop unless it prints ok.
  2. Set the current data aside: sudo test ! -e /home/stationeers/data.old && sudo mv /home/stationeers/data /home/stationeers/data.old && sudo ls -l /home/stationeers/data.old. Stop if data.old already exists or the listing comes back empty.
  3. sudo tar -xzf /var/backups/stationeers/data-DATE.tar.gz -C /home/stationeers && sudo chown -R stationeers:stationeers /home/stationeers/data, start the service and join.
  4. Only when the world is right: sudo rm -rf /home/stationeers/data.old.

Updates arrive on every start through ExecStartPre. The September 2025 update broke every earlier save, so if you want to choose when updates land, drop that line and update by hand after a backup. For those old saves RocketWerkz pointed to converters made by the community, not tools of its own; archive the save before running one. For beta builds, Valve's syntax on a command line is "+app_update 600760 -beta beta validate", quoted as one argument. Valve's page names the non-beta branch public, so -beta public goes back, and the unit's update line needs the same option.

When this is the wrong host

  • A few friends playing now and then: one player hosting from the game costs nothing.
  • If you want a panel that edits settings for you, this setup has none; it is a shell and a text file.

A second world on the same box needs its own install folder, unit, settings file, SavePath and GamePort, with that port opened in ufw.

Questions

Which port does a Stationeers server need open?

RocketWerkz's guide documents one: GamePort, default 27016. It gives no protocol; the netcode is built on RakNet, a UDP library, so we open 27016/udp. If your build's setting.xml holds other port properties, open those too.

Does the server need a Steam login or a game copy?

No. RocketWerkz states the dedicated server tool is free and runs anonymously, so +login anonymous in SteamCMD downloads app 600760. Players still need the game.

Where are the saves on Linux?

Under the saves folder beside the executable unless SavePath points elsewhere; this page sets it to /home/stationeers/data. Since September 2025 each save is one compressed .save file.

How often does it autosave?

With AutoSave true, every SaveInterval seconds, 300 by default. A December 2025 fix also makes it save reliably when the last player leaves.

Can I keep the password off the command line?

Yes. Put ServerPassword and ServerAuthSecret in setting.xml, made mode 600 before you type them in, and leave them out of -settings.

Put the world on its own machine

Root on single-tenant x86 hardware, a public IPv4 for port 27016, unmetered traffic, five cities on AS19624.

See the machines

Related on Server Room

Other use cases