RE:NODE
Browse hosting

Guides16 min read

Sons of the Forest dedicated server: setup and settings

Run a Sons of the Forest dedicated server: the install, dedicatedserver.cfg key by key, the three UDP ports, owners and admins, custom settings and saves.

0 readers

The Sons of the Forest dedicated server is a free SteamCMD download (app id 2465200), it holds eight players, it wants 8 GB of memory and two cores to be comfortable, and it is configured entirely by one JSON file called dedicatedserver.cfg. There are two things worth knowing before you start. The server tool is a Windows build - there is no native Linux binary, so on Linux it runs under Wine or Proton, which is what most hosts are quietly doing for you. And because the configuration is JSON rather than the forgiving key-value format the first game used, a single stray comma makes the server boot with defaults and put the parse error somewhere in a log nobody reads. Everything else here is detail, and most of it lives in that one file.

What the dedicated server is and what it can do#

Sons of the Forest supports three kinds of multiplayer: a host playing from their own copy of the game, an invite-only session, and a dedicated server. The dedicated server is a separate free application with no renderer, distributed through Steam as a tool rather than as part of the game, and it is the only one of the three where the world exists when nobody is playing.

What it gives you:

  • A persistent world. The save is written on a timer and on a clean shutdown. Structures, cut trees, dead cannibals and the state of the story all survive a restart.
  • Up to eight players. That is the game's cap, not a plan limit, and there is no supported way to raise it.
  • Game modes - Normal, Hard, Hard Survival, Peaceful, Creative and Custom, chosen in the config.
  • Custom rules. In Custom mode you get roughly two dozen individual switches for enemy health, damage, aggression, season length, day length, survival penalties and container loot.
  • Owner accounts, which get the in-game admin panel with kick, ban and teleport.
  • A password, which is the only access control short of running LAN-only.

What it does not have is as important. There is no RCON, no server console you can type commands into, no chat command set, no whitelist beyond the password, and no mod support of any kind that the developer acknowledges. Administration happens in the game, from a player marked as an owner. If that sounds thin compared with The Forest's dedicated server, it is - the newer game shipped with less server tooling than the older one, and it has not caught up.

Requirements and resource usage#

This is a heavy server for a co-op survival game, and the number that surprises people is memory. Sons of the Forest keeps a large amount of world state resident, and it grows with the area the group has explored and with everything they have built.

GroupRAMCPUNotes
2-4 players, early game8 GB2 coresThe floor, not a comfortable margin
4-6 players, established base10 GB2-2.5 coresThe common case
8 players, long-running world12 GB3 coresBuilds and explored area both cost
Creative mode, heavy building12 GB+3 coresStructure count is the driver

Those numbers are for the whole container, and on Linux that includes the Wine layer and the virtual display the server insists on having. The reference Linux deployments ask for 8 GB as a minimum for a group of four and recommend more, which is why the plans for this game start where they do rather than at the 2 or 3 GB a co-op survival server used to mean.

  • CPU: the simulation is dominated by one thread, as it is in nearly every Unity survival game. Clock speed decides whether a fight at the base stutters. A second and third core still help - saving, networking and the blob sync all happen alongside.
  • Disk: the install is roughly 10-15 GB and each save slot is a SaveData.zip in the tens of megabytes, growing with the world. 50 GB is a sensible floor once you keep a few slots and some copies.
  • Network: modest in normal play. The exception is a player joining, which pulls the current world state across the BlobSync port. On a mature world that is a real transfer and the reason a first join takes a while.

The honest version of the sizing question: if your plan has 8 GB, you have enough for a normal group and you should not expect to also be comfortable in Creative mode with a thousand structures. CPU vs RAM for game servers covers how to tell which of the two you are actually short of before you pay for the wrong one.

Installing and the first start#

The dedicated server is anonymous on SteamCMD, so you do not need a Steam account or a game server token:

bash
$ steamcmd +force_install_dir C:\sotf-server +login anonymous \    +app_update 2465200 validate +quit

If SteamCMD is new to you, SteamCMD explained covers app ids, validate and keeping the install current. The executable is SonsOfTheForestDS.exe, with StartSOTFDedicated.bat beside it as the shipped launcher - worth knowing that the batch file is replaced on every update, so edits to it do not survive.

Run it once. The first start creates the user data folder, writes a default dedicatedserver.cfg and an empty ownerswhitelist.txt, tells you it has done so, and stops. That is expected behaviour rather than a failure: the server will not run until both files exist and you have had a chance to edit them.

On Windows that folder is:

code
C:\Users\<user>\AppData\LocalLow\Endnight\SonsOfTheForestDS\

