v0.8.2 — Install wizard 2.0, migrate from Overseerr/Jellyseerr/Seerr
Highlights
This release is centered on the install experience. The wizard was rewritten from scratch with a guided 7-step flow, picks up where Overseerr / Jellyseerr / Seerr left off if you're migrating, and now leaves a fully-wired instance behind — no more half-finished setups landing on the home page with a noisy setup-checklist.
It also drops the post-install process restart, so Oscarr no longer needs a supervisor (docker --restart, systemd, kubernetes restartPolicy) just to come back online.
Plugin authors:
@oscarr/sdkgains language + translation helpers, andregisterGuardsnow receives the request context (tmdbId,mediaType,seasons). The Quotas plugin which requiresengines.oscarr >=0.8.2is now installable.
New
- Install wizard 2.0 — a 7-step state machine (Secret → Admin → Path → Services → Defaults → Sync → Done) replaces the old monolithic page. Brand panel + form split, categorized service tile grid (media-server / *arr / download-client / indexer / monitoring), modal-based per-service config, and a Done step that mirrors the admin setup-checklist.
- Migrate from Overseerr / Jellyseerr / Seerr at install — new Fresh / Migrate path picker. The Migrate path probes the source via
/api/v1/settings/*and bootstraps services, default folders, locale and quality tiers in one shot.*arrAPI keys and the Plex token aren't exported by Seerr — the wizard flags them as manual follow-ups. - Import users + requests from Overseerr / Jellyseerr / Seerr (admin) — dedicated Import tab with preview, conflict resolution (link / create / skip) and TMDB-probed importable list. Status code 4 (failed/completed) now correctly maps to
approved. - Quality auto-mapping — new
POST /admin/quality-mappings/autoendpoint scans every Radarr/Sonarr service and maps profiles to Oscarr tiers via name heuristics (HDR+UHD → 4K HDR, UHD → 4K, 1080p/720p → HD, 480p → SD). Idempotent; the install wizard calls it automatically after seeding the tiers. - Surface undecryptable service credentials — after restoring a backup from another instance (different
OSCARR_SECRET_KEY), affected services now show an explanatory banner + per-row alert instead of leaking theenc:v1:…ciphertext into the admin form.
Plugins
@oscarr/sdkgains i18n helpers —getLang(),useLanguage()React hook, and at(dict, lang, key, vars?)helper with fallback chain + interpolation. Hot-switches when the user changes language in Oscarr — noreact-i18nextbundle to drag in.- Plugin guard handlers receive request context —
registerGuards()handlers now gettmdbId,mediaTypeandseasonsalongside the user. Additive change, existing guards keep working. - Plugin toggle is gated — toggling an incompatible plugin (engines range mismatch) or one that failed to import now bails early with a clear error message instead of a cryptic Prisma
RecordNotFound. The admin UI also disables the toggle switch.
Fixes
- Backend no longer restarts after install — the
/setup/synchandler used toprocess.exit(0), relying on a supervisor to respawn. Setup routes are already 403'd by the existingrequireNotInstalledpreHandler once the install completes, so the exit was redundant and broke dev environments + bare-metal deployments without a supervisor. - Seerr import status mapping + TMDB probe — completed requests (Overseerr status
4) no longer land aspending, and re-running a preview after a partial import no longer infinite-loops on deadtmdbIds. - docker-compose injects
OSCARR_SECRET_KEYinto the container — compose only interpolates.envfor YAML substitution, not container env. The bundleddocker-compose.ymlnow adds bothenv_file: - .envand an explicitenvironment:entry so fresh upgrades pass the boot-time secret check.
Internal
- Service connectors can declare
requiredForInstall: trueon theirServiceDefinition— the install wizard derives required categories from this flag instead of hardcoding the list. Adding a new required connector backend-side automatically gates the wizard with no frontend edit.
🐳 Image: ghcr.io/arediss/oscarr:0.8.2