JellyfinLoaderStub 0.1.1
See the version list below for details.
dotnet add package JellyfinLoaderStub --version 0.1.1
NuGet\Install-Package JellyfinLoaderStub -Version 0.1.1
<PackageReference Include="JellyfinLoaderStub" Version="0.1.1" />
<PackageVersion Include="JellyfinLoaderStub" Version="0.1.1" />
<PackageReference Include="JellyfinLoaderStub" />
paket add JellyfinLoaderStub --version 0.1.1
#r "nuget: JellyfinLoaderStub, 0.1.1"
#:package JellyfinLoaderStub@0.1.1
#addin nuget:?package=JellyfinLoaderStub&version=0.1.1
#tool nuget:?package=JellyfinLoaderStub&version=0.1.1
JellyfinLoader
A Jellyfin plugin that modifies Jellyfin's plugin load logic (by patching functions both in-memory and on disk) to give plugins more control.
Why?
Some plugins want to do things that aren't easily done by a normal Jellyfin plugin. For example:
- Being used as a library (without JellyfinLoader, that requires hacky workarounds)
- Injecting super early, before other plugins or before server start.
- Being loaded into the main assembly load context (to use things like Harmony for example).
How does it work?
// TODO. In short, it patches a DLL on disk that loads a different DLL very early in the Jellyfin startup process, then performs the necessary instrumentation.
How do I use this??
If you are a Jellyfin user and you are trying to install a plugin that depends on JellyfinLoader, simply install JellyfinLoader alongside that plugin. The repository URL is https://raw.githubusercontent.com/stenlan/JellyfinLoader/refs/heads/main/repository.json.
If you are a Jellyfin plugin developer, read along.
Using Harmony
To use Harmony, simply link against Lib.Harmony 2.4.1.0 and use Harmony like normal. JellyfinLoader will take care of the DLL being loaded.
Early loading and library plugins
To inject early and/or be loaded into the main assembly context instead of your separate plugin context (useful for library plugins), simply add a loader.json alongside your plugin's meta.json, with at least the following content:
{
"loadControl": "EARLY"
}
This will load your plugin into the main assembly context, and way before normal plugins are loaded. Then to actually do anything useful with the early loading, you probably want to implement the JelyfinLoader.IEarlyLoadPlugin interface.
If you add a zero-parameter constructor to a class implementing the IEarlyLoadPlugin interface, that constructor will run very early (just after StartupHelpers#CreateApplicationPaths in Program#StartApp).
Additionally, you can implement IEarlyLoadPlugin's OnServerStart(bool coldStart) function, which will run first thing on every call to Program#StartServer. The coldStart parameter denotes if this is the first time your StartServer hook was called during this run of the Jellyfin server executable, or a subsequent one. When the Jellyfin server is fully shutdown and restarted, coldStart will be true again. However, if the Jellyfin server is simply restarted through the web interface (or the underlying API endpoint), coldStart will be false. This can be useful for one-time initialization logic upon server start, like applying Harmony patches.
Limitations
This plugin is still in its early stages, so expect bugs.
Currently, only Jellyfin 10.10.7.0 is supported.
Additionally, any early loaded plugins (specified in their loader.json file), will not be unloaded and reloaded when soft restarting (through the web interface) because they are loaded into the main assembly context. 99% of the time, however, this isn't a problem at all.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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 was computed. 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 was computed. 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. |
-
net8.0
- Jellyfin.Controller (>= 10.10.7)
- MediaBrowser.Common (>= 4.8.11)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.2-v10.11.0-rc5 | 166 | 9/25/2025 |
| 0.1.2-v10.10.7 | 154 | 9/25/2025 |
| 0.1.1 | 224 | 9/22/2025 |