About SmoothServer
From ThunderstoreNetworking and performance tuning for Valheim dedicated servers: send cadence, adaptive per-peer budgets, async save, telemetry. Optional client half adds zstd compression and a shared map.
SmoothServer
> Actively maintained for Valheim 1.0. Rebuilt for 1.0.7 on launch day and kept current as patches land; > version 1.x of the mod is in the works. Bugs and ideas: GitHub issues. > > Designed and thought up by Nosferatu from real pain points hit running a co-op server. > Coded using Claude, tested by humans.
Networking and performance tuning for Valheim dedicated servers — and, since 0.3.0, an optional client half in the same DLL.
The server half is the point of the mod and it still needs zero client installs: [General] EnforceClientMod defaults to false, so vanilla players can always join. Install the same package on players' machines as well and you additionally get packet compression, a client send budget and a server-wide shared map.
Installing
Server admins — install into the server's profile (BepInEx/plugins/SmoothServer/). Everything under "Server modules" below starts working immediately; nobody has to install anything. Config file: Nosferatu.SmoothServer.cfg in the server's BepInEx/config/.
Players — install into your own profile only if the server also runs SmoothServer 0.3.0+. [General] Mode is Auto: a dedicated server runs the server half, your game runs the client half. You get compression, the client send budget and the shared map; server-owned settings are pushed to you by the server.
The package contains six DLLs, not one: SmoothServer.dll plus ZstdSharp.dll, System.Memory.dll, System.Buffers.dll, System.Numerics.Vectors.dll and System.Runtime.CompilerServices.Unsafe.dll (the zstd codec and its dependencies — none ship with Valheim or BepInEx). A mod manager handles this; hand-installers must copy all six.
Mods this replaces — uninstall them first
| Uninstall | Replaced by | Where | | --- | --- | --- | | CW_Jesse / BetterNetworking | Compression + SteamRates + SendQueueGuard | server and clients | | Mydayyy / ServerSideMap | SharedMap | server and clients |
Both must go from every machine. If BetterNetworking is still installed, Compression refuses to patch (FAILED(...) in the module summary) and the rest of SmoothServer loads normally — it will not break your server, it just will not compress. SharedMap imports an existing <world>.mod.serversidemap.explored file once on first start, so no exploration is lost.
Server modules
Each module has its own Enabled toggle in its config section.
- Telemetry
[Telemetry]— periodic fps / frame-time / ZDO-rate log line. No gameplay effect. - FrameRate
[FrameRate]— raises the dedicated server's Unity frame cap. 60 is a good
default on modern hardware: roughly +4pp of one CPU core for half the tick latency.
- SendCadence
[SendCadence]— sends ZDO updates to every peer on a fixed interval
(SendHz, default 20) instead of vanilla's one-peer-per-frame round robin. Scales with player count.
- SendBudget
[SendBudget]— the ZDO send-queue high-water mark and minimum chunk size,
exposed as config: HighWaterBytes defaults to 65536 (vanilla 10240), MinChunkBytes to 2048 (same as vanilla). Acts as the fallback when AdaptiveBudget is off.
- CreateBudget
[CreateBudget]— objects created per frame, exposed as config (default
matches vanilla, i.e. a no-op until raised).
- PeerTelemetry
[PeerTelemetry]— per-peer ping, throughput and Steam send-queue sampling.
No patches; feeds AdaptiveBudget.
- AdaptiveBudget
[AdaptiveBudget]— a per-peer send budget from each peer's measured
bandwidth-delay product, clamped, EMA-smoothed, and backed off while Steam's pending byte count says the pipe is congested. A player on fibre next door and one on satellite no longer share one number.
- SteamRates
[SteamRates]— raises Steam'sSendRateMax(default 1 MB/s).
SendRateMin stays at vanilla on purpose: it is a floor on Steam's own bandwidth estimate, and raising it stops the congestion controller backing off for weak connections.
- SendQueueGuard
[SendQueueGuard]— defers, never drops, while a peer's Steam send queue is
backed up, and survives the Steamworks throws that can occur mid-handshake.
- SyncListCache
[SyncListCache]— caches the per-peer sector scan inZDOMan.CreateSyncList
briefly; the filter and sort still run on every send.
- VPOServer
[VPOServer]— the server-safe parts of ValheimPerformanceOptimizations (MIT):
WearNTear support caching and a faster ReleaseNearbyZDOS scan.
- AsyncSave
[AsyncSave]— pre-sizes the save clone list. Measured on a 136 000-ZDO world,
main-thread autosave stall 67 ms → 47 ms and 78 ms → 45 ms.
- GcThrottle
[GcThrottle]— rate-limitsResources.UnloadUnusedAssetson an idle server. - OwnershipRelease
[OwnershipRelease]— shortens the ZDO ownership-release interval from
vanilla's 2 s (default 0.5 s) so objects change hands faster as players move.
- MapSelfTest
[MapSelfTest]— headless unit tests for the shared-map codec at load; shows up
as applied PASS in the module summary.
- PriorityLane
[PriorityLane]— both ends. Holds this machine's outgoing backlog in a
priority queue instead of letting it pile up inside Steam's own buffer, and hands Steam only about one bandwidth-delay product at a time, latency-critical traffic first. A melee hit no longer waits behind tens of kilobytes of bulk world data: the residual delay drops from the 80–430 ms band to roughly 25 ms. Unmodded clients benefit too — only the send order changes, every byte stays vanilla. Coexists with SendQueueGuard and Compression; the ordering rules that keep it safe (never let a destroy overtake the object it destroys, never promote a message whose target the receiver has not been sent, never cross Compression's handshake) are unit-tested at load.
Highlights
From source dataLoaders
Runs on BepInEx.
Footprint
Rated a light load on a server.
Last update
Its author last shipped an update 43d ago.
SmoothServer 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 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.6.1, released 2026-09-22
Game versions by loader
| Loader | Game versions | Newest |
|---|---|---|
| BepInEx |
From 10 recorded builds of SmoothServer.
Recent builds
| Build | Released | Game versions | Loaders |
|---|---|---|---|
| 0.6.1 | 2026-09-22 | n/a | BepInEx |
| 0.6.0 | 2026-09-18 | n/a | BepInEx |
| 0.5.3 | 2026-09-17 | n/a | BepInEx |
| 0.5.2 | 2026-09-17 | n/a | BepInEx |
| 0.5.1 | 2026-09-16 | n/a | BepInEx |
| 0.5.0 | 2026-09-09 | 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 SmoothServer 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 catalogPerformance
Makes the game or server run faster or lighter without changing how it plays.
Compatibility
- Game
- Valheim
- Loaders
- BepInEx
- Requires
- One-click install needs a BepInEx server.
Verified at the source
- ✓ThunderstoreOfficial listing, checked 2026-10-01Open ↗
- ✓AuthorNosferatu, as published on Thunderstore
- ✓LicenseNot published by the sourceFree