It holds dedicatedserver.cfg, ownerswhitelist.txt and a Saves directory. You can move the whole thing with a command-line argument, which is what you want if you run more than one server on a machine:

code
SonsOfTheForestDS.exe -userdatapath "C:/sotf-server/userdata"

Two other arguments are worth knowing. -verboseLogging turns on the detailed log, which is the difference between diagnosing a start-up failure in two minutes and guessing. And every config key can be overridden on the command line with a -dedicatedserver. prefix, which is how panels set values without rewriting your file:

code
SonsOfTheForestDS.exe -dedicatedserver.ServerName "Kelvin's Revenge" -dedicatedserver.MaxPlayers "6"

On a panel-based host you skip all of this. The server exists after payment clears, the config file is already there, and the same values appear as fields on the Startup tab. What you still do yourself is the editing described below - on RE:NODE that is the in-browser file editor, which will colour the JSON and make an unbalanced brace obvious, or SFTP if you would rather work locally.

dedicatedserver.cfg, key by key#

One JSON object, no sections, no comments allowed. The defaults the server writes on first start:

dedicatedserver.cfg
{  "IpAddress": "0.0.0.0",  "GamePort": 8766,  "QueryPort": 27016,  "BlobSyncPort": 9700,  "ServerName": "Sons Of The Forest Server (dedicated)",  "MaxPlayers": 8,  "Password": "",  "LanOnly": false,  "SaveSlot": 1,  "SaveMode": "Continue",  "GameMode": "Normal",  "SaveInterval": 600,  "IdleDayCycleSpeed": 0.0,  "IdleTargetFramerate": 5,  "ActiveTargetFramerate": 60,  "LogFilesEnabled": false,  "TimestampLogFilenames": true,  "TimestampLogEntries": true,  "SkipNetworkAccessibilityTest": false,  "GameSettings": {},  "CustomGameModeSettings": {}}

What each of the interesting ones does:

KeyDefaultWhat it does
ServerNameSons Of The Forest ServerThe name in the browser
MaxPlayers8Documented range is 1 to 8
PasswordemptyEmpty means anyone can join. Maximum 40 characters
LanOnlyfalsetrue hides the server from the internet entirely
SaveSlot1Which save folder to load and write
SaveModeContinueContinue loads the slot, New starts over in it
GameModeNormalSee the next section
SaveInterval600Seconds between world saves
IdleDayCycleSpeed0.0How fast time passes with nobody online
IdleTargetFramerate5Tick target when empty
ActiveTargetFramerate60Tick target with players on
LogFilesEnabledfalseWrite logs to disk as well as the console
SkipNetworkAccessibilityTestfalseSkip the start-up port check

IdleDayCycleSpeed at 0.0 freezes the clock while the server is empty, which is almost always what a group of friends wants - nobody comes back to find the winter has passed. Set it to 1.0 if you want time to keep moving. IdleTargetFramerate at 5 is the reason an empty server barely uses CPU, and it is worth leaving alone.

SkipNetworkAccessibilityTest deserves a note. On start the server tests whether its ports are reachable from outside and complains if they are not. On a host that sits behind a NAT or a filtering layer, that test can fail on a server that works perfectly. If everything else is correct and the test is the only thing failing, setting it to true is legitimate. Setting it to true because you have not opened your ports is not.

Game modes and custom game settings#

GameMode takes one of Normal, Hard, HardSurvival, Peaceful, Creative or Custom. The first five are presets. Custom is the one that reads CustomGameModeSettings.

Two switches live in the always-on GameSettings block and apply whatever mode you run:

json
"GameSettings": {  "Gameplay.TreeRegrowth": true,  "Structure.Damage": true}

Gameplay.TreeRegrowth grows felled trees back over time, which matters a great deal on a long-lived server where a base area otherwise becomes a stump field. Structure.Damage controls whether cannibals can break what you built - switch it off and base defence stops being a thing you have to think about, which some groups want and others consider the whole game.

With GameMode set to Custom, the rest becomes available. These are the keys, all prefixed GameSetting.:

