Installing Valheim Mods on Your Server with BepInEx

Most Valheim mods — bigger inventories, better maps, quality-of-life tweaks — run on BepInEx, a general-purpose modding framework for Unity games. Getting mods onto a dedicated server is a two-part job: install BepInEx and your plugins on the server, and make sure every player runs a compatible set on the client. This guide covers both, plus the rule that trips people up most: server and clients have to agree.

The golden rule: everyone matches

Valheim mods generally split into three kinds:

  • Server-side only — things the server enforces (spawn rates, some tweaks). Clients may not need them.
  • Client-side only — purely visual or UI mods that don’t touch shared game state.
  • Both — the majority. If a mod changes items, recipes, or world behavior, the server and every connecting player usually need the same version.

When a required mod is missing or mismatched, that player either can’t connect or desyncs. The safest habit for a friend-group server: define one mod list, and have everyone install exactly that list at the same versions. Sort out the list first, then install.

Step 1: Install BepInEx on the server

Download the BepInEx pack for Valheim (the denikson “BepInExPack Valheim” build) from Thunderstore — that pack is put together specifically for this game, unlike the generic BepInEx release. Unzip it and look inside: it contains a BepInExPack_Valheim folder whose contents go into your server’s root — the folder holding valheim_server.exe (Windows) or the server binary (Linux). After copying you should see, alongside the binary:

BepInEx/
doorstop_libs/        (or winhttp.dll / run_bepinex.sh, depending on platform)
start_game_bepinex.sh

BepInEx works by injecting itself when the process starts. On Windows the bundled winhttp.dll handles that automatically. On Linux you launch the server through the provided start_server_bepinex.sh wrapper (or set the LD_PRELOAD/doorstop variables the pack documents) so the loader hooks in.

If you run the Docker setup from the lloesche image, you don’t copy files by hand: set BEPINEX: "true" in your environment and the container installs the pack for you. Your plugins then go in the mounted config/bepinex/plugins folder.

Step 2: Add your plugins

BepInEx loads every .dll it finds in:

BepInEx/plugins/

Download each mod from Thunderstore, unzip it, and drop its .dll (and any folders it ships) into BepInEx/plugins. Read each mod’s page — some expect their files in a subfolder, and some depend on a library mod like Jötunn or HookGenPatcher, which you must install too. Keep every dependency at the version the mod asks for.

Step 3: First launch and config files

Start the server once through the BepInEx entry point. On the first modded boot, BepInEx generates a config file for each plugin under:

BepInEx/config/

These .cfg files are where you tune a mod’s behavior — carry weight, map settings, stack sizes, and so on. Edit them, then restart the server for changes to take effect. Check the BepInEx log (BepInEx/LogOutput.log) to confirm each plugin loaded without errors; a mod that fails here usually means a missing dependency or a version built for a different game patch.

Step 4: Get clients on the same list

The server is only half of it. Every player needs the same mods, and installing them by hand invites mismatches. Use a mod manager on the client side:

  • Thunderstore Mod Manager or r2modman both create an isolated Valheim profile, install BepInEx and your chosen mods with dependencies resolved, and launch the game with modding enabled. You can export a profile as a code or file and share it, so everyone installs the identical set in one click.

Have one person build the profile, export it, and send it to the group. Everyone imports it, and the client list now matches the server. This single step prevents the most common “why can’t I join?” headaches.

Step 5: Updating mods safely

Game patches and mod updates can break compatibility, so update deliberately:

  1. Back up first. Copy your world files (worlds_local) and your entire BepInEx folder before touching anything.
  2. Update the server’s plugins and BepInEx pack.
  3. Update the shared client profile and re-export it to the group.
  4. Restart the server and have one person test-join before the whole group piles in.

If something breaks after a Valheim update, the usual cause is a mod that hasn’t been rebuilt for the new patch yet. You can either wait for the mod author to update, or roll the server back to the previous game build until the mod catches up — which is exactly why step 1 exists.

Troubleshooting checklist

  • Nobody can connect after adding mods: a required mod or version differs between server and clients. Compare lists.
  • Server ignores BepInEx entirely: you launched the plain binary instead of the BepInEx entry point, or the loader files aren’t in the root folder.
  • A single plugin does nothing: check LogOutput.log for a missing dependency, and confirm its .dll is directly under BepInEx/plugins.

Get BepInEx installed cleanly once, standardize on a shared client profile, and modded Valheim becomes routine — add a plugin to the server, update the profile, restart, done.