Guide
BepInEx, and why half the games you mod use it
One loader turns up in hundreds of Unity games, from Lethal Company to Valheim. What it is, how it patches a game that was never meant to be patched, and how to tell when it is the thing that broke.
2 min read · updated 2026-08-01
If you have modded a Unity game in the last few years you have installed BepInEx, probably without being told what it was. It sits underneath a large share of the games indexed here, which makes it worth understanding once rather than following instructions for it forever.
What it is
Unity games ship their code compiled into assemblies. There is no plugin folder, no documented interface, and nothing in the game expecting anybody else's code to show up.
BepInEx puts itself in the loading path before any of that happens. It hooks the runtime that is about to start the game, loads its own plugins, and lets them rewrite the game's methods in memory. When the game finally starts, the code running is not the code shipped.
That is why installing it means dropping files next to the executable rather than into a mods folder. It has to be in position before the game exists.
Why version 5 and version 6 are not the same thing
This causes more failed installs than anything else in the ecosystem.
They are different generations with different internals, and a plugin built against one will not load on the other. It usually fails silently: no crash, no message, the mod is simply not there. People then reinstall the mod, which does nothing, because the mod was never the problem.
Every mod that needs BepInEx says which line it wants. That is the number to match, before anything else.
Mono and IL2CPP
Unity games ship in one of two forms. Mono keeps the code in a form BepInEx can read and patch fairly directly. IL2CPP compiles it to native code first, which is much harder to reach into, and needs a different BepInEx build with extra machinery.
You do not have to know which your game is, but you do have to download the build that says it. Getting this wrong produces the same silence as the version mismatch.
The first thing to check when nothing works
Look for the log file that BepInEx writes on startup, next to the game executable.
If there is no log, the loader never ran, and everything you install after that is irrelevant. That is an installation problem: files in the wrong place, or the game being launched through something that bypasses the loader.
If there is a log, read the top of it. It says which plugins it found and which it refused, and the refusals name themselves. Nine times out of ten the answer is already in there.
When a game update lands
Because BepInEx patches compiled internals, a game update can move the ground under it, not just under your mods. When everything stops at once and the log is empty or full of errors before any plugin loads, the loader is what needs updating, and no amount of reinstalling mods will help until it does.
Frequently asked
Do I need BepInEx for every game?
Only for the ones whose mods ask for it, which in practice means most Unity games with a modding scene. Games with an official mod system of their own do not use it.
Which version should I install?
Whichever the mods you want name. Version 5 and version 6 are not interchangeable, and mixing them is the single most common cause of nothing loading.
How do I know it is even running?
It writes a log the first time it starts and creates folders next to the game executable. If neither appeared, the loader never ran and nothing else you install will work.
It worked yesterday and now nothing loads.
The game updated. Unity games are patched by matching against compiled code, so an update moves what the loader was holding on to. Check for a new BepInEx build before you blame a mod.