KeyValues
GameSetting.Vail.EnemySpawntrue, false
GameSetting.Vail.EnemyHealthlow, normal, high
GameSetting.Vail.EnemyDamagelow, normal, high
GameSetting.Vail.EnemyArmourlow, normal, high
GameSetting.Vail.EnemyAggressionlow, normal, high
GameSetting.Vail.EnemySearchPartieslow, normal, high
GameSetting.Vail.AnimalSpawnRatelow, normal, high
GameSetting.Environment.StartingSeasonspring, summer, autumn, winter
GameSetting.Environment.SeasonLengthshort, default, long, realistic
GameSetting.Environment.DayLengthshort, default, long, realistic
GameSetting.Environment.PrecipitationFrequencylow, default, high
GameSetting.Survival.ConsumableEffectsnormal, hard
GameSetting.Survival.PlayerStatsDamageoff, normal, hard
GameSetting.Survival.ColdPenaltiesoff, normal, hard
GameSetting.Survival.StatRegenerationPenaltyoff, normal, hard
GameSetting.Survival.ReducedFoodInContainerstrue, false
GameSetting.Survival.SingleUseContainerstrue, false
GameSetting.Survival.BuildingResistancelow, normal, high
GameSetting.Survival.CreativeModetrue, false
GameSetting.Survival.PlayersImmortalModetrue, false
GameSetting.Survival.OneHitToCutTreetrue, false
GameSetting.Construction.NoCuttingsSpawntrue, false
GameSetting.FreeForm.ForcePlaceFullLoadtrue, false
GameSetting.Multiplayer.Cheatstrue, false

A worked example - a building-focused server where the cannibals still turn up but the survival grind is off:

json
"GameMode": "Custom","CustomGameModeSettings": {  "GameSetting.Vail.EnemySpawn": true,  "GameSetting.Vail.EnemyAggression": "low",  "GameSetting.Survival.PlayerStatsDamage": "off",  "GameSetting.Survival.ColdPenalties": "off",  "GameSetting.Environment.SeasonLength": "long",  "GameSetting.Survival.OneHitToCutTree": true}

Two things about that list are worth knowing before you copy from it. Endnight's documentation writes the values in lower case while the file the server generates uses capitalised forms such as "Normal"; copy the form out of your own generated file and you will not have to find out which the parser prefers. And the official table and the official example disagree on whether the last-but-one key is OneHitToCutTree or OneHitToCutTrees, which is a good illustration of why -verboseLogging earns its place - the log tells you which keys the server actually accepted.

Ports and connecting#

Three ports, all UDP, all needed:

PortProtocolPurpose
8766UDPGame traffic
27016UDPSteam query - the server browser
9700UDPBlobSync - world state to joining players
find and pingworld state on joinplayon a timerPlayerSteam clientQuery portUDP 27016BlobSync portUDP 9700Game portUDP 8766Serverup to 8 playersSaveData.zipper SaveInterval
The three ports a Sons of the Forest client uses

The BlobSync port is the one people miss, because it has no equivalent in most games and the two Steam ports look like the complete set. A server with 8766 and 27016 open but not 9700 behaves in a very specific and confusing way: it appears in the browser, it accepts the connection, and then the player hangs on the loading screen forever. If that is what you are seeing, it is port 9700. Game server ports explained goes through why games end up with separate game, query and transfer ports.

Players find the server through Multiplayer, then Dedicated Servers, where the list can be filtered by name. Joining by address is done from the same screen. If you have put a name on the address, the list still shows the IP - a domain helps people remember it rather than helping them find it, and connecting a domain to a game server has the A record you need.

Owners, admins and moderation#

There is no admin command set. Instead, ownerswhitelist.txt in the user data folder lists the Steam IDs that get the in-game admin panel, one per line:

ownerswhitelist.txt
# One SteamID64 per line. Lines starting with # are comments.# Jane7656119801234567876561198087654321

It has to be the 17-digit SteamID64. A vanity URL, a friend code or a Steam ID3 will be ignored without complaint. The file is generated on the first run and read at start-up, so add the IDs and restart - editing it on a running server does nothing. Note that the server refuses to start until the file exists, which is one of the two reasons a very first run stops immediately.

An owner in game opens the pause menu, goes to the player list, and from there can promote a player to administrator, demote one to guest, and kick, ban or unban guests. That is the whole toolkit. There is no admin password, no scheduled messages, no chat filter and no record of who did what. For a public server that is genuinely thin, and the practical answer is to run with a password and hand it out rather than to run open and try to police it.

Saves, save slots and backups#

The world lives under the user data folder:

code
Saves/DedicatedServer/Multiplayer/0000000001/

Each slot is its own world, and the folder name is the slot number padded to ten digits - slot 1 is 0000000001. SaveSlot in the config picks which one the server loads, so keeping a second world is a matter of stopping the server, changing the number and starting again.

That padding is also the trick to moving a world onto the server. A session you hosted yourself from the game client lives under AppData\LocalLow\Endnight\SonsOfTheForest\Saves\<SteamID64>\Multiplayer\, in a folder named with a numeric world id. Stop the server, copy that whole folder into Saves/DedicatedServer/Multiplayer/, rename it to the padded slot number, set SaveSlot to match and SaveMode to Continue, and start. The world comes across; player inventories and positions generally do not, so tell people to expect to wake up empty-handed. A session you joined rather than hosted lives under MultiplayerClient and is not the full world - that one is not portable.

