MonkeyLoader 0.28.2-beta

This is a prerelease version of MonkeyLoader.
dotnet add package MonkeyLoader --version 0.28.2-beta
                    
NuGet\Install-Package MonkeyLoader -Version 0.28.2-beta
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MonkeyLoader" Version="0.28.2-beta" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MonkeyLoader" Version="0.28.2-beta" />
                    
Directory.Packages.props
<PackageReference Include="MonkeyLoader" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MonkeyLoader --version 0.28.2-beta
                    
#r "nuget: MonkeyLoader, 0.28.2-beta"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package MonkeyLoader@0.28.2-beta
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MonkeyLoader&version=0.28.2-beta&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=MonkeyLoader&version=0.28.2-beta&prerelease
                    
Install as a Cake Tool

MonkeyLoader

<img align="right" width="128" height="128" src="./Icon.png"/>

A convenience and extendability focused mod loader using NuGet packages.

Online Documentation is here.

Resonite Game Pack

ResoniteModLoader Game Pack

What's this?

MonkeyLoader is a mod loader that aims to combine easy usability for developers and users, while also offering a feature rich platform. It started with me wanting to use the break in mod compatibility, caused by the release of Resonite, to develop something with support for pre-patching (modifying assemblies before they're loaded), without relying on the game's plugin system, and with a focus on improving dependency resolution.

To start with this, I asked other active developers in the general modding community, what they would like to see as features in a new mod loader. It became clear, that main requests were:

  • Being able to use it as a library from a custom launcher
  • Automatic load order and patch sorting
  • Easy distribution of assets with mods, without messy files
  • Dependency resolution capabilities

Using NuGet packages (.nupkg) files to distribute and load mods from came as a natural conclusion from the last two points. As fancy zip files, they make it easy to bundle assets (like debug symbols, 3D models, textures, ...) for the mod into one file, without creating an enormous and opaque DLL file. Further, they include metadata that can be read without having to load the DLLs, which allows checking whether all dependencies are available and otherwise restoring them. For mod distribution and dependency resolution, custom NuGet feeds can be used: Mod authors can have their own feeds for mods, and community groups could set up feeds for "vetted" builds as well. Other general libraries can be loaded from custom feeds or the general nuget.org one too.

Features

Below you can find an overview of the (planned) features. Help is always wanted and appreciated, feel free to ask here, or on Telegram or Discord.

  • Fully usable as a library by custom launchers / wrappers
  • Multiple, configurable loading locations for mods
  • Add mods and their dependencies from customizable NuGet feeds (not yet)
  • Pre-patching of assemblies - modify the IL that gets loaded
  • Game specific integration through GamePacks
    • Extra hooks, JsonConverters, feature lists, etc.
  • Configuration system with config files for each mod
  • Load mods in topological order (respecting dependencies)
    • Otherwise smartly order mods' patchers based on which features they affect how much

How it Works

This is the order of operations that MonkeyLoader executes on startup:

  • Catalogue all assemblies of the game
  • Load the metadata of all GamePacks and mods
  • Load and run the pre-patchers of GamePacks, then of mods
  • Save all modified assemblies to disk and load all assemblies of the game
  • Load and run the patchers of GamePacks, then of mods

After that, the game can proceed with its initialization and startup. GamePacks may provide extra hooks for patchers that need some things to already be set up. For example the Unity pack ads a hook for patching after the first scene has been loaded - otherwise, the dynamic binding of Unity engine methods fails and everything breaks.

Creating a Mod

Someone from the Resonite community has created a Template, which covers both the regular RML and MonkeyLoader.

Otherwise, the general steps are:

  • Create a class library in Visual Studio, targeting the .net version of the game
  • Reference MonkeyLoader from NuGet (eventually, for now from your install)
  • Reference the GamePacks you need from NuGet (eventually, for now from your install)
  • Make sure to split up pre-patcher and patcher assemblies
    • Pre-patchers must not reference any game assemblies directly, or pre-patching won't work
  • (Automatically) create a .nupkg with your assemblies and place it into the ./MonkeyLoader/Mods/ folder (by default)
  • When you now start the game, your mod should be loaded and patches should be applied

For more detail, you can take a look into the Resonite.Integration for now. I will update this readme with an actual MVP eventually and link to other examples.

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on MonkeyLoader:

Package Downloads
MonkeyLoader.GamePacks.Resonite

This Game Pack for MonkeyLoader provides basic hooks for modding the game Resonite, which uses FrooxEngine. It provides hooks for the beginning of initialization, when initialization is done, and when the game shuts down. Additionally it contains many useful features for Users and Developers alike.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.28.2-beta 158 12/4/2025
0.28.1-beta 138 11/28/2025
0.28.0-beta 133 11/25/2025