Jellyfin 12.0 Upgrade Problems: Migration Failed, Plugins Missing, Clients Cannot Log In

Jellyfin 12.0 Upgrade Problems: Migration Failed, Plugins Missing, Clients Cannot Log In

Jellyfin 12.0 Upgrade Problems: Migration Failed, Plugins Missing, Clients Cannot Log In

Jellyfin 12.0 is a real major release. It rewrites data on first boot, moves to .NET 10, removes old API routes and switches off an old sign-in method. That is a lot of change at once, so it is normal to hit something after upgrading.

This page is a troubleshooting checklist for the problems people are most likely to see, with the cause of each and the fix. For the upgrade procedure itself, start with our Jellyfin 12.0 overview.


Before You Change Anything

Two rules make every problem below easier to handle:

  1. You need a backup to go back. Jellyfin 12.0 changes the database schema and rewrites data during the first start. The project is clear that the backup taken before the upgrade is the only way back to your previous version. If you have one, every scenario below is recoverable. If you do not, stop and make a copy of the current data and config directories before you try fixes.
  2. Read the log before guessing. Most problems leave a clear message.
# Docker
docker compose logs -f jellyfin

# Debian or Ubuntu package
sudo journalctl -u jellyfin -f

Also check the log files in the Jellyfin log directory. On a Debian or Ubuntu package install this is usually /var/log/jellyfin/, and for Docker it is the log folder inside your mapped config directory.


Quick Diagnosis Table

SymptomMost likely causeJump to
Server never starts after the upgradeA startup migration failedProblem 1
Migration fails and mentions usernamesTwo accounts differ only by capital lettersProblem 2
Plugins missing or not loadingPlugins built for 10.11 do not load on 12.0Problem 3
Movies or episodes look goneAlternate versions were cleared, scan neededProblem 4
First scan takes forever, movies appear as newExpected after the upgradeProblem 5
A TV app or old client cannot sign inLegacy routes and old sign-in method are offProblem 6
Pages look broken or buttons do nothingStale cached web filesProblem 7
Subtitles, sorting or image sizes changedIntentional 12.0 behavior changesProblem 8
A script or dashboard stopped workingVersion string or removed API routesProblem 9

Problem 1: The Server Never Starts After the Upgrade

What you see: The container restarts in a loop, or the service fails right after the upgrade. The log shows a migration error.

What is going on: 12.0 runs several database migrations on the first boot. If one of them fails, it is rolled back and the server does not start.

A public bug report shows the pattern. A user upgrading from 10.11.11 to 12.0 under Docker had a migration called FixIncorrectOwnerIdRelationships fail. The routine found hundreds of duplicate items and failed while deleting them with a SQLite foreign key constraint error. It was not caused by plugins, since the user had removed every third-party plugin and got the same result.

What to do:

  1. Do not keep restarting the server. Repeated attempts will not help if the data is the issue.
  2. Restore your backup of the data and config directories, and go back to your previous version so your library is working again.
  3. Try 12.1 instead of 12.0. The 12.1 release lists a cleanup of invalid data before migrations run, among other upgrade safety fixes. We cannot confirm that it resolves the specific case above, but it is the right version to try. See our 12.1 changelog breakdown.
  4. Run the migration as a separate step to watch what happens. Jellyfin accepts --mode MigrateSystem, which performs the upgrade and exits without starting the rest of the server.
jellyfin --mode MigrateSystem

For Docker, pass the same argument to the container when you run it against a copy of your data. Do this on a copy, not on your only database.

  1. If it still fails, report it. Open an issue on the Jellyfin GitHub repository and prefix the title with [12.0]. The project asks for this so it can triage quickly. Attach the full log.

Problem 2: The Migration Fails Because of Usernames

What you see: The upgrade fails early, or you read the release notes too late.

What is going on: In 12.0, usernames are case insensitive. Two accounts can no longer have names that differ only by capitalization, for example Sam and sam. A server that has such a pair fails the database migration outright.

What to do:

  1. Roll back to your backup if you already started the upgrade.
  2. On the old version, open Dashboard > Users and look through the list for names that are the same apart from capital letters.
  3. Rename one account of each pair.
  4. Upgrade again.

A side effect worth knowing: once you are on 12.0, you can change a username between upper and lower case.


Problem 3: Plugins Are Missing or Will Not Load

What you see: A plugin shows as not supported or does not appear, or features from it are gone.

What is going on: The server now targets .NET 10 and several plugin interfaces changed. Plugins built for 10.11 do not load on 12.0 until their authors rebuild them. Official plugins were updated for 12.0. Disabled plugins also stay disabled across restarts now, which was not true on 10.11.

What to do:

  • Open Dashboard > Plugins and check which plugins are listed and which show an error.
  • For each third-party plugin, look at its repository or catalog entry for a build that supports Jellyfin 12. Some projects publish one manifest that serves both 10.11 and 12.x and lets Jellyfin pick the matching build.
  • If no 12.0 build exists yet, leave that plugin uninstalled and check back. Do not copy old plugin files into the plugins folder by hand.
  • Make sure your plugin repository URLs are still correct. See our list of plugin repositories.

If you depend on a plugin for something important, such as single sign-on, hold your upgrade until it has a 12.x build. Check compatibility before the upgrade, not after.


Problem 4: Movies or Episodes Look Missing

What you see: Items grouped as multiple versions seem to be gone, or some movies show up as separate entries.

What is going on: To fix how alternate versions are stored (and to make them work for episodes), the upgrade clears versions that Jellyfin grouped automatically. Versions you merged yourself are not cleared. Until a full scan runs, the automatically grouped items look missing.

What to do: Run a full library scan (Dashboard > Libraries > Scan All Libraries). This step is required after upgrading. Then check the results. The 12.1 release also includes fixes for versions that still listed separately from their group and for preserving manual merges.

JellyWatchTry JellyWatch — Your Jellyfin companion, everywhere.

Problem 5: The First Scan Takes Forever

What you see: The scan takes much longer than normal, and some movies appear as newly added.

What is going on: This is expected. 12.0 checks every item in your library against the files on disk to clean up leftovers from earlier versions. Items that were filed incorrectly before get corrected as it goes, and that can make them look new.

What to do: Wait. Do not stop the server while migrations are running. You can watch progress on the restyled startup page. On a large library, plan for hours instead of minutes.


Problem 6: A Client or TV App Cannot Sign In

What you see: An app that worked yesterday now shows a login error, cannot find the server, or fails to load libraries.

What is going on: 12.0 removed support for the legacy /emby/ and /mediabrowser/ addresses, and the deprecated sign-in method is switched off by default, on existing servers as well as new ones. Clients that have not been updated in years are the ones at risk.

What to do:

  1. Update the client app to the latest version. This fixes the problem for most people.
  2. If the app is no longer maintained, switch to a maintained client. Our client guide lists current options for every device.
  3. If it is a self-written script or tool, update it to use the current authorization header and documented API endpoints.
  4. Rule out basic network problems with our connection troubleshooting guide.

Problem 7: The Web Interface Looks Wrong

What you see: Broken layouts, missing buttons or odd behavior in the browser after the upgrade.

What is going on: Cached files from the previous web version. The project calls stale cached assets the number one cause of this kind of problem.

What to do: Do a hard refresh (Ctrl+Shift+R, or Cmd+Shift+R on Mac) and clear the browser cache for your Jellyfin address. If you use a reverse proxy or CDN that caches static files, clear that cache too.

Also note that the Modern layout is now the default on desktop and mobile. The previous layout still exists and is now called Legacy. Televisions keep the TV layout. If you use custom CSS, parts of it may not match the new theme structure, since all built-in themes now share a base built on CSS variables.


Problem 8: Settings and Behavior That Changed on Purpose

Some things are different in 12.0 and are not bugs:

  • Subtitle settings are per library. The old server-wide subtitle options no longer exist. Look in each library's settings.
  • Sorting is more consistent. Some libraries will sort slightly differently than before.
  • Artwork is no longer stretched past its real size. Low-resolution posters now appear smaller but sharper.
  • .ogg files are treated as audio, not video. If you had .ogg video files, they are re-sorted on the next scan.
  • Symlinked media is followed when something is played, not when the library is scanned.
  • The Bookshelf plugin is deprecated. Book and comic handling moved into the server.

Problem 9: Scripts, Dashboards and Monitors Stopped Working

What you see: A monitoring check, a deploy script or a container tag pin no longer behaves.

What is going on: The server now reports its version as 12.0.0 instead of 10.x.y. Anything that parses the version string or assumes a 10. prefix needs to be updated. Some API routes were also removed, including POST /Users/{userId}/EasyPassword, and GET /QuickConnect/Initiate must now be called as a POST. If an endpoint is marked obsolete in the OpenAPI specification, you should stop using it.

What to do: Update version checks and tag pins, regenerate any SDK built from the old OpenAPI document (Swashbuckle was updated to v10), and move off obsolete endpoints.


Rolling Back

If you cannot fix a problem and need your server working now:

  1. Stop Jellyfin.
  2. Restore the backup of the data and config directories you made before the upgrade.
  3. Start the previous version (10.10.7 or a 10.11.x release).

Do not try to run 10.11 on a database that 12.0 has already migrated. The schema has changed. For a full procedure, see our backup and restore guide.


Asking for Help Effectively

When you post on the forum or open an issue, include:

  • The version you upgraded from and to
  • How you installed Jellyfin (Docker, package, Windows)
  • The relevant lines of the log, not just a screenshot
  • Whether third-party plugins were removed first
  • The prefix [12.0] in the title of a bug report

Watching a long post-upgrade scan? Download JellyWatch on Google Play to check server activity, sessions and health from your phone while Jellyfin finishes its migrations.

Sources: Jellyfin 12.0 announcement, Help Net Security, GitHub issue 17919, Jellyfin 12.1 release notes via Releasebot. Content was rephrased for compliance with licensing restrictions.

Partner

Onidel provides high-availability NVMe VPS built for reliability. Perfect to self-host Jellyfin or Emby with 99.9% uptime.

Get started

Comments

No comments yet. Be the first to share your thoughts.

Leave a comment

Never displayed publicly.
0 / 2000 · Supports limited Markdown: **bold**, *italic*, `code`, [link](url), lists, > quote.