Jellyfin 12.0 is stable. Going back means restoring a backup
Jellyfin 12.0 is now stable. The project published its release guide on September 7, followed by the stable v12.0 server release on September 8.
The release continues from the database rebuild Jellyfin finished in 10.11. It improves several slow library operations, expands support for books and comics, and includes security fixes. The Jellyfin database migration rewrites data into the new schema during first boot. Returning to an earlier server version requires restoring a full backup, so the Jellyfin 12.0 upgrade belongs in a maintenance window.
Whether you can schedule that window at all depends on the server you are upgrading from.
Check the blockers before stopping the server
Before you start, confirm:
- The host platform still receives Jellyfin packages. Debian Bullseye and Ubuntu Focal no longer do.
- The server runs 10.10.7 or any 10.11.x release.
- No two usernames differ only by capitalization.
- The third-party plugins you depend on have compatible 12.0 builds.
If the server is older than 10.10.7, move to 10.10.7 first. The username check matters because 12.0 makes usernames case-insensitive; duplicates will stop the migration.
Once those blockers are clear, the run itself is short:
- Remove installed third-party plugins.
- Stop Jellyfin.
- Back up the complete data and configuration directories, then test the restore.
- Upgrade and let the migrations finish without stopping the server.
- Run the required full library scan.
- Test clients and integrations, then re-add compatible plugins before retiring the backup.
Administrators who want to separate migration from normal startup can run --mode MigrateSystem. It performs the migrations and exits without starting the full server, which is useful for containers and orchestrated deployments.
The Jellyfin library scan rebuilds automatically grouped alternate versions that the migration clears. It also checks each library entry against files on disk. The first scan will take longer than usual, and some movies may appear as newly added when incorrect data is repaired.
Plugins, clients, and scripts have breaking changes
The server now targets .NET 10 and changes several plugin interfaces. Compatible official Jellyfin plugins are available in the stable repository. If the server uses the unstable repository, restore the manifest URL to https://repo.jellyfin.org/files/plugin/manifest.json. Third-party plugins depend on their maintainers publishing new builds.
The Bookshelf plugin is deprecated. Its functionality moved into the server or into the separate ComicVine and GoogleBooks providers.
Very old clients can also fail. The legacy /emby/ and /mediabrowser/ route prefixes are gone, along with deprecated authentication behavior. Test abandoned clients and private integrations before decommissioning the old installation.
Version parsing needs attention as well. What would once have been called 10.12.0 is now 12.0.0. Monitoring rules, deployment scripts, container policies, and clients that assume every Jellyfin version begins with 10. need an audit.
The database work has a visible payoff
Playlists and collections now store each member as a relational row. The database can count, page, add, or remove individual entries without unpacking and rewriting an entire collection. Jellyfin also reports faster queries for Continue Watching, Next Up, music, artists, watched counts, playlists, and collections. Large batch deletions should no longer fail because SQLite receives too many variables.
Version 12.0 also adds multiple versions for TV episodes, more built-in book and comic handling, and plugin-extensible search and recommendations. On desktop and mobile, the Modern layout becomes the default for users who have not explicitly chosen another layout. TV devices continue to use the TV layout on the legacy app.
Security fixes have their own version boundary
The release hardens file-path handling, rejects unsafe plugin package names, fixes cross-site scripting issues in the web client, and prevents the startup wizard from being rerun without authentication on a misconfigured server.
Its changelog also lists CVE-2026-48793, tracked as GHSA-wwwm-px48-fpvq. The High-severity, CVSS 8.8 issue could let a specially constructed subtitle filename inject FFmpeg arguments, leading to arbitrary file writes on the server and information disclosure. The affected subtitle endpoint did not require authentication, although an attacker still needed the ability to place that file in a Jellyfin media-library directory. The advisory identifies 10.11.10 as the patched version, so this fix predates 12.0. Servers below 10.11.10 should update even if their operators are not ready for the 12.0 migration.
Built-in TLS remains available in this release. Its removal moved to 13.0, although Jellyfin still recommends putting an Internet-facing server behind a reverse proxy.
Upgrade now if your backup has been tested, your platform is supported, and the third-party plugins you need have compatible builds. If any of those checks fail, keep the current server version until they are resolved.
Member discussion