ServerInfo
Exposes a small HTTP JSON API with a Valheim server's world name, connected players (with Steam avatars), and installed mods - built for live status pages that read it directly from the browser.
About this mod Author’s original text
Server Info
A BepInEx plugin for Valheim dedicated servers. Exposes a small HTTP API
with the world name, connected players, and installed mods (enriched with
each mod's manifest.json when it has one) — used by the project's
status page to show live server state.
Installing
Copy ServerInfo.dll into the server's BepInEx/plugins/ folder and
restart the server process — that's it. BepInEx generates
BepInEx/config/Odin_Sons.ServerInfo.cfg on first run with every setting
below at its default, so there's nothing else to set up before it works.
Network setup
The plugin runs its own HTTP server; it doesn't need nginx or any other
reverse proxy in front of it. Two things to check on a fresh server:
- Firewall / port forwarding. Whatever port you configure (8880 by
default) needs to be reachable from wherever your status page or
browser calls it from — open it in your firewall, and forward it on
your router if the server is behind NAT.
- Windows: URL reservation. HttpListener needs an admin-granted
reservation before a non-admin process can bind a port for all hosts.
This only controls which local Windows accounts may bind that port —
it has no effect on network access, which is what the firewall step
above is for. If the log shows an access error on startup, find the
account actually running the server (whoami) and run once as
administrator (replace 8880 and YOUR_USERNAME):
netsh http add urlacl url= user=YOUR_USERNAME
If you're not sure which account will run it (e.g. a service manager
that may change this), user=Everyone always works but lets any
local account on the machine claim that reservation too — fine on a
single-user machine, worth avoiding on a shared one.
Cross-origin requests are controlled by two settings, both under [Server]:
- Domain — the public domain or IP this server is reachable at.
Empty by default. It isn't used by the plugin for anything except
gating the next setting — think of it as "this server is ready to be
public" rather than an address the plugin acts on.
- AllowedOrigin — who's allowed to read the response from a
browser. Defaults to * (any site), but is only actually sent once
Domain is set — so a fresh install doesn't advertise a CORS policy
for a server that isn't publicly reachable yet.
If your status page reads this endpoint directly from the browser, set
Domain to this server's real address and, if you want to restrict who
can read the response, set AllowedOrigin to the status page's exact
origin (scheme+host+port, e.g. — the
browser requires an exact match, so a domain that merely points at the
same server doesn't count as the same origin).
Configuration
Set via BepInEx/config/Odin_Sons.ServerInfo.cfg. Numeric settings
declare an acceptable range — BepInEx clamps an out-of-range value in
the file to the nearest bound instead of accepting it as-is, and any
BepInEx config-editor mod (e.g. Configuration Manager) renders them as a
bounded slider rather than free text.
[Server]
| Key | Type | Default | Range | Meaning |
|---|---|---|---|---|
| Port | Int32 | 8880 | 1–65535 | HTTP port for the web server. |
| ServerInfoPath | String | /serverinfo | — | URL path the server info endpoint is served on. |
| Domain | String | (empty) | — | This server's public domain or IP. Gates AllowedOrigin — see below. |
| AllowedOrigin | String | * | — | Value sent as Access-Control-Allow-Origin, only once Domain is set. |
| RequestTimeoutSeconds | Int32 | 5 | 1–60 | How long a request waits for the game's main thread before timing out. |
[Cache]
| Key | Type | Default | Range | Meaning |
|---|---|---|---|---|
| CacheIntervalSeconds | Int32 | 5 | 1–3600 | How often the server/player list is recomputed. |
| AvatarCacheMinutes | Int32 | 60 | 1–1440 | How long a fetched avatar URL is reused, and how long an inactive player's entry is kept. |
[Steam]
| Key | Type | Default | Meaning |
|---|---|---|---|
| SteamApiKey | String | (empty) | Optional; w
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: