Sons of the Forest runs its dedicated server off one file, dedicatedserver.cfg, and it is strict JSON despite the .cfg name. Here is what every key does, the values it accepts, and a sane setting for each.
...\AppData\LocalLow\Endnight\SonsOfTheForestDS\, which the server writes on its first launch. It is valid JSON, so one trailing comma or missing quote stops the server from booting. Edit it with any text editor and restart the server to apply, or skip the hand-editing and let the generator build a clean file for you.Name, password, player cap, game mode, and save handling. These sit at the top level of the file.
| Setting | What it does | Default | Recommended |
|---|---|---|---|
| ServerName | The name your server shows in the in-game browser. Purely cosmetic, so call it whatever helps people find it. It sits at the top level of the file, outside both settings blocks. | Sons Of The Forest Server (dedicated) | Anything recognizable |
| Password | The join password. Leave it empty and anyone can connect; set a value to lock the server to people you hand it to. | (empty) | Set one for private servers |
| MaxPlayers | The concurrent player cap. Sons of the Forest caps co-op at 8 and the dedicated server obeys that ceiling, so any number above 8 is quietly ignored. | 8 | 8 |
| GameMode | Picks the difficulty the world runs on. The stock file ships as Normal, but the entire CustomGameModeSettings block is dead weight unless this is Custom, so keep it on Custom if you want your enemy and survival tweaks to register. Peaceful, Normal, Hard, Hard Survival, and Creative all ignore the custom block. | Custom | Custom |
| SaveMode | Continue resumes the world already in the slot; New wipes it and starts fresh. Custom difficulty is stamped into a world when it is created, so the first time you apply custom settings you need New or nothing takes. | Continue | New for a fresh custom world |
| SaveSlot | Which of the five save slots the server loads (1 to 5). Each slot is a separate world, so switching the slot switches the world. | 1 | 1 |
| LanOnly | Off keeps the server reachable over the internet. On restricts it to your local network, which is only useful for same-house testing. | false | false |
Bind address and the three UDP ports. Forward all three or the server never lists.
| Setting | What it does | Default | Recommended |
|---|---|---|---|
| IpAddress | The local interface the server binds to. 0.0.0.0 listens on every interface and is what almost everyone wants. This is the bind address, not the public IP players type in. | 0.0.0.0 | 0.0.0.0 |
| GamePort | The primary UDP game port. Forward it to the server machine's LAN IP or nobody connects. | 8766 | 8766 |
| QueryPort | The UDP Steam query port. This is how the server browser finds and lists you, so forward it alongside the game port. | 27016 | 27016 |
| BlobSyncPort | UDP port for syncing save data (blobs) down to joining clients. Sons of the Forest genuinely needs all three ports open, and this is the one people forget to forward. | 9700 | 9700 |
| SkipNetworkAccessibilityTest | Off runs a reachability check on boot. Turn it on only when that check is wrongly failing on a correctly forwarded box and refusing to let the server start. | false | false |
Autosave cadence, tick targets, and logging. All top-level keys.
| Setting | What it does | Default | Recommended |
|---|---|---|---|
| SaveInterval | Seconds between autosaves, default 600 (10 minutes). Drop it toward 300 if you would rather lose less to a crash. Going much lower just grinds the disk for little gain. | 600 | 300 to 600 |
| ActiveTargetFramerate | The server tick target while players are connected. 60 is fine for nearly everyone; only touch it if you are tuning a constrained host. | 60 | 60 |
| IdleTargetFramerate | The tick target when nobody is online, kept deliberately low at 5 so an empty server barely uses CPU. No reason to raise it. | 5 | 5 |
| IdleDayCycleSpeed | A multiplier on how fast time moves while the server sits empty. 0 freezes the clock, so you do not log back into a deep winter you never played through. Raise it if you want the world's seasons to keep advancing unattended. | 0 | 0 |
| LogFilesEnabled | Off keeps logs in the console only. On writes them to disk, which is what you want on an unattended box you cannot watch live. | false | true for headless boxes |
| TimestampLogFilenames | On gives each log file a timestamped name so a new run does not overwrite the last one. Only matters once Log Files are enabled. | true | true |
| TimestampLogEntries | On stamps every log line with a time. Cheap and useful for pinning down exactly when something broke. | true | true |
These live in the GameSettings block and apply in any mode, not just Custom. Watch the bare prefixes; a GameSettings key will not work in the Custom block or the other way round.
| Setting | What it does | Default | Recommended |
|---|---|---|---|
| Gameplay.TreeRegrowth | On lets felled trees grow back over time, so a long-running server does not end up a clear-cut wasteland. Off makes wood a finite resource. Note the bare Gameplay. prefix; this block applies in every game mode. | true | true |
| Structure.Damage | On lets your builds take damage from enemies and the world. Off makes bases indestructible, handy for a building-focused server. Uses the bare Structure. prefix. | true | true |
The cannibals and mutants. Everything here is read only when GameMode is Custom.
| Setting | What it does | Default | Recommended |
|---|---|---|---|
| GameSetting.Vail.EnemySpawn | On is the normal game with cannibals and mutants roaming the island. Off empties the map of enemies for a quiet exploration or building run. | true | true |
| GameSetting.Vail.EnemyHealth | How much punishment enemies soak before dropping. Accepts low, normal, or high. | normal | normal |
| GameSetting.Vail.EnemyDamage | How hard enemy hits land. low, normal, or high. This is the main how-lethal-is-the-forest dial. | normal | normal |
| GameSetting.Vail.EnemyArmour | How much incoming damage enemies shrug off before it registers. low, normal, or high. It is spelled the British way, EnemyArmour, and the server wants it exactly like that. | normal | normal |
| GameSetting.Vail.EnemyAggression | How eagerly enemies come at you instead of lurking. low, normal, or high, and high makes the island genuinely relentless. | normal | normal |
| GameSetting.Vail.EnemySearchParties | How hard cannibal groups hunt down and harass your base between raids. low, normal, or high. | normal | normal |
| GameSetting.Vail.AnimalSpawnRate | How many huntable animals roam the island, which is really your meat and hide supply. low, normal, or high. | normal | normal |
Survival pressure, scavenging, and building rules. Custom mode only.
| Setting | What it does | Default | Recommended |
|---|---|---|---|
| GameSetting.Survival.PlayerStatsDamage | How much running low on hunger, thirst, or rest actually hurts you. off, normal, or hard. Off removes the survival-needs penalty entirely. | normal | normal |
| GameSetting.Survival.ColdPenalties | How badly winter cold drains you when you are underdressed. off, normal, or hard. | normal | normal |
| GameSetting.Survival.StatRegenerationPenalty | How much being in poor condition slows your health regeneration. off, normal, or hard. | normal | normal |
| GameSetting.Survival.ConsumableEffects | How long the buffs from food and drink stick around. normal or hard, where hard is shorter and stingier. | normal | normal |
| GameSetting.Survival.BuildingResistance | How much abuse your structures take before they fail. low, normal, or high. | normal | normal |
| GameSetting.Survival.ReducedFoodInContainers | Off is normal loot. On thins out the food you find in world containers for a tighter scavenging economy. | false | false |
| GameSetting.Survival.SingleUseContainers | Off lets containers be looted the usual way. On means each container gives up its contents once and then stays empty, so there is no point re-checking a spot. | false | false |
| GameSetting.Survival.OneHitToCutTrees | Off is normal chopping. On fells any tree in a single swing, a big time-saver for building-heavy servers. Spelled OneHitToCutTrees, plural, which some guides get wrong. | false | false |
| GameSetting.Construction.NoCuttingsSpawn | Off spawns plant cuttings you can gather and replant. On disables them. Note the Construction namespace on this key rather than Survival. | false | false |
| GameSetting.FreeForm.ForcePlaceFullLoad | A free-form building placement option under the FreeForm namespace. It stays off for normal play; leave it unless a specific building guide tells you to flip it. What it changes in practice is thinly documented outside the game, so treat it as advanced only. | false | false |
Seasons, day length, and weather. Custom mode only.
| Setting | What it does | Default | Recommended |
|---|---|---|---|
| GameSetting.Environment.StartingSeason | Which season the world opens in. spring, summer, autumn, or winter. Starting in winter drops you straight into cold survival with no ramp-up. | summer | summer |
| GameSetting.Environment.SeasonLength | How long each season runs before it rolls over. short, default, long, or realistic, where realistic is the longest. | default | default |
| GameSetting.Environment.DayLength | How long a full day and night cycle takes. short, default, long, or realistic. | default | default |
| GameSetting.Environment.PrecipitationFrequency | How often rain and snow roll in. low, default, or high. | default | default |
Cheats, PvP, and the godmode switches. Custom mode only.
| Setting | What it does | Default | Recommended |
|---|---|---|---|
| GameSetting.Multiplayer.Cheats | Off is normal. On enables developer and console cheats for the server, mostly for testing or a sandbox game. | false | false |
| GameSetting.Multiplayer.PvpDamage | Whether players can hurt each other, and how much. off, normal, or hard. Off keeps the server strictly co-op. | normal | off for co-op |
| GameSetting.Survival.CreativeMode | Off is normal survival. On drops the Custom game into a creative, free-build style experience. | false | false |
| GameSetting.Survival.PlayersImmortalMode | Off means players can die. On makes them unkillable, for a pure building or exploration server. Spelled PlayersImmortalMode exactly. | false | false |
Sons of the Forest's Custom defaults already mirror Normal difficulty, so a good co-op server mostly comes down to getting the gotcha keys right and shaving a little tedium. This baseline keeps the survival tension and just makes sure your settings actually apply.
| Setting | Value | Why |
|---|---|---|
| GameMode | Custom | The only mode that reads your enemy and survival tweaks at all. |
| SaveMode | New | Custom difficulty is baked in at world creation; Continue ignores it. |
| MaxPlayers | 8 | The game's hard co-op ceiling; nothing higher takes. |
| Password | Set one | Keep randoms out of a private world. |
| SaveInterval | 300 | Halve the default so a crash costs five minutes, not ten. |
| IdleDayCycleSpeed | 0 | Freeze time on an empty server so you do not return to winter. |
| GameSetting.Multiplayer.PvpDamage | off | Strictly co-op, with no accidental friendly kills. |
| LogFilesEnabled | true | Write logs to disk on an unattended box for crash diagnosis. |
CustomGameModeSettings block is ignored unless GameMode is set to Custom, so people fill in enemy and survival values, leave the mode on Normal, and nothing changes. Second, custom difficulty locks in when a world is created, so it only takes on a fresh save. Set GameMode to Custom and SaveMode to New, or use the generator, which defaults both correctly....\AppData\LocalLow\Endnight\SonsOfTheForestDS\dedicatedserver.cfg. That is the file you edit or replace. It is strict JSON despite the .cfg extension, so a trailing comma or missing quote will stop the server booting with a parse error.MaxPlayers higher just gets the extra slots ignored..cfg name is misleading; the file's contents are strict JSON, including two nested objects, GameSettings and CustomGameModeSettings. One formatting slip and the server refuses to start. The generator outputs valid JSON so you never hit that.dedicatedserver.cfg is read at boot, not live, so edits do nothing until the next launch. Save the file and restart the server. If you rebuild it with the generator, drop the new file in place and restart.