About SpreadTheLoad
From ThunderstoreServer-side performance optimization for multiplayer: moves object ownership off a struggling client so other players stop inheriting its lag and desync. Valheim never rebalances who simulates what; this does. No client install needed.
SpreadTheLoad
Server-side performance optimization for Valheim multiplayer. It moves object ownership off a struggling client so that everybody else stops inheriting that machine's lag.
Install on the dedicated server only. No client needs it, including players running no mods at all. There is no prefab, no RPC and no version check, so nobody is locked out.
The problem
Valheim simulates each creature, ship and workbench on exactly one machine: whichever client owns it. Ownership goes to whoever was in range first, and vanilla never rebalances it — whoever loads a zone keeps it until they walk away.
That is fine until the owner is the slowest machine in the group. Then every arrow you fire at a creature it owns, and every swing at a tree it loaded, travels to that machine and back before anything happens. Its frame time becomes your input delay, and the lag you feel has nothing to do with your own hardware or your ping to the server.
Measured on a three-player server: two clients averaging 18 ms a frame, one at 63 ms, and a round trip through the slow one of 144 ms against an 18 ms ping to the server.
What it does
Three things, all server-side:
- Objects follow whoever is using them — a tree or ore vein moves to the player chopping it
- Ships follow whoever is steering — vanilla picks an arbitrary passenger instead
- Named or detected struggling machines are steered away from shared work
For the third: name the players whose machines should not be handed shared work, and the server stops giving them objects that somebody else is also standing near — and hands back the ones they are already holding, which vanilla will not do on its own.
They still own anything only they are near, so nothing is ever left unsimulated and no creature freezes. When they are the only player in a zone, nothing changes at all.
What it does not do
It will not improve the frame rate of the machine it steers away from. Ownership costs that machine CPU, and a struggling client is usually short of something else — on the server this was built for, the slow client was using less CPU than the healthy ones while rendering a third as many frames. Measurement there found ownership made no difference to its frame time either way.
This mod protects the other players. If you want the slow machine itself to run better, that is a graphics settings and hardware question, and [DiagnoseServerLag][dsl] will tell you which.
Configuration
BepInEx/config/DeathMonger.SpreadTheLoad.cfg, generated on first run.
| Setting | Default | Meaning | | --- | --- | --- | | Enabled | true | Turn off for stock behaviour without removing the mod. | | Yield Players | (empty) | Who to steer work away from. Empty means the mod does nothing. | | Remember Ids | true | Learn and remember network ids, so names keep working. | | Log Activity | false | Occasional summary line; never one line per object. | | Ownership Follows Attacker | true | Give a tree, rock or ore vein to whoever is hitting it. | | Attacker Dwell Seconds | 5 | How long it stays put afterwards. | | Auto Detect Struggling Players | false | Find struggling machines without naming anyone. | | Stalls Per Minute | 6 | How many stalls a minute before flagging someone. | | Assign Ship To Captain | true | Give a ship to whoever is steering it. | | Yielding Player Retains Boat Helm Ownership | true | Whether a yielding player keeps the helm when they steer. |
Naming players
Yield Players takes Steam ids or character names, comma separated.
A character name is not an identity — the same person on a second character stops matching, and somebody else picking that name starts matching. So a name is used once, to find the player; their network id is then written to SpreadTheLoad-known-ids.txt beside the config, and from then on they are matched by id whatever they call their character. Delete a line from that file to forget someone.
Steam ids are the reliable thing to enter. The server logs them as Got connection SteamID 7656119... whenever somebody joins.
Detecting struggling players automatically
Yield Players requires you to know who is struggling. Auto Detect Struggling Players works it out instead — off by default, because deciding on its own to move work away from someone is a judgement you should opt into.
It does not use ping or connection quality, and that matters. The client this mod was written for had a 24 ms ping — better than one of the healthy players — a clean connection, and 16 frames a second. Every network-level measurement the server can take said it was fine.
What the server can see instead is timing. A client's ZDO updates come from its own update loop, so they arrive at whatever pace that machine manages. The rate is useless — the sender is gated at about 20 Hz, so 30 fps and 200 fps look identical — but the gaps are not. A 479 ms frame, the worst measured on that machine, is a 479 ms hole in the stream, and no healthy client produces one.
So a stall is a gap over 0.3 s, and a player is flagged above Stalls Per Minute averaged over two minutes. Clearing the flag takes five clean minutes — deliberately harder than earning it, so a borderline machine does not flap ownership back and forth.
Honest limits:
- A gap says that machine stopped sending, not why. A frozen client and a hiccuping connection
look the same. That's acceptable, since routing other players' work through either is a bad idea.
- The last healthy player on the server is never flagged. If everyone is struggling there is nobody
to hand work to, and flagging everyone would only churn ownership.
- Flags live in memory only. They are never written to the known-ids file and are dropped when the
player disconnects — that file is for identities you chose, not guesses the mod made.
Chopping, mining and anything else you hit
Highlights
From source dataLoaders
Runs on BepInEx.
Footprint
Rated a light load on a server.
Last update
Its author last shipped an update 21d ago.
SpreadTheLoad on Nxeon
From our catalogue- One-click install
- Supported on Nxeon Valheim servers, for BepInEx servers. We download it from Thunderstore, place it, and restart the server.
- Server side
- Required on the server
- Server type needed
- BepInEx
- Server load
- light
- Smallest plan we suggest
- Valheim — 4 GB (4 GB RAM). This follows our own load rating above, not a benchmark.
- Latest build
- 0.3.0, released 2026-10-14
Game versions by loader
| Loader | Game versions | Newest |
|---|---|---|
| BepInEx |
From 5 recorded builds of SpreadTheLoad.
Recent builds
| Build | Released | Game versions | Loaders |
|---|---|---|---|
| 0.3.0 | 2026-10-14 | n/a | BepInEx |
| 0.2.2 | 2026-10-05 | n/a | BepInEx |
| 0.2.1 | 2026-09-30 | n/a | BepInEx |
| 0.2.0 | 2026-09-29 | n/a | BepInEx |
| 0.1.4 | 2026-09-28 | n/a | BepInEx |
Dependencies
- Required: BepInExPack Valheim
Declared by the newest build that lists any. Required ones are installed with it on one-click installs.
Run SpreadTheLoad on a Valheim server
Pick a server or deploy a new one above; it is installed in one click.
What kind of mod it is
From the catalogQuality of life & UI
Small conveniences, tweaks and interface improvements players notice straight away.
Runs on your server
From source side supportThunderstore lists SpreadTheLoad as required on the server. Check its Thunderstore page to see whether players need it too.
Compatibility
- Game
- Valheim
- Loaders
- BepInEx
- Runs on
- Serverrequired on the server
- Requires
- One-click install needs a BepInEx server.
Verified at the source
- ✓ThunderstoreOfficial listing, checked 2026-10-15Open ↗
- ✓AuthorDeathMonger, as published on Thunderstore
- ✓LicenseNot published by the sourceFree




