Install and run a Dystopia dedicated server on Linux or Windows. Commands are copy-pasteable.

Quick setup (Linux)

For most servers, these three steps are the whole thing. Details, options, and fixes are in the sections below.

# 1. Install the 32-bit libraries the server needs
sudo dpkg --add-architecture i386 && sudo apt update
sudo apt install -y libc6:i386 libstdc++6:i386 lib32gcc-s1 libcurl3-gnutls:i386 \
  libtcmalloc-minimal4:i386 libncurses5:i386 libtinfo5:i386 libsdl2-2.0-0:i386

# 2. Install the dedicated server (app 17585)
steamcmd +force_install_dir ./dystopia-ds +login anonymous +app_update 17585 validate +quit

# 3. Start it
cd dystopia-ds
./srcds_run -game dystopia -console -port 27015 +maxplayers 16 +map dys_assemble +exec server.cfg

If the server crashes at startup, you are missing a 32-bit library. See section 3. Set your rcon_password and hostname in dystopia/cfg/server.cfg. Open UDP port 27015 so players can join.

1. Install with steamcmd

Steam apps: client 17580 (players), dedicated server 17585 (what you host). Install 17585 only. Anonymous login, no game ownership, no GSLT needed.

Get steamcmd (Linux): sudo apt install -y steamcmd, or:

mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sqL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf -

Windows: unzip Valve's steamcmd.zip to C:\steamcmd.

Install/update the server (re-run any time to update):

steamcmd +force_install_dir ./dystopia-ds +login anonymous +app_update 17585 validate +quit

1.5.5 is on the release_candidate beta. Add -beta release_candidate before validate to use it; drop it to return to the stable branch.

2. Linux 32-bit dependencies (required, read before first launch)

The server is a 32-bit (linux32) srcds binary. On a 64-bit host it will not start until the 32-bit libraries are present. Missing 32-bit libs are the #1 cause of the startup crash in section 3.

sudo dpkg --add-architecture i386 && sudo apt update
sudo apt install -y libc6:i386 libstdc++6:i386 lib32gcc-s1 libcurl3-gnutls:i386 \
  libtcmalloc-minimal4:i386 libncurses5:i386 libtinfo5:i386 libsdl2-2.0-0:i386

The ones that most often bite: - libcurl3-gnutls:i386: hard requirement. The server links libcurl-gnutls.so.4 for stats. If it is missing, the game module fails to load and the server crashes at startup. - libncurses5:i386 / libtinfo5:i386: the server console needs the older ncurses 5 libraries. Newer systems (Ubuntu 24.04 and later) no longer include them by default.

If apt install cannot find libncurses5 / libtinfo5, the simplest fix is to point the version-5 name at the version-6 library that is already installed (check the exact paths first with ldconfig -p | grep tinfo):

sudo ln -s /usr/lib/i386-linux-gnu/libtinfo.so.6 /usr/lib/i386-linux-gnu/libtinfo.so.5
sudo ln -s /usr/lib/i386-linux-gnu/libncurses.so.6 /usr/lib/i386-linux-gnu/libncurses.so.5

If you would rather not do that, use the Steam Linux Runtime option below, which already has these libraries.

Prefer not to chase packages? Run the server inside the Steam Linux Runtime (scout, i386). That is how the Puny Human servers were validated and it carries every library the engine expects.

Windows has no separate dependency install. If a DLL is reported missing, re-run steamcmd validate.

3. Server crashes at startup on Linux

If the server crashes at startup (a segfault before it finishes loading), it is almost always a missing 32-bit library on a 64-bit host, not a Dystopia bug.

Fix: install the full section 2 dependency set. That clears it in the large majority of cases.

If it still will not start, check which library is missing and install the matching :i386 package:

