The way to keep a modded Valheim group on the same mods is to build one r2modman profile, export it, and have everybody import the same thing - then copy that profile's plugins and configs onto the server. A profile code is quick and good for the first install; an exported .r2z file is the thing to keep, because it is permanent and carries the exact versions. The part that goes wrong is not the export, it is what happens afterwards: one person clicks "update all", another adds a mod they liked, and three weeks later half the group is being kicked on connect. This post covers building the profile, sharing it, pinning versions so it stays shared, and getting the same set onto a dedicated server, which r2modman does not do for you.
If you have not installed BepInEx on the server yet, start with Valheim server mods with BepInEx. This post is about distributing a mod list, not about the loader itself.
What r2modman and Thunderstore actually do#
Thunderstore is the mod repository the Valheim community uses. Every package on it has a name in the form Author-ModName, a version number, and a manifest.json that lists its dependencies by exact version - for example ValheimModding-Jotunn-2.20.0 or denikson-BepInExPack_Valheim-5.4.2202. Those strings are what a mod manager resolves.
r2modman is an open-source desktop mod manager for Thunderstore games. For Valheim it does four useful things:
- Keeps profiles, each a separate folder with its own
BepInExinstall, so a modded profile and a vanilla game never interfere. - Installs mods with their dependencies, into
BepInEx/plugins/<Author>-<ModName>/, so every mod gets its own folder and its ownmanifest.json. - Starts the game with the profile loaded ("Start modded"), leaving the Steam install untouched.
- Exports and imports profiles, which is the feature this post is about.
Thunderstore Mod Manager is the same codebase packaged with Overwolf, and Gale is a newer independent manager that reads the same packages and can import r2modman profile codes. The workflow below is written for r2modman, but the ideas carry over to both.
On Windows, r2modman keeps its data in %APPDATA%\r2modmanPlus-local\, and a Valheim profile lives at:
%APPDATA%\r2modmanPlus-local\Valheim\profiles\<profile name>\ BepInEx\ config\ mod settings core\ BepInEx itself patchers\ e.g. HookGenPatcher plugins\ one folder per modYou rarely need to type that path. Settings, then "Browse profile folder", opens it.
Building the group profile#
One person owns the list. That sounds bureaucratic for a group of six friends, but every group that does without it ends up reconstructing the list from screenshots after a patch. The owner builds the profile; everyone else imports it and does not add to it.
- In r2modman, select Valheim, create a new profile and give it a name that includes a date or a number -
Longship-2026-10rather thanModded. Names travel with the export and make it obvious when someone is on an old one. - Install the mods from the online tab. Dependencies come in automatically: install one content mod and you will usually see BepInExPack Valheim, Jotunn and HookGenPatcher appear alongside it.
- Start the game once with "Start modded" and go to the main menu. This generates every mod's config file in
BepInEx/config. Without this step the export carries no configs and everybody starts with defaults. - Edit the configs you care about with r2modman's config editor, or directly in the folder. If you are going to change server-synced values, do it on the server later - see below.
- Join a test world, check each mod does what you expect, then export.
Keep the list honest about what each mod is for. Client-only mods - minimaps, HUD tweaks, camera mods - can be in the shared profile for convenience, but the server does not need them and the group should know they are optional. Mods that change rules or content need to be identical everywhere.
Sharing it: profile code or file#
r2modman offers two export formats under Settings, then "Export profile as a code" and "Export profile as a file". The wording varies slightly between versions; both live in the profile section of Settings.
| Profile code | Profile file (.r2z) | |
|---|---|---|
| What it is | A short code that points at an upload | A zip on your disk |
| Shared by | Pasting into chat | Sending the file |
| Lifetime | Temporary; codes expire | Permanent |
| Contains configs | Yes | Yes |
| Exact versions | Yes | Yes |
A .r2z is an ordinary zip. Inside is export.r2x, a small YAML file listing every mod by name with its version and whether it is enabled, plus a copy of the BepInEx/config folder. That makes it a useful record as well as a distribution method: you can open it and read the list.
To import, everyone else selects Valheim in r2modman, goes to the profile selection screen, picks "Import / Update", then chooses "Import new profile" and either "From code" or "From file". r2modman downloads the listed mods at the listed versions and copies the configs in. The import creates a new profile; it does not touch the person's existing ones.
Codes are uploaded to Thunderstore's profile sharing service and are not kept forever, so a code posted in Discord in March may do nothing in June. Send the code for convenience, and pin the .r2z file next to it as the permanent copy. When the list changes, export a new file with a new name and replace the pinned one.
Pinning versions so everybody stays matched#
The import gives everybody identical versions on day one. Keeping them identical is a separate problem, and r2modman is built to keep mods current, which works against you here.
- Do not use "Update all". r2modman flags installed mods with newer versions available and offers to update them in one click. On a shared profile, that one click puts a single player ahead of the server and everyone else. Make it a group rule: only the profile owner updates, and only by exporting a new profile.
- Install a specific version when you need one. On a mod's page in r2modman, the download dialog lets you choose a version rather than the latest. Use it to roll a single mod back when an update breaks something.
- Treat Jotunn and BepInExPack as part of the list. They are dependencies, not background noise. A newer Jotunn on one client than on the server can cause exactly the kind of mismatch a content mod would - Jotunn explained covers why.
- Update in one batch. When a Valheim patch lands, the owner waits for mods to catch up, builds a new profile version, tests it, updates the server, and only then posts the new file. Everybody imports the new profile; nobody updates in place.
There is a cost to pinning: you will sometimes run a mod version with a known bug for a week because updating mid-week means re-sharing the profile. That is usually the right trade. Game server version pinning and rollbacks makes the general argument.
Installing the same set on the server#
r2modman manages a game client. It does not install onto a dedicated server, so the server copy is done by hand - but because the profile folder is just a BepInEx folder, it is straightforward.
First, install BepInExPack Valheim on the server itself, as described in the BepInEx server guide. Do not copy BepInEx/core or the Windows injector files from a Windows profile onto a Linux server; the pack has its own Linux start script and libraries, and the server needs those. What you copy from the profile is the mods and their settings:
| Folder in the profile | Copy to the server? | Notes |
|---|---|---|
BepInEx/plugins | Yes, minus client-only mods | One folder per mod |
BepInEx/patchers | Yes | HookGenPatcher and friends live here |
BepInEx/config | Yes | Then edit server-only values |
BepInEx/core | No | Comes from the server's own pack |
Remove client-only mods from the server copy. Most of them simply do nothing on a server, but some try to touch the interface or the camera and throw errors in a process that has neither, and every unnecessary mod is more start-up time.
The upload itself is a file transfer: zip plugins, patchers and config from the profile folder, upload the zip into the server's BepInEx directory through the file manager or SFTP, and unpack it in place. SFTP and the file manager has the connection details. On RE:NODE the file manager unpacks archives in place, so one upload of a zip is enough; on a host without that, upload the folders over SFTP.
Then start the server and read the startup log. You want one Loading [ModName version] line per mod, and the versions should be the ones in the profile. A quick way to compare is to pull the list from both sides:
# On the server, from the server root$ grep -o 'Loading \[[^]]*\]' BepInEx/LogOutput.log | sortOn a Windows client, the same file is in the profile's BepInEx folder after one modded start. If both lists are identical, the group is matched.
Configs: which side wins#
Copying BepInEx/config to the server gets everyone onto the same starting point. After that, mod configs fall into two kinds, and it matters which is which.
- Server-synced settings. Mods built on Jotunn's config sync or on ServerSync push their settings from the server to each client on connect. For these, the server's file is the truth and a client's edits are overwritten or ignored. Many such mods have a
Lock Configurationsetting that enforces this; with it on, only the server's values count. - Local settings. Everything else is read from each machine's own file. If one player changes a carry-weight value in a mod that does not sync, they play by different rules from everyone else, and nothing tells them.
The practical rule: change synced settings on the server and restart; change local settings in the profile, export a new version, and have everyone re-import. Do not ask people to hand-edit config files to match, because someone always misses one.
Profile: Longship-2026-10b (file attached, code expires)Valheim (server patch noted here), BepInExPack 5.4.2202, Jotunn 2.x.xServer updated: 2026-10-12Do not press Update all. Ask in #mods first.Troubleshooting shared profiles#
The code imports nothing or says it is invalid. It has expired. Use the .r2z file.
Import works but a mod fails to download. The exact version listed was removed or deprecated on Thunderstore. The owner needs to pick a current version, export again and re-share.
One player is kicked on connect, everybody else is fine. Their profile drifted - an update, an added mod, or they launched the wrong profile. Have them import the current file as a new profile rather than fixing the old one. Kicked for mod version mismatch shows how to read the message to find the exact mod.
The game starts vanilla. They clicked Play in Steam instead of "Start modded" in r2modman. The Steam install has no BepInEx; the profile does.
The server has the mods but they do nothing. The server started without the injector, so no plugins folder is read. Check for the BepInEx banner at the top of the log; if it is missing, the start command is not using BepInEx.
Configs on the server reset after a restart. A mod rewrites its file on start and drops keys it does not recognise. Usually the key was copied from a different version of the mod. Generate the file with the server's version, then edit it.
FAQ#
Does r2modman install mods on a dedicated server?
No. It manages a game client's profile. Install BepInExPack Valheim on the server, then copy the profile's plugins, patchers and config folders across.
How long does an r2modman profile code last?
Not long enough to rely on. Codes point at a temporary upload and expire. Share the code for convenience and keep the exported .r2z file as the permanent copy.
Can Thunderstore Mod Manager or Gale import an r2modman profile?
Thunderstore Mod Manager is built on r2modman and uses the same format. Gale can import r2modman profile codes and files. Mixing managers in one group works, but the profile owner should test with the one most people use.
Do client-only mods have to be in the group profile?
No. They are a convenience. Leaving them out keeps the profile smaller and makes it clear to everyone which mods actually have to match.
What happens if someone updates one mod on their own?
If that mod enforces a version check, they are refused at connect. If it does not, they may join and play with subtly different rules or items that do not sync, which is harder to diagnose. Either way the fix is to re-import the group's current profile.


