List of useful development plugins

This page contains a list of useful plugins and tools you can use to make development of plugins with BepInEx easier.

BepInEx.Debug tools

Link: GitHub

Description: This is a pack of useful plugins to ease development. Below is a description of each debug plugin. You can find more specific usage guide in repository README.

ScriptEngine

Allows to reload plugins without restarting the game. Simply put your plugins into BepInEx/scripts folder and press F6 in-game whenever you want to reload a plugin.

Note that to support this your plugin needs to clean up its resources in your plugin by creating OnDestroy method and unpatching any Harmony patches along with cleaning up other resources.

Startup profiler

Logs load times for each of the plugins.

Mono Profiler

A profiler for Unity games. Logs all called methods, call counts and call times.
Outputs all data as .csv files.

Demystify Exceptions

Formats stack traces into a more human-friendly formats and attempts to properly resolve IEnumerables, lambdas and async state machines.

Runtime Unity Editor

RuntimeUnityEditor GUI

Link: GitHub

Description: Brings an extensive Unity Editor -like hierarchy explorer directly into a game. Allows you to inspect any game object and component. Additionally comes with a C# REPL and support for rotation/translation gizmos via Vectrocity.

Refer to the README for installation and usage info.

Configuration Manager

ConfigurationManager GUI

Link: GitHub

Description: Allows to edit all configuration files via an in-game GUI. Default hotkey is F1. Refer to README for more info on how to use and how to integrate into your plugin.

C# Script Loader

Link: GitHub

Description: Allows to write C# scripts without compiling them. Useful for small (under 200 LOC) Harmony patches and tools. Supports live code reloading and comes with a custom version of MCS compiler that allows you to access private methods/fields without any reflection.

Refer to the README for info on how to write scripts and current limitations.

ThunderKit (make plugins in Unity Editor)

Link: GitHub

Description: Allows you to create plugins directly in Unity Editor. With it you can easily create new assets and link them to existing or new components. Great for integrating new items, maps and whatnot into any Unity game.

The tool is being actively developed and documentation is being created. Refer to README for more information about the tool and how to install it.

Runtime MonoMod.HookGen and MMHOOK stripping

Link (HookGenPatcher): GitHub
Link (LighterPatcher): GitHub

Description: Normally using MonoMod.HookGen requires you to bundle MMHOOK.dll with your plugins and regenerate them between game updates.

This preloader patcher allows you to dynamically generate the MMHOOK.dll file on the fly when the game starts, thus removing potential problems of incompatibility between game updates.
In addition, LighterPatcher strips the generated MMHOOK.dll down to only patches that are used by the plugins, thus speeding up loading of MMHOOK DLL (in cases where type resolving is triggered for all types in MMHOOK).

Everything is done at runtime and requires no action from the end-user.