Jellyfin 12.0 rewrites its playlists and finally gives books a real home
Jellyfin ships 12.0, a major release that drops the ‘10’ prefix and rewrites playlist and collection storage to speed up large libraries. Back up first, then upgrade from 10.11.x and run a full library scan.
May 2026. The Jellyfin team confirms the “10.x” numbering no longer means anything. Early September 2026. Version 12.0 ships, three months after 10.11, deliberately skipping 11. 2026. The community’s most-watched self-hosted media server delivers its most structural update since the database rewrite. Why it matters: behind a simple version-number change, the entire way a large library is stored and read is being reworked.
Why 12.0 and not 10.12
The most visible change in this release is its name. What would have been 10.12.0 becomes 12.0, and the server now reports itself as 12.0.0. 10.11.x is the last branch to use the old scheme.
The reason comes from the feedback after 10.11.0. That release rewrote the library database — a major overhaul by any measure — yet its version number presented it as a minor update. The leading 10. never changed and never told anyone anything; it only pushed the number that mattered into the middle, making major releases look minor. Dropping it moves the significant digit to the front.
For anyone maintaining something that parses Jellyfin version strings — a client, a monitoring check, a deployment script, a container tag pin — this is the item to check before upgrading. A check that expects a leading 10. will fail silently.
The database rewritten
10.11.0 rebuilt the library schema. 12.0 collects the performance dividend. The most structural change concerns how playlists and collections are stored.
Before, everything in a playlist lived in a single encoded list inside the playlist itself, unreadable to the database. Knowing the item count, working out what had been watched, or showing one page all required loading and unpacking the whole list. Adding or removing an item meant rewriting the entire list.
Now each playlist item occupies its own row. The database can count rows, return a single page, and add or remove one item without touching the rest. On very large playlists, the gain is immediate. Collections and boxsets, stored the same way, get the same fix.
Alongside that, deleting a large number of items no longer fails partway through, the Continue Watching, Next Up, rewatch, music Latest Media, artist lookup and folder watched-count views are faster, and heavy database maintenance no longer runs during a library scan — the two had been competing for the same resources. In practice, the pages that used to freeze no longer freeze.
For operators who prefer to trigger the migration deliberately rather than on first start, the server now accepts --mode MigrateSystem, which performs the upgrade and exits without starting the rest.
Books, finally
Books have long been Jellyfin’s neglected child, pushed behind video playback. This release starts the catch-up: most of what the Bookshelf plugin used to do has been moved into the server itself.
- Metadata is read directly from OPF and ComicInfo files, or from ComicBookInfo comments, with no plugin required.
- Posters are generated for EPUB and every supported comic archive format, and external covers work for audiobooks.
- Name, index, year and series are parsed from filenames; volume and chapter numbers come from comic filenames where present.
- Page counts are extracted from comic archives and PDFs, and chapters from audiobooks.
- Bookshelf has been split into GoogleBooks and ComicVine providers, and a new OpenLibrary plugin supplies metadata and images; ISBN identifiers are supported.
On the client side, a new Modern book layout adds Authors, Collections and Folders tabs, the reading interface is unified across all book types with swipe navigation for PDFs, and background audiobook playback works on iOS. The Bookshelf plugin is deprecated: its features have merged into the server or been extracted into providers.
Recommendations, search and the Modern layout by default
Where recommendations come from is no longer fixed: it is chosen per library, in the same place as metadata providers. ListenBrainz now ships with the server — pointing a music library at it surfaces similar artists based on real listening data rather than tags alone. Search works the same way: a plugin can add its own results alongside Jellyfin’s, without a fork.
The layout that shipped as “experimental” becomes the Modern layout, now the default on desktop and mobile. The old one remains, renamed Legacy. Televisions are unchanged. Every theme — Dark, Light, WMC, Blue Radiance, Apple TV, Purple Haze — now derives from a shared base built on CSS variables, which matters directly to custom-theme maintainers.
What the operator must know before upgrading
12.0 changes the database schema and rewrites data on first boot: a backup is the only way back. The instruction is explicit — stop the server, back up the data and config directories, then upgrade from 10.10.7 or any 10.11.x. From anything older, go through 10.10.7 first.
Four points deserve particular attention. Usernames become case-insensitive: two accounts differing only by capitalisation will make the migration fail. A full library scan is required after upgrading, and the first will take longer — some films may reappear as newly added. Third-party plugins built for 10.11 will not load: they need rebuilt builds, and official plugins are already updated. Finally, the legacy /emby/ and /mediabrowser/ endpoints are removed, along with the deprecated sign-in method: clients that have not been updated in years stop working.
The release also targets .NET 10 and FFmpeg 8.1, and bundles security fixes: several of them stop a crafted request from reaching files outside the directories Jellyfin is meant to serve, and others prevent the setup wizard from being re-run on a misconfigured server without signing in, reject plugin packages with unsafe names, and fix XSS issues in the web client. The deprecation of internal TLS/SSL, announced for this release, is postponed — but the guidance to run behind a reverse proxy stands.
Verdict
Jellyfin 12.0 is not a cosmetic update: it consolidates the 10.11 rework, now visible in how large libraries feel, and marks a real entry into books and comics.
If your library exceeds a few tens of thousands of items, upgrade — per-row playlist storage is the fix that will make the biggest difference to daily use. If you maintain third-party plugins, wait for them to be rebuilt for 12.0 before switching. If you expose the instance to the internet, the upgrade is a priority for its security fixes, but keep the reverse proxy: internal TLS remains a dead end, not a reprieve. Either way, back up first — this is a one-way migration.