🧭 Plugin Pages, Ready for Jellyfin 12
Plugin Pages 3.0.0.0 brings the plugin forward for Jellyfin 12, updating the way custom pages are injected into the Jellyfin web client and fixing the user-facing plugin settings flow for Jellyfin's latest architecture.
This release also drops support for Jellyfin 10.10.7, while introducing a new plugin-facing API that makes it much easier for other plugins to add and manage their own pages.
✨ New Features
- Added support for Jellyfin 12.
- Added a new public Plugin Interface allowing other plugins to register pages programmatically through
PluginInterface.RegisterPage(JObject). - Added
PluginInterface.RemovePage(string id), allowing plugins to unregister pages they previously registered. - Updated Plugin Pages' web-client injection to work with the changes introduced in Jellyfin 12.
- Updated user-facing plugin settings pages to work with Jellyfin 12.
- Updated the underlying Jellyfin dependencies and integration points required by the new server/web-client architecture.
🛠️ Improvements
- Reworked page injection to account for changes to the Jellyfin 12 web client.
- Improved compatibility for plugins that use Plugin Pages to expose user-facing pages inside Jellyfin.
- Updated the user plugin settings integration so pages opened through Jellyfin's user menu continue to behave correctly on Jellyfin 12.
- Dependent plugins can now manage their pages at runtime rather than directly modifying Plugin Pages' configuration.
- Cleaned up legacy compatibility code that is no longer required now that older Jellyfin versions are being dropped.
🪲 Bug Fixes
- Fixed custom plugin pages failing to inject correctly into the Jellyfin 12 web client.
- Fixed user-facing plugin settings pages not working correctly on Jellyfin 12.
- Fixed cases where pages registered through Plugin Pages could result in a Page not found experience after Jellyfin web-client changes.
- Fixed compatibility issues caused by changes to Jellyfin's client-side routing and page-loading behaviour.
💻 Developer Compatibility
Plugin Pages now provides a public plugin-facing API for registering and removing pages.
PluginInterface.RegisterPage(JObject)can be used to register a page directly with Plugin Pages.- The supplied
JObjectis deserialised into Plugin Pages'PluginPagemodel and registered immediately with the page manager. PluginInterface.RemovePage(string id)can be used to unregister an existing page by its ID.- Plugins no longer need to directly modify
Jellyfin.Plugin.PluginPages/config.jsonin order to dynamically add their own pages. - Plugins can now register pages during startup and remove them again during shutdown or when their configuration changes.
This should be considered the preferred integration path for dependent plugins going forward, replacing direct manipulation of Plugin Pages' configuration where possible.
The new API is additive, so existing configuration-based integrations are not inherently broken by the update. Plugin developers are, however, encouraged to migrate to the new interface for cleaner lifecycle management and better compatibility with future Plugin Pages releases.
⚠️ Compatibility
- Jellyfin 10.10.7 is no longer supported.
- Added support for Jellyfin 12.
- Users remaining on Jellyfin 10.10.7 will need to stay on an earlier Plugin Pages release until they upgrade Jellyfin.
- Plugin Pages continues to require a compatible version of File Transformation.
- Plugins that depend on Plugin Pages should also be updated to versions compatible with Jellyfin 12.
- The new
PluginInterfaceis additive; plugins using the previous configuration-based approach can continue to work, but the programmatic API is now the recommended integration method.
❤️ Support
If you enjoy using my Jellyfin plugins and want to support the time that goes into building, maintaining, and improving them, you can do so on Ko-fi.
Thank you for using the plugins and being part of the community.