Games Don't Starve Together
Don't Starve Together server requirements
Requirements
| Our benchmark | Klei | LOW.MS | ESAGAMES | ||
|---|---|---|---|---|---|
| CPU | 18% of one core, idle | Fast single core per shard | Higher with caves | ||
| RAM | 2.2 GB idle, 3.3 GB peak | 4 GB vanilla 2-player, 8 GB with caves and mods, 16 GB overkill | 1-2 GB per shard, about 4 GB per cluster | 4 GB min with caves | |
| Disk | 4.3 GB install | ||||
| Network | UDP 10999 and 11000 | UDP 10999 game per shard, UDP 10888 shard link, Steam ports 8766 and 27016 | About 1 Mbps for 6 players; UDP per shard | UDP 10999 plus shard ports | Second shard on its own port, e.g. 11000 |
| OS | Linux, native | Ubuntu, 32 or 64-bit (2016 guide) |
RAM by players
LOW.MS
4 to 8 GB
- Recommended
- Community
- LOW.MS: "A 4 GB VPS will happily run a vanilla 2-player world. 8 GB is comfortable once you enable caves and add a reasonable mod list."
Memory over time
- In use
- Peak, with cache
Community results
Loading...
Add result
Pending
- 24 hours idle
- One player for 30 minutes
- Online cluster with token
- Master shard alone
Ports
| Port | Protocol | Use | Our server |
|---|---|---|---|
10999 | UDP | Game traffic, Master shard (server_port). | Open |
11000 | UDP | Game traffic, Caves shard (server_port). | Open |
10888 | UDP | Shard link (master_port), loopback. | Local only |
8766, 8767 | UDP | Steam authentication, one per shard. | Local only |
27016, 27017 | UDP | Steam master server, one per shard. | Local only |
Forward UDP 10999 and 11000, one per shard.
Docker setup
5 steps
Download
Free anonymous download, Steam app 343050, about 4.3 GB.
docker volume create dst_files docker run --rm -v dst_files:/data steamcmd/steamcmd:latest \ +@sSteamCmdForcePlatformType linux +force_install_dir /data \ +login anonymous +app_info_update 1 +app_update 343050 validate +quitImage
game_runtime as on the Palworld page, plus libcurl-gnutls.
printf 'FROM ubuntu:24.04\nRUN apt-get update && apt-get install -y --no-install-recommends ca-certificates libcurl4t64 && rm -rf /var/lib/apt/lists/*\nUSER ubuntu\n' | docker build -t game_runtime - printf 'FROM game_runtime\nUSER root\nRUN apt-get update && apt-get install -y --no-install-recommends libcurl3t64-gnutls && rm -rf /var/lib/apt/lists/*\nUSER ubuntu\n' | docker build -t game_dst -Cluster files
Offline cluster with Caves. Add cluster_token.txt and remove offline_cluster to go online.
docker volume create dst_home docker run --rm -v dst_home:/h alpine sh -c ' C=/h/.klei/DoNotStarveTogether/Cluster_1; mkdir -p $C/Master $C/Caves printf "[GAMEPLAY]\ngame_mode = survival\n\n[NETWORK]\ncluster_name = My server\noffline_cluster = true\n\n[MISC]\nconsole_enabled = true\n\n[SHARD]\nshard_enabled = true\nbind_ip = 127.0.0.1\nmaster_ip = 127.0.0.1\nmaster_port = 10888\ncluster_key = change-me\n" > $C/cluster.ini printf "[NETWORK]\nserver_port = 10999\n\n[SHARD]\nis_master = true\n" > $C/Master/server.ini printf "[NETWORK]\nserver_port = 11000\n\n[SHARD]\nis_master = false\nname = Caves\n\n[STEAM]\nmaster_server_port = 27017\nauthentication_port = 8767\n" > $C/Caves/server.ini echo "return { override_enabled = true, preset = \"SURVIVAL_TOGETHER\" }" > $C/Master/worldgenoverride.lua echo "return { override_enabled = true, preset = \"DST_CAVE\" }" > $C/Caves/worldgenoverride.lua chown -R 1000:1000 /h'Run
Exact bench command: Caves in the background, Master in front. Add
-p10999-11000:10999-11000/udp to publish the ports.docker run -di --name dst --init --memory 4g -v dst_files:/dst -v dst_home:/home/ubuntu -w /dst/bin64 game_dst sh -c ' ./dontstarve_dedicated_server_nullrenderer_x64 -console -cluster Cluster_1 -shard Caves -monitor_parent_process $$ >/dev/null 2>&1 & exec ./dontstarve_dedicated_server_nullrenderer_x64 -console -cluster Cluster_1 -shard Master'Ready line
Both shards linked 17.7 seconds after container start, including world generation.
docker logs -f dst 2>&1 | grep -m1 'Secondary Caves.*ready'
Settings
11 settings
Files: cluster.ini in ~/.klei/DoNotStarveTogether/Cluster_1, server.ini in each shard folder.
| Setting | What it does |
|---|---|
game_mode = survival | cluster.ini [GAMEPLAY]. Also endless, wilderness. |
max_players = 16 | cluster.ini [GAMEPLAY]. Klei default. |
offline_cluster = true | cluster.ini [NETWORK]. Runs without a token, not listed. |
cluster_name | cluster.ini [NETWORK]. Name in the server list. |
cluster_password | cluster.ini [NETWORK]. Join password. |
shard_enabled = true | cluster.ini [SHARD]. Needed for Caves. |
master_port = 10888 | cluster.ini [SHARD]. Shard link. |
cluster_key | cluster.ini [SHARD]. Shared secret between shards. |
server_port | server.ini [NETWORK]. 10999 Master, 11000 Caves. |
is_master | server.ini [SHARD]. true for Master only. |
cluster_token.txt | Klei account token; needed online. |
Troubleshooting
6 problems
- Server will not start without a cluster token
- Online clusters need cluster_token.txt from the Klei account page. Offline clusters run without one.
- 'Setting breakpad minidump AppID' is not ready
- It prints early in boot. Wait for '[Shard] Secondary Caves(...) ready!' in the Master log.
- 'libcurl-gnutls.so.4: cannot open shared object file'
- Install libcurl3t64-gnutls (Ubuntu 24.04) or libcurl3-gnutls (older releases).
- docker stop takes 60 seconds, then kills the server
- The server ignores SIGTERM (exit 137, no save). Type c_shutdown(true) in the console (docker attach) to save and stop.
- Caves never connect
- Both shards need the same cluster_key and master_port, and different server_port and Steam ports.
- No 'Sim paused' line
- Normal for an offline cluster: the world keeps running with nobody online.
Method
build 25643504
| Server | Don't Starve Together dedicated server, Steam build 25643504, game version 756039, downloaded 2026-10-06. |
|---|---|
| Image | game_runtime plus libcurl3t64-gnutls, uid 1000; ~/.klei on a Docker volume. |
| Machine | AMD Ryzen 9 5950X, Proxmox VE 9, each game server in Docker inside a dedicated LXC container. 4 GB memory limit, no swap. |
| Command | bin64/dontstarve_dedicated_server_nullrenderer_x64 -console -cluster Cluster_1 -shard Caves -monitor_parent_process, then the same with -shard Master |
Changes from defaults
- Offline cluster (offline_cluster = true): no Klei cluster token, so not listed online.
- Master and Caves shards in one container; numbers cover both processes.
- Klei defaults otherwise: survival, 16 slots.