Publishing a mod
GitHub release
A mod is one DLL plus optional files. Do not commit the build output (bin/, obj/) or the interop/ folder: the interop assemblies are generated
from your own copy of the game and contain the game's code, so they cannot be shared. For the same reason a CI service (GitHub Actions) cannot build a mod that
references them; build on your machine.
dotnet build -c Release --no-incremental(a plaindotnet buildmay skip compiling when it thinks the DLL is up to date;--no-incrementalalways compiles).- Zip
YourMod.dll(and any files it needs) asYourMod-1.0.0.zip. - On GitHub create a release with the tag
v1.0.0and attach the zip. Players copy the DLL toBepInEx/plugins.
Thunderstore
A Thunderstore package is a zip with these files at its root:
| File | Content |
|---|---|
manifest.json |
name, version_number, website_url, description, dependencies |
README.md |
The page shown on Thunderstore |
icon.png |
256x256 picture |
YourMod.dll |
The mod. Put it in a plugins folder if you want the archive to merge into the game folder by hand. |
List other mods in dependencies (for example UiKit) in the form Author-Name-1.0.0, instead of copying their DLLs. Mod managers install dependencies
automatically. In code add [BepInDependency("plugin.guid")] so that the dependency loads first.
Tip
Test the package by installing it with a mod manager into a clean game folder before you upload it.