✨ New Features
- Add a server-side tag cache that pre-computes all tag data (genres, ratings, languages, quality stream info) for every item in your library. Clients load the full cache in a single GET request on session start — tags render instantly with zero per-page API calls. #515 Huge work from @4eh5xitv6787h645ebv!
- Add "Hide Tags on Hover" toggle (per-admin config + per-user override) so tags step back when you're interacting with a card. #515
⚙️ Improvements
-
Tag system rewritten from the ground up — 4 independent scan/fetch/queue loops consolidated into a single unified pipeline with cache-first rendering, chunked idle processing via
requestIdleCallback, and progressive render. 29 body-wideMutationObserverinstances collapsed into 1 shared multiplexed observer. #515Page Before After Improvement Movies Library 1502ms, 70 tags 200ms, 101 tags 87% faster Movie Detail 5010ms, 23 tags 803ms, 88 tags 84% faster TV Shows Library 1501ms, 66 tags 401ms, 97 tags 73% faster TV Show Detail 3030ms, 22 tags 2049ms, 96 tags 32% faster Metric Before After MutationObserverinstances~29 1 shared + 7 dedicated API calls per page (server cache on) 2–5 POST batches 0 Cache build time (500 items) N/A ~3 seconds Cache survives server restart N/A ✅ (loads from disk instantly) -
Language dropdown now makes 2 local API calls instead of 100+ GitHub HEAD requests on every cache miss. External dependency on
raw.githubusercontent.comeliminated entirely — language selection now works offline and is immune to GitHub rate-limiting. #527 Credit to @4eh5xitv6787h645ebv! -
Zero hover jank on tags — genre pill expansion (which triggered layout reflow on every hover) replaced with a GPU-composited floating label. Tags now use CSS containment and sit naturally behind Jellyfin's hover overlay in DOM order. #515
-
Dashboard activity icons now match localized Jellyfin activity messages across more languages using regex-based matching and normalized text, making the colored Material icon replacements far more reliable outside English.
-
Stale
UseCustomTabs/UsePluginPagesconfig flags are now automatically cleared on startup when the respective plugins are not installed, preventing silent navigation failures after uninstalling a plugin. #522 -
Add sidebar navigation for Bookmarks and full Custom Tabs support so bookmarks are reachable from all navigation modes. #523
🐞 Bug Fixes
- Fix Reviews and Elsewhere features being unavailable to non-admin users — non-sensitive derived values were only returned by the private-config endpoint (which returns
{}for non-admins). #514 #517 - Fix Seerr failing to connect on Jellyfin 10.11.6 — a race condition where
accessToken()wasn't yet available whenwaitForUserAndInitialize()checked for a user ID caused the Seerr init to fire with no valid token. #516 #518 Nice catch by @4eh5xitv6787h645ebv! - Fix language not adapting to user settings — a regression in
buildLanguageChain()dropped the primary language from the fallback chain for simple codes (de,fr,es,it, etc.), causing all non-English simple languages to resolve to English only. #513 #519 - Fix Bookmarks tab permanently empty when loaded via Plugin Pages — the page had removed its own
.sections.bookmarkscontainer and the poster click handler targeted the wrong CSS class. Also fix Delete All not persisting. #523 - Fix non-admin users seeing the full Radarr/Sonarr download queue including content requested by other users — the
GetDownloadQueueendpoint now filters to only the requesting user's items for non-admins. #524 - Fix browsers (especially Firefox) accumulating hundreds of gigabytes in temp files from repeated avatar proxy downloads — deduplicate identical avatar requests so each URL is fetched only once. #504 Props to @4eh5xitv6787h645ebv!
- Fix season cards showing empty placeholders for shows that lack individual season posters (e.g. long-running shows) — fall back to the show-level poster when no season artwork is available in Seerr or TMDB. #505
🌐 Translations
- Translation contributions are now centered on Weblate, making it easier to translate in the browser and sync changes back to GitHub. https://hosted.weblate.org/projects/jellyfinenhanced/
- Add Weblate translation badges to the README and docs so contributors can quickly find the live translation project.
- Add a new
GET /JellyfinEnhanced/localesserver endpoint that enumerates available translation files directly from the plugin DLL — new locale files are now auto-detected on rebuild with no hardcoded lists to maintain. #527 Nice one, @4eh5xitv6787h645ebv! - Add Catalan, Basque, and Galician flag code support so those language indicators resolve correctly in the UI. #501
- Add Czech (
cs) and Slovak (sk) locale files. #521 Díky, @markrieder! - Fix multiple Catalan (
ca) and Basque/Galician translation keys that weren't loading due to case mismatches. #506 #507 Thanks @Kisnov!
P.S. Enjoying the plugin?
Fuel development (and my storage addiction) with a coffee!