v0.7.8 — Account modal redesign, Jackett indexer & qBittorrent plugin contract
Highlights
A redesigned account modal Discord-style replaces the old avatar dropdown, ships a new account.section plugin hook, and unlocks the first official plugin built on it: qBittorrent Manager. Admins gain user-defined topbar shortcuts, a quick admin/back jump button, and a Jackett connector for indexer integrations.
Features
- Discord-like account modal with plugin sections. The avatar dropdown is replaced by a full-screen
AccountModalwith a sidebar (avatar header → section list → logout) and a content pane that swaps between built-in sections (Account, Preferences) and plugin-contributed ones via the newaccount.sectionhook point. Plugins declare an icon, label and React component; built-ins and plugin entries merge in a single sorted list. - User-selectable avatar source. #169 — pick which connected provider (Plex, Jellyfin, Emby, …) supplies your avatar. The new
AvatarEditorsurfaces every provider image you're linked to and lets you swap on the fly without touching the file system. - Admin-defined custom topbar links. #167 — admins can publish arbitrary URL shortcuts to the home topbar (label, icon, URL, target). Useful for pinning Tautulli, Overseerr, your dashboard, or any service users should reach in one click — without writing a plugin.
- Admin jump button + tooltip system. A discreet shield/home button now sits in every topbar (admin-gated) for one-click jumps between the user app and the admin panel — replacing the slower path through the avatar dropdown. Backed by a new shared
Tooltipcomponent with a 100ms fade (vs the browser's ~1.5s native delay), reused on the avatar cog and the notification bell. - Jackett indexer connector. New
indexerservice category with Jackett as its first member. The connection test uses the public-with-apikey Torznab caps endpoint so it works on Jackett instances locked behind an admin password (where/server/configrequires a cookie session). API key passes via query (notX-Api-Key— Jackett doesn't honour that header). - Curated icon set expanded.
DynamicIcon(used by plugin manifests for nav/admin tabs/widgets) gains 8 new icons: Coins, CreditCard, Gift, Crown, Award, Trophy, Gauge, Rocket — to cover subscription/achievements/stats plugin patterns. Unknown icons now log a one-time dev-mode console warning instead of silently falling back to Puzzle, and the available list is documented indocs/plugins.md.
Fixes
- qBittorrent connection test no longer 403s. The qBittorrent provider used to hit
/api/v2/app/versiondirectly without first authenticating, surfacing a misleadingHTTP_FORBIDDEN. It now performs the full/auth/loginflow, captures the SID cookie, and reports typed errors on bad creds (AUTH_FAILED), IP ban after too many failed attempts (AUTH_BANNED) or missing session cookie (AUTH_NO_SESSION) instead of the bare HTTP code. - Admin-only plugins no longer reachable by URL. Any plugin shipping a
frontendfield was previously mountable at/p/<id>whether or not it published anavcontribution — admin-only plugins (subscription, qbittorrent-manager…) were therefore reachable by typing the URL even though their data routes were permission-gated. The/p/<id>route now refuses to mount any plugin that hasn't contributed tohookPoint='nav', falling back toplugin.not_found.
New plugin available
Oscarr-Plugin-qBittorrent v0.1.0 ships alongside this release. Discover it via Admin → Plugins → Discover once the registry update lands. Read-only torrent queue + bulk pause/resume/delete + magnet add, with cross-check against Sonarr/Radarr import history so seeds already in the library are flagged for safe cleanup.
Full changelog: v0.7.7...v0.7.8
Upgrading
docker pull ghcr.io/arediss/oscarr:0.7.8
or
docker pull ghcr.io/arediss/oscarr:latest