ValheimTune
Server-side performance patches for Valheim dedicated servers. Object sync 4.1ms -> 0.09ms per call on a 700k-object world. Players install nothing, wire format untouched. Valheim 1.0 ready.
About this mod Author’s original text
ValheimTune
✅ Valheim 1.0.17 ready
0.7.9 runs on game 1.0.17 (network version 40), and still on 1.0.16, 1.0.15,
1.0.14 and 1.0.12 (40) and 1.0.7 (39). 0.7.9 is 0.7.8 rebuilt for 1.0.17;
0.7.7 fixed three vanilla bugs any 1.0
server has — player edits skipped by the incremental save, spawners duplicating
creatures after a restart, and a 100 ms server freeze on every disconnect — plus
two sync gaps found in review. It has not been booted on 1.0.17 — read the
CHANGELOG before you deploy it.
Upgrading from 0.7.6, 0.7.7 or 0.7.8 needs no config edit.
Running game 0.221.12? Use 0.6.0 instead — the
version gate will refuse to apply these patches to an older build.: Akoozie-ValheimTune
Makes a Valheim dedicated server with a big base and a handful of players feel
like a small one.
Server-side only — players install nothing. Every change is on the server,
the wire format is untouched, and vanilla clients connect exactly as before.
game 1.0.17, 1.0.16, 1.0.15, 1.0.14 and 1.0.12 (network version 40), 1.0.7 (39), dedicated server only
needs BepInEx 5.4.x
status 0.7.9 (= 0.7.7 code) is the 1.0.17 rebuild with 0.7.7's vanilla bug fixes. Every method this
plugin patches is byte-identical between 1.0.16 and 1.0.17
(decompile diff), it compiles against the 1.0.17 assemblies and
its unit tests pass - but it has NOT been booted on 1.0.17. 0.7.0
WAS verified live on 1.0.7, 2026-09-09: 698,000 objects, a
12,000-instance base, 2-6 players.
Why
Measured on that server, not modelled:
| | Vanilla | ValheimTune |
|---|---|---|
| Sync scan, per player per round | 4.1 ms | 0.07 ms |
| Autosave | 381 ms freeze in one frame | 6 ms slices over ~350 frames |
| Join sync cost | ~11 ms per call | ~5.5 ms |
| Join stream rate | 1,261 objects/s | 3,617 objects/s |
| Server frame rate | 30 fps, hard-capped | 60 fps |
| Relayed updates, 2 players at a base | baseline | ~55 % fewer |
Every knob defaults to vanilla except the ones proven live. What each number
comes from is in How it works.
Requirements
- Valheim dedicated server (Steam app 896660). Not the in-client host.
- BepInEx 5.4.x for Valheim (BepInExPack_Valheim).
- Game version listed in [Compat] KnownGoodBuilds (currently 1.0.7, 1.0.12, 1.0.14, 1.0.15, 1.0.16, 1.0.17).
On any other version the plugin runs in vanilla + measurement mode and says
so in the log.
Install —
Akoozie-ValheimTune. Note that mod managers install to a client profile; for
a dedicated server you still need the DLL on the server, so the manual
steps below are the normal route.
- Install BepInEx on the server. With the lloesche/valheim-server Docker
image that is BEPINEX=true in server.env.
- Drop ValheimTune.dll into BepInEx/plugins/ (Docker:
config/bepinex/plugins).
- Restart. The config file appears at BepInEx/config/akoozie.valheimtune.cfg.
- Check the log for:
[ValheimTune] 0.7.9 loaded on game 1.0.17 (net 40), 18 methods patched, replacements on
[ValheimTune] SendZDOs window 10240/2048, 3 constants replaced (expected 3)
Recommended settings
What runs on the reference server. Apply one at a time and read the stats line
between changes. Most knobs take effect within 5 seconds without a restart.
[Server]
TargetFrameRate = 60
[Sync]
SendWindowBytes = 32768
MinHeadroomBytes = 4096
AllPeersPerRound = true
RelayMinIntervalMs = 200
[Steam]
SendRateMaxBytesPerSec = 1048576
DirtySets and TopKSort are already on by default.
Upgrading from an earlier release
Drop the new DLL in and restart - no config edit needed. A new plugin
version never rewrites an existing akoozie.valheimtune.cfg (BepInEx only
writes a default when the key is absent), so your file still says
KnownGoodBuilds = 1.0.7. As of 0.7.1 that no longer costs you anything: the
list shipped in the release is treated as a floor, and your config can only
add to it. You will see this once on boot:
[ValheimTune] game 1.0.17 is not in your KnownGoodBuilds (1.0.7) but ships in
this release (1.0.7, 1.0.12, 1.0.14, 1.0.15, 1
Install & use Install: BepInEx plugin
- The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
- Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
- Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
- Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.
Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file. In multiplayer, the host and every client need the same mods installed.
Install these first, or the mod will not work: