Compatibility¶
JE supports Jellyfin Server 12.x and 10.11.x with separate builds. You'll get the web features in clients that load your server's web interface. Native apps can use some server features too.
Jellyfin versions¶
Use the build that matches your Jellyfin server. Both versions support the seven JE pages, tags, and automatic requests.
- Install the matching build from the shared plugin repository.
- Restart Jellyfin. See installation for the full steps.
| Area | Jellyfin 12.x | Jellyfin 10.11.x |
|---|---|---|
| Plugin build | Jellyfin 12.x build | Jellyfin 10.11.x build |
| Script loading and branding | Supported | Supported |
| JE pages and native Home tabs | Supported; Modern Layout has navigation limits below | Supported, including native Home tabs |
| Personal Enhanced panel | Drawer, user settings menu, player button, shortcut, and Modern Layout avatar-menu entry | Drawer, user settings menu, player button, and shortcut |
Older Jellyfin servers
Jellyfin 10.10 needs the historical plugin line, frozen at 10.11.1.0.
Wrong build installed
If Wrong plugin build for this Jellyfin version appears on the admin page, reinstall the matching build and restart. See troubleshooting.
Build and API details
| Server | Build file | Runtime target |
|---|---|---|
| Jellyfin 12.x | Jellyfin.Plugin.JellyfinEnhanced_12.0.0.zip |
.NET 10 |
| Jellyfin 10.11.x | Jellyfin.Plugin.JellyfinEnhanced_10.11.0.zip |
.NET 9 |
Script loading and branding use built-in request-time middleware on both versions. The conditional server code adapts Activity library access and item statistics. Jellyfin 12 uses access-scoping and batch APIs; 10.11 uses compatible access queries and individual user-data reads. These differences don't reserve the seven JE pages, tags, or automatic requests for Jellyfin 12.
The startup log reports a wrong build as BUILD/HOST MISMATCH. The authenticated, administrator-only /JellyfinEnhanced/host-compat diagnostic identifies the expected artifact. There is no setting to turn off this check.
Clients and playback¶
For the panel, tags, and browser playback tools, open the web interface served by your Jellyfin server. Check the table below if you prefer an app or a separate player.
| Client | What to expect |
|---|---|
| Jellyfin web served by your server | The injected panel, page navigation, tags, search integration, and browser playback tools are available when their settings and requirements are met. |
| Official Android and iOS apps using the embedded web interface | Web enhancements can run when the app loads the server's injected web page. Playback tools need browser playback. |
| Jellyfin Desktop and other desktop web wrappers | Web enhancements depend on loading the server's web interface. JE's browser playback tools aren't available in an external or native player. |
| Android TV, Roku, Swiftfin, and other native clients | JE's injected panel, pages, buttons, and shortcuts aren't added to their native interface. Enabled server features can still affect their Jellyfin requests, images, and saved user data. |
| Independently hosted web clients | Connecting to a JE server alone doesn't add JE's web enhancements to a separately hosted client. |
Browser playback tools include the pause screen, subtitle styling, long-press speed changes, automatic skipping, and picture-in-picture. What you can use also depends on your browser's playback capabilities.
Playback limits
JE's playback tools control a browser video element. External and native players don't provide that element. Independently hosted web clients don't automatically pass through JE's injection middleware; connecting to a JE server alone doesn't install JE's client scripts in a separately served web shell.
Auto-skip seeks a browser video element. Progressive transcoding can limit seeking, and the seek isn't synchronized to other SyncPlay members.
What works for native clients¶
Native apps can benefit from JE's server features even though they don't show its panel or buttons. Set your personal policies in the web interface first.
| Server feature | What can work in native clients |
|---|---|
| Automatic requests | Season and movie requests triggered by qualifying playback activity, plus server-side watchlist monitoring when enabled. |
| Native Poster Tags | Personalized supported artwork for identified native clients when admin Enable Native Poster Tags (Experimental) and personal Show Tags in Native Clients (Experimental) are on. |
| Hidden Content | Filtering on supported item, search, and Home-row responses when the server feature and your applicable filters are on. |
| Spoiler Guard | Filtering of supported images and Jellyfin metadata. |
| Saved Jellyfin data | Watched status and configured MDBList community/critic rating synchronization. Watchlist synchronization also stores Jellyfin data. |
Native-client limits
Image caching can delay Native Poster Tag changes. A native app's locally cached Hidden Content results may also need refreshing.
JE's Reviews panel is additionally suppressed by injected web code. Server protection doesn't promise review suppression in a separate client. Displaying a synchronized watchlist requires a suitable client interface.
These effects don't guarantee that every native screen uses a filtered endpoint. The tag guide, Hidden Content guide, Spoiler Guard guide, and Seerr guide describe the switches and limits.
Modern and Legacy layouts¶
Your layout changes where you'll find JE's settings and pages. Native Home tabs work on Jellyfin 12's Modern and Legacy layouts, and on 10.11.
| Layout | How to reach JE |
|---|---|
| Jellyfin 12 Modern Layout, desktop | Open your avatar menu's Jellyfin Enhanced entry for personal settings. Use Home tabs for pages, or JE's header shortcut tray if a native tab button is hidden. |
| Jellyfin 12 Modern Layout, mobile | Use sidebar links, including Plugin Pages links. |
Modern Layout has no desktop sidebar links
Its header and drawer differ from the Legacy layout. Sidebar links are only visible on mobile. JE adds header shortcut-tray links when Modern Layout hides native Home tab buttons.
See page placement to choose navigation that suits your layout.
How native links stay usable
Generated links carry a stable jeTab identity as well as the current numeric tab index. This lets them recover when other tabs change position.
Companion plugins¶
Companion plugins add optional navigation and playback tools. You don't need File Transformation for normal JE script loading or branding.
- Install and activate the companion for the feature you want, along with its prerequisites.
- Check Overview → Optional Dependencies for detection status.
- If Plugin detection issue appears, use Retry. A failed probe isn't proof that a plugin is missing.
| Companion | Used for | Without it |
|---|---|---|
| File Transformation | Prerequisites of other web modifications, including page/tab companions shown by JE's dependency dashboard | Normal JE script loading and branding still work. |
| Plugin Pages | The Use Plugin Pages variants under Pages | Its registered navigation entries aren't available. JE's standalone implementations for Bookmarks, Hidden Content, Requests, Calendar, and Recommendations can provide navigation when their other placement settings permit it; Activity and Catch Up need a tab or Plugin Pages. |
| Custom Tabs | The Use Custom Tabs variants under Pages | It can't create the Home containers those options expect. Custom Tabs mode can suppress JE's standalone sidebar links, so turn it off and select a native Home tab or another available placement. |
| Intro Skipper | Timestamp source and admin dependency check for Auto-Skip | Auto-skip controls are unavailable in the admin UI when the plugin is known to be absent. |
| In-Player Episode Preview | Open Episode Preview player shortcut | JE can't open the companion's preview interface. |
| KefinTweaks | Watchlist interface for Seerr/Jellyfin watchlist features | Server-side watchlist data and monitoring don't provide a built-in JE watchlist browser. KefinTweaks is detected as a web modification, rather than a normal server plugin. |
How script loading and auto-skip work
Intro Skipper is also detected as SkipIntro. The playback engine reads Jellyfin Media Segments and needs valid intro/outro boundaries.
JE doesn't automatically switch to an on-disk rewrite when File Transformation is absent. The hidden configuration flag DisableScriptInjectionMiddleware defaults to false. Setting it to true explicitly selects legacy startup injection into WebPath/index.html, which needs write access there. This is separate from File Transformation detection. Normal injection and branding need writable JE configuration/data storage, not a writable web directory. Startup may still clean an old JE script tag from index.html.
External services by feature¶
Connect only the services your chosen features need. The table shows where to set each one up.
- Open the admin page and enter credentials and instance settings in the relevant tab.
- Use addresses reachable from the Jellyfin server for API calls. Set browser-facing URL mappings separately.
- Click Save Settings and refresh your client.
Addresses inside containers
In a container, localhost means that container.
| Feature | Requires | Where to configure |
|---|---|---|
| Seerr search, requests, issues, and discovery | Enabled Seerr integration, reachable Seerr URL and API key; a linked, unblocked user with the relevant Seerr permissions | Seerr → Seerr Connection Setup and Users; Seerr settings and permission audit |
| Automatic season requests | Configured Seerr and the automatic request switches, eligible playback, and permitted linked users | Seerr → Automatic Requests; Seerr features |
| Automatic movie requests | Configured Seerr plus TMDB API Key for movie discovery, eligible playback, and permitted linked users | Seerr → Seerr Connection Setup and Automatic Requests |
| Requests page | Enable Requests Page; Seerr for requests/issues, enabled Sonarr/Radarr instances with API keys for downloads/history | Pages → Requests Page, Seerr, and *arr; *arr settings |
| Calendar | Enable Calendar Page and at least one configured source: enabled Sonarr/Radarr instance with API key, or Shoko URL and API key | Pages → Calendar Page and *arr → Sonarr / Radarr / Shoko; *arr features |
| Sonarr/Radarr item links and tag synchronization | Enabled instances with URL and API Key. Item links also need a Jellyfin administrator account and Enable *arr Links on Detail Pages. Sync needs Enable Tags Sync and its scheduled task. | *arr → Sonarr / Radarr, *arr UI Links, and Tags Sync |
| Bazarr link | A Jellyfin administrator account, one Bazarr URL, and Enable *arr Links on Detail Pages; optional Bazarr URL Mappings. No API key is needed. | *arr → Bazarr; *arr settings |
| Shoko anime Calendar entries | Shoko URL, Shoko API Key, and selected episode types; Sonarr/Radarr aren't required | *arr → Shoko |
| Recommendations page | Enable Recommendations Page, enabled/configured Seerr, and a linked user; studio-produced TV discovery also needs a TMDB key | Pages → Seerr Recommendations Page and Seerr; Seerr features |
| Elsewhere streaming providers and TMDB reviews | TMDB API Key, the relevant switches, and appropriate TMDB item IDs | Elsewhere & Reviews; Elsewhere & Reviews Settings |
| MDBList ratings and rating synchronization | MDBList API Key and the relevant display/fetch/sync switches; fetching depends on the account's available allowance | Display → MDBList Ratings; MDBList settings |
| Standalone Letterboxd links | Enable Letterboxd Links; movies need an IMDb ID. No Letterboxd account/API key is configured in JE | Extras → External Links; Other settings |
| Ordinary poster rating tags | Stored Jellyfin community or critic ratings; no JE TMDB/MDBList key merely to display those values | Display → Media Tags or personal UI Settings; Tags & badges |
Service and network details
Show synced tags as links displays existing prefixed tags for viewers independently of service connections, synchronization, and administrator item links.
Bazarr links open the movies/series overview, rather than a specific item. Letterboxd links for people use a name-derived actor link; JE has no TV-series Letterboxd link. Ordinary poster rating tags display Jellyfin's stored CommunityRating or CriticRating.
JE also fetches allow-listed assets through its server-side CDN cache. A fresh installation needs upstream connectivity for uncached assets. The admin Docs tab loads this hosted documentation in your browser. Optional Share Anonymous Usage Statistics is off by default and is separate from service and asset requests; see Community Analytics.