cd dystopia-ds
ldd bin/linux32/*_srv.so | grep -i "not found"

Install a package for each not found line, then try again. If nothing shows as missing but it still crashes, run the server inside the Steam Linux Runtime (scout, i386), which supplies the right library versions.

4. Launch and config

Linux (use srcds_run, which sets LD_LIBRARY_PATH and auto-restarts):

cd dystopia-ds
./srcds_run -game dystopia -console -port 27015 +maxplayers 16 +map dys_assemble +exec server.cfg

Windows:

srcds.exe -game dystopia -console -port 27015 +maxplayers 16 +map dys_assemble +exec server.cfg

If you run the raw bin/linux32/srcds binary instead of srcds_run, the -game path must be absolute, or the server cannot find gameinfo.txt. The Windows server needs its own console window (use a service wrapper, not piped stdin).

server.cfg goes in dystopia/cfg/. Minimal:

hostname "My Dystopia Server"
rcon_password "change-me"
sv_password ""                          // set a value for a private server
dys_stats_enabled 1                     // report rounds to dystopia-stats.com (optional)
dys_stat_token "<token_id>.<secret>"    // generate at dystopia-stats.com/servers; empty = not recorded

Set the real rcon_password in this file (a placeholder in the shipped file otherwise wins).

Maps are dys_* (dys_assemble, dys_broadcast, ...); custom maps go in dystopia/maps/. On 1.5.5 Linux, Windows-authored maps with wrong-case asset paths load correctly (no Wine needed).

5. Tickrate and rates (1.5.5)

Default is 66 tick. If you do not specifically need high tick, do nothing (1.5.5 already sets sane default rates). High tick is opt-in and costs more CPU.

High tick (128/192/256): add the launch flag -tickrate 256 and this server.cfg block:

sv_maxupdaterate 256          // send-rate ceiling; raise to the tickrate
sv_maxcmdrate 256             // command-rate ceiling
sv_minrate 786432             // bandwidth floor (bytes/s); high tick sends more data
sv_maxusrcmdprocessticks 48   // per-frame command headroom for high-tick clients

Clients must match, or they connect but stay capped low:

rate 786432
cl_updaterate 256
cl_cmdrate 256
cl_interp_ratio 2

High tick runs VAC secure. 256 tick is roughly 4x the per-frame work of 66; watch CPU under real load before committing (128 or 192 is a middle ground).

6. Logs (off by default)

  • Console log: add -condebug to the launch line to write dystopia/console.log. Fastest way to capture startup output and crashes. (con_logfile "logs/console.log" also works at runtime.)
  • Standard Source logs (connects/kills/chat): in server.cfg set log on, sv_logsdir "logs", sv_logecho 1. They land in dystopia/logs/; create it once if missing: mkdir -p dystopia/logs.
  • Stat logging (dys_stat_logging, local files) is separate from stats reporting (dys_stats_enabled
  • token). On older builds, stat logging spammed FS: Tried to Write NULL file handle! at round end on Linux; 1.5.5 fixes that (it creates logs/ and checks the handle first).

7. Ports and VAC

  • Inbound UDP 27015: game traffic and A2S server-browser queries. Open this (match your -port if changed). Linux: sudo ufw allow 27015/udp. Also open it at your provider's firewall/security group.
  • RCON is TCP 27015: only open it if you administer remotely; always set a strong rcon_password.
  • Outbound: UDP to Steam (auth + master server, so you appear in the browser); HTTPS 443 to dystopia-stats.com if reporting stats.
  • Servers run VAC secure, including at high tickrate.

8. Troubleshooting

  • Crash/segfault at startup on Linux: missing 32-bit dep. Section 2, then ldd bin/linux32/*_srv.so | grep "not found" (section 3).
  • libtinfo.so.5 / libncurses.so.5 not found: install libtinfo5:i386 / libncurses5:i386, or symlink from version 6 (section 2). Common on Ubuntu 24.04+.
  • No log files: logging is off by default. -condebug, or log on + create dystopia/logs/ (section 6).
  • FS: Tried to Write NULL file handle! spam at round end: pre-1.5.5 build with stat logging on. Update to 1.5.5, or create dystopia/logs/ by hand.
  • Not in the browser / players cannot join: UDP 27015 not open (OS or provider firewall).
  • Unable to find gameinfo.txt: raw srcds with a relative -game path. Use an absolute path or srcds_run.
  • High tick feels no different: the client's rates are still capped. Set client rates to match (section 5).
  • ERROR models / missing sounds on a Windows-authored map (Linux): wrong asset-path case. 1.5.5 fixes this automatically. Update to 1.5.5.