What you need to know about when it is written:

  • On the timer. Every SaveInterval seconds, 600 by default. Ten minutes of progress is the default exposure.
  • On a clean stop. Stopping the server normally saves first. Watch for the save line in the console before you assume it did.
  • Not on a kill. A killed process, an out-of-memory stop or a host crash loses everything since the last timer save.

Shortening SaveInterval to 300 costs a brief hitch every five minutes and halves what a crash can take. On a big world the hitch is noticeable, so that is a trade rather than a free win. The built-in behaviour is not a backup either way: it overwrites the same slot, so a world that saves in a broken state saves over the good one.

Real backups are copies of the Saves folder kept somewhere else, on a schedule, tested occasionally. Backups that actually restore is about the testing half, which is the half people skip. On RE:NODE the plans include backup slots, backups are stored off the machine they protect, restoring is one button, and the Schedules tab will take a nightly copy on a cron expression. Worth pairing with the memory behaviour: if the server hits its limit the container is stopped and restarted clean rather than left to swap, and a clean restart of a Sons of the Forest server still costs you whatever happened since the last save.

Updates, performance and troubleshooting#

Client and server must be on the same build. After a game patch, run app_update before anyone tries to join, because the error a mismatched client gets is not helpful. Save compatibility across patches has generally held, but a major update is exactly the moment to take a manual backup first.

The server does not appear in the list. Check all three UDP ports, check LanOnly is false, then wait - the list is slow to refresh. Joining directly by address is the test that separates a browser problem from a server problem.

Players connect and then hang on loading. Port 9700 is closed. This is the single most common failure and it looks nothing like a port problem.

The server refuses to start and names the config. The JSON did not parse. The configuration couldn't be read without error means malformed JSON - a trailing comma after the last key, or a smart quote pasted in from a web page. A message naming a single setting means a value out of range. Run the file through any JSON validator before restarting.

`UDP 8766 is closed` or similar, from the self-test. On start the server probes its own public address to check each port, and that probe only succeeds if your network reflects traffic back to itself. Behind NAT without hairpin support it fails on a server that works perfectly. Confirm from outside that a player can join, then set SkipNetworkAccessibilityTest to true.

`Failed to get public ip from Steam`. The server needs a routable public IPv4 address. IPv6 alone is not supported.

The world reset. SaveMode is New, or SaveSlot changed. The old slot is still on disk - stop the server, set the values back, and it returns.

Memory climbs steadily. Normal on a world being actively explored and built. A scheduled daily restart keeps it flat, which is the argument in restart schedules that help. If it climbs to the limit in hours rather than days, the world has outgrown the plan.

The start-up network test fails but the server works. Set SkipNetworkAccessibilityTest to true, after you have confirmed players can actually join.

FAQ#

How many players can a Sons of the Forest server hold?

Eight. The cap is in the game, so no host can sell you more, and MaxPlayers above eight is ignored. Setting it lower is useful if you want to keep the group small and the memory use down.

Does the dedicated server run on Linux?

Not natively. Endnight ships a Windows build only, so on Linux it runs under Wine or Proton. That works well enough that most hosting is done exactly that way, but it does mean the paths in any guide are Windows paths and the log is a Windows log.

Why does my server need 8 GB when The Forest ran in 3?

Because it is a much larger world with far more simulated detail, built on a newer engine. The first game's server is genuinely light; this one is not. Budget 8 GB for a normal group and 10 to 12 for a long-lived eight-player world.

Can I move an existing world onto the dedicated server?

A multiplayer world you hosted yourself, yes. Copy the numbered folder from your Saves\<SteamID64>\Multiplayer directory into the server's Saves/DedicatedServer/Multiplayer, rename it to the ten-digit slot number, and point SaveSlot at it. Structures and world state come over; inventories usually do not. A single-player save or a world you only joined is a different shape and will not transfer.

Are there admin commands or RCON?

No. There is no RCON port, no console command set and no chat commands. Administration is the in-game panel, available to the Steam IDs listed in ownerswhitelist.txt, and it covers kick and ban and nothing else.

Does Sons of the Forest support mods on a dedicated server?

There is no supported mod API, and nothing the developer documents. Community loaders exist and break with every patch, and a modded server is a server that needs every player running the same unofficial code. For a group of friends that is workable; for anything public it is not worth the maintenance.


Comments

Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.

0/2000