Releases: BepInEx/BepInEx
BepInEx 6.0.0-pre.2
NOTE: This is a pre-release of a major version of BepInEx. BepInEx 5 plugins will not work with this release yet.
About upgrading
This release is mainly meant for those who use current Bleeding Edge builds to mod Il2Cpp games. If you want to use this release, follow this upgrade guide:
- If you use BepInEx 5: Stay on BepInEx 5! The current pre-release does not support loading BepInEx 5 plugins, and there are many issues.
- If you use BepInEx Bleeding Edge builds (builds 697 down to 577): It is recommended that you upgrade to this pre-release and stay on it to ensure all your plugins keep working. Builds after 6.0.0-be.697 will bring many breaking API changes in preparation for the first stable v6 release.
- If you want to mod new Unity Mono games: Consider using BepInEx 5! The API is still stable, and BepInEx 6 will eventually include support for loading BepInEx 5 plugins!
- If you want to mod new Il2Cpp games: Consider using this release until the stable v6 release, or until bleeding edge builds enter the RC (release candidate) stage.
Changelog
The changelog is concerning BepInEx 6.0.0-pre.1
Merged PRs
- Restructure project, add Doorstop 4 support, use CoreCLR for Il2Cpp by @ghorsington in #391
- Add chainloader events by @js6pak in #475
- Warn about outdated wine by @js6pak in #477
- Add a config option to disable xref and disable it by default on x32 by @js6pak in #502
- Bump Il2CppInterop by @js6pak in #503
- Switch to the
development
branch of Cpp2IL by @ds5678 in #533 - Bump Cpp2IL by @Kasuromi in #560
- Bump Il2CppInterop to v1.4.4 by @Kasuromi in #561
- Bump Il2CppInterop to v1.4.5 by @Kasuromi in #564
- Bump Il2CppInterop by @Kasuromi in #647
- Don't try to parse the wine version by @js6pak in #555
- Fix argument count when launched with Steam on Linux by @zeroepoch in #563
- Bump Il2CppInterop & Dobby by @Kasuromi in #669
- Fix netfx & netcore build targets, and add target framework variants by @bbepis in #715
- Reimplement UnhollowedAssembliesPath config option as IL2CPPInteropAssembliesPath by @Kokaiinum in #734
- Fix manager GameObject not having a name by @ManlyMarco in #735
- run_bepinex*.sh: self-relaunch improvements by @astiob in #692
- Bump Cpp2IL & Il2CppInterop by @Kasuromi in #869
- Upgrade doorstop to version 4.2.0 (v6) by @aldelaro5 in #865
- Upgrade AssetRipper.Primitives to avoid implying Json 8.0.1 by @decaprime in #873
- Upgrade Doorstop to 4.3.0 (v6) by @aldelaro5 in #901
- Upgrade Harmonyx, Iced and AssetRipper.Primitives packages by @aldelaro5 in #953
New Contributors
- @ds5678 made their first contribution in #533
- @Kokaiinum made their first contribution in #734
- @decaprime made their first contribution in #873
Full Changelog: v6.0.0-pre.1...v6.0.0-pre.2
BepInEx 5.4.23.2
Doorstop has been upgraded from v3.4 to v4.3, bringing some new features for developers. It's for the most part a drop-in replacement.
- Doorstop 4 debugging works on all platforms and IDEs that supports regular unity remote debugging (previously dnspy debugging had to be used, which is windows only and can't be used with an IDE).
- It's possible to specify a custom corlib path for messing with game's mono runtime.
- The unix zip is now split into linux_x86, linux_x64 and macos_x64.
⚠️ The macos_x86 target was dropped and won't get any further releases (discussed on Discord). You can still use BepInEx 5.4.22 if it's necessary.⚠️ Settings in doorstop_config.ini were renamed, old config files will no longer work.⚠️ If you modified or wrote your own launch scripts, they may need to be fixed because the order of arguments passed to doorstop changed.- See the description of #762 for details.
What's Changed
- Upgrade Doorstop to version 4.3.0 by @aldelaro5 in #900
- Upgrade Doorstop to version 4.2.0 by @aldelaro5 in #864
- Upgrade Doorstop to version 4.1.0 by @aldelaro5 in #762
- Normalize EOL for .sln (CRLF) and .cs, .sh (LF) by @toebeann in #700
- run_bepinex.sh: self-relaunch improvements by @astiob in #693
New Contributors
- @aldelaro5 made their first contribution in #762
- @toebeann made their first contribution in #700
Full Changelog: v5.4.22...v5.4.23.1
⚠️ BepInEx 5 is in long term support (LTS) mode
BepInEx 5.4 is the last version of BepInEx 5 with major updates. Any BepInEx 5 releases starting version 5.4 will be minor and only contain fixes along with package version updates. Our main development focus now shifts to implementing BepInEx 6.
For developers: BepInEx 5 source code is now maintained on v5-lts
branch. In turn master
branch will start hosting BepInEx 6 source. All PRs regarding BepInEx 5 should be targeting that branch instead of master
.
BepInEx 5.4.22
⚠️ BepInEx 5 now enters long term support (LTS) mode
BepInEx 5.4 is the last version of BepInEx 5 with major updates. Any BepInEx 5 releases starting version 5.4 will be minor and only contain fixes along with package version updates. Our main development focus now shifts to implementing BepInEx 6.
For developers: BepInEx 5 source code is now maintained on v5-lts
branch. In turn master
branch will start hosting BepInEx 6 source. All PRs regarding BepInEx 5 should be targeting that branch instead of master
.
What's Changed
- fix: handle parameter spread for lts version by @Danielduel in #496
- Add TomlTypeConverter for UnityEngine.Rect by @ManlyMarco in #510
- Fix logging "1 plugins to load" instead of "1 plugin to load" by @ManlyMarco in #653
- Make Logger.Listeners and Logger.Sources thread safe by @ManlyMarco in #656
- Fix argument count when launched with Steam on Linux by @zeroepoch in #562
New Contributors
- @Danielduel made their first contribution in #496
Full Changelog: v5.4.21...5.4.22
BepInEx 6.0.0-pre.1
NOTE: This is a pre-release of a major version of BepInEx. BepInEx 5 plugins will not work with this release yet.
WARNING: This pre-release is fairly old and the latest IL2CPP games are unlikely to work with it. It's recommended to use the latest bleeding edge builds instead.
About upgrading
This release is mainly meant for those who use current Bleeding Edge builds to mod Il2Cpp games. If you want to use this release, follow this upgrade guide:
- If you use BepInEx 5: Stay on BepInEx 5! The current pre-release does not support loading BepInEx 5 plugins, and there are many issues.
- If you use BepInEx Bleeding Edge builds (builds 577 and lower): It is recommended that you upgrade to this pre-release to ensure all your plugins keep working. All builds after 6.0.0-be.577 will not be compatible with newer BE builds. To upgrade, simply download the appropriate ZIP below and replace your old files with the new ones.
- If you want to mod new Unity Mono games: Consider using BepInEx 5! The API is still stable, and BepInEx 6 will eventually include support for loading BepInEx 5 plugins!
- If you want to mod new Il2Cpp games: Consider using Bleeding Edge builds! Builds after 6.0.0-be.577 use updated tooling and .NET 6 for Il2Cpp. This pre-release is mainly meant for those who already have existing Il2Cpp plugins and can't upgrade at the moment.
Changelog
The changelog is concerning BepInEx 5
New features
- The project was restructured massively to allow extensibility to new game engines and runtimes
BepInEx.dll
was renamed toBepInEx.Core.dll
BepInEx.Preloader.dll
was renamed toBepInEx.Preloader.Core.dll
- Code to support Unity Mono games was moved to
BepInEx.Unity.dll
andBepInEx.Preloader.Unity.dll
- Added official support for new runtimes:
- Unity Il2Cpp: an ahead-of-time compilation tool used by Unity
- .NET Framework for games that use .NET game engines (e.g. XNA, MonoGame)
- .NET Core for games that use .NET Core-based engines (e.g. Silk)
- Added new attribute-based preloader patch syntax (Example)
- Plugin versions are now required to follow semver 2.0.0
- The
x.y.z.w
form will still be accepted, but thew
part will be ignored for all but logging purposes
- The
- Allow piping BepInEx console to Unix terminal on Wine as well (#322)
API improvements
BepInDependency
now supports specifying version ranges for the dependencies using npm version range syntaxManualLogSource
now includes overloads for interpolated string handlers to improve logging performanceConfigEntryBase
constructor is now marked asprotected
to allow use in custom config entries (#403)ConfigFile.Values
is now marked aspublic
for consistency withConfigFile.Keys
property
Dependency upgrades, new dependencies
- Updated HarmonyX to 2.10.0
- Updated MonoMod to 22.5.1.1
- Il2Cpp: Added Cpp2IL
- Il2Cpp: Added fork of Il2CppAssemblyUnhollower
- Il2Cpp: Added fork of mono runtime
Fixes
- Fixed crashes on Unity 4 games caused by
ThreadingHelper
- Improved console output on Unix (both Wine and native Unix games)
- Improved file logging especially for concurrent game runs
- Fixed multiple BepInEx instances running the chainloader at the same time (#322)
- Optimized log source and log listener event handling
- Fixed possible crashes when trying to query for Unity version (#229)
- Fixed not detecting plugins with indirect BepInEx reference (#240)
- Improved logging for plugin dependency loading errors
- Fixed possible console-related crashes in Wine (#325)
- Fixed game crashes when a console cannot be allocated on Windows
Deprecations and other housekeeping
- Removed
BepInEx.Patcher
(hardpatcher for mono and .NET games) - Upgraded all projects to the new csproj format
- Removed all submodules in favour of using NuGet to manage external dependencies
- Removed all Harmony version wrappers
- Removed the deprecated
BepInEx.Harmony
assembly - Improved ZIP naming to include consistent OS and Architecture identifiers
BepInEx 5.4.21
⚠️ BepInEx 5 now enters long term support (LTS) mode
BepInEx 5.4 is the last version of BepInEx 5 with major updates. Any BepInEx 5 releases starting version 5.4 will be minor and only contain fixes along with package version updates. Our main development focus now shifts to implementing BepInEx 6.
For developers: BepInEx 5 source code is now maintained on v5-lts
branch. In turn master
branch will start hosting BepInEx 6 source. All PRs regarding BepInEx 5 should be targeting that branch instead of master
.
Changelog
- Fixed new
Unity.InputSystem
support breaking on some Unity games (#446)
BepInEx 5.4.20
⚠️ BepInEx 5 now enters long term support (LTS) mode
BepInEx 5.4 is the last version of BepInEx 5 with major updates. Any BepInEx 5 releases starting version 5.4 will be minor and only contain fixes along with package version updates. Our main development focus now shifts to implementing BepInEx 6.
For developers: BepInEx 5 source code is now maintained on v5-lts
branch. In turn master
branch will start hosting BepInEx 6 source. All PRs regarding BepInEx 5 should be targeting that branch instead of master
.
Changelog
- Fixed
KeyboardShortcut
not working on games that useUnity.InputSystem
instead of the legacy input system- This version additionally exposes
UnityInput
to manually check for input in a library-agnostic way. Note that using this API is discouraged! Instead, useKeyboardShortcut
to ensure plugin compatibility
- This version additionally exposes
BepInEx 5.4.19
⚠️ BepInEx 5 now enters long term support (LTS) mode
BepInEx 5.4 is the last version of BepInEx 5 with major updates. Any BepInEx 5 releases starting version 5.4 will be minor and only contain fixes along with package version updates. Our main development focus now shifts to implementing BepInEx 6.
For developers: BepInEx 5 source code is now maintained on v5-lts
branch. In turn master
branch will start hosting BepInEx 6 source. All PRs regarding BepInEx 5 should be targeting that branch instead of master
.
Changelog
- Added basic fix for cases where games try to ship their own Harmony
- Updated HarmonyX to 2.9.0
- Updated MonoMod to 22.01.29.01
BepInEx 5.4.18
⚠️ BepInEx 5 now enters long term support (LTS) mode
BepInEx 5.4 is the last version of BepInEx 5 with major updates. Any BepInEx 5 releases starting version 5.4 will be minor and only contain fixes along with package version updates. Our main development focus now shifts to implementing BepInEx 6.
For developers: BepInEx 5 source code is now maintained on v5-lts
branch. In turn master
branch will start hosting BepInEx 6 source. All PRs regarding BepInEx 5 should be targeting that branch instead of master
.
Changelog
- Fixed some console messages being cut off (especially if using non-ASCII characters)
- Updated HarmonyX to 2.7.0
- Updated MonoMod to 21.12.13.01
BepInEx 5.4.17
⚠️ BepInEx 5 now enters long term support (LTS) mode
BepInEx 5.4 is the last version of BepInEx 5 with major updates. Any BepInEx 5 releases starting version 5.4 will be minor and only contain fixes along with package version updates. Our main development focus now shifts to implementing BepInEx 6.
For developers: BepInEx 5 source code is now maintained on v5-lts
branch. In turn master
branch will start hosting BepInEx 6 source. All PRs regarding BepInEx 5 should be targeting that branch instead of master
.
Changelog
- Fixed console not opening in Outer Wilds and other games that ship custom
user32.dll
BepInEx 5.4.16
⚠️ BepInEx 5 now enters long term support (LTS) mode
BepInEx 5.4 is the last version of BepInEx 5 with major updates. Any BepInEx 5 releases starting version 5.4 will be minor and only contain fixes along with package version updates. Our main development focus now shifts to implementing BepInEx 6.
For developers: BepInEx 5 source code is now maintained on v5-lts
branch. In turn master
branch will start hosting BepInEx 6 source. All PRs regarding BepInEx 5 should be targeting that branch instead of master
.
Changelog
- Fixed #303: when
DumpAssemblies
is enabled, dumped assemblies are now put toBepInEx/DumpedAssemblies/<ProcessName>
. If assembly is in use (e.g. multiple game processes open), dumped assemblies will have a number postfix. - Game executable timestamp is not included in console title now (fixes issue with some window managers)
- Updated HarmonyX to 2.5.5
- Updated MonoMod.RuntimeDetour to 21.9.19.1