0.12.0 (2026-06-23)
Bug Fixes
- activity: delete all deduplicated sibling rows when removing an activity entry (15b7a09)
- activity: migrate Failed stat to history and restore delete for failed records (b4efe89)
- activity: show contextual status label instead of generic active downloads count (c4a1e4c)
- add season override to Match Folder modal for unparseable filenames (9ff1644)
- allow editing and deleting user-created custom formats (ed445ff)
- auth: handle http origins in trusted origins validation (4c924d8)
- blocklist: blocked keywords no longer re-added after server restart (a8cbfe3)
- blocklist: improve blocked # page(s) UX consistency (0f7948e)
- ci: lower coverage thresholds to match current baseline (a00c1e8)
- clarify block labels and improve removal cleanup (f47dd20)
- config: migrate csrf.checkOrigin to trustedOrigins wildcard (29d4430)
- contain sidebar to dynamic viewport height to prevent menu overflow blocking page scroll (daf58d8)
- convert empty string to null for permanent blocklist duration (9b9e48c)
- csrf: replace broken SvelteKit wildcard CSRF with proper LAN origin guard (6593b5f)
- dashboard: make Coming Up items clickable links to library detail pages (797ce56)
- deps: bump undici to 7.28.0 and ua-parser-js to 2.0.10 (security) (5fc95c0)
- discover: default series type to Anime when TMDB detection identifies anime content (4906b44)
- discover: persist search query in URL and add back button on detail pages (54521a0)
- discover: show matched blocked keywords on content block screen (4788541)
- enable profile-driven upgrades between streaming and downloaded media (9ab9066)
- hide media type filter in manual importer when launched from library item (c781101)
- importer: show root folders in folder browser. (67ea5db)
- indexers: add torznab URL auto-discovery and improve caps handling (64c69f3)
- indexers: auto-disable orphaned managed indexers on connection test failure (a0ee254)
- indexers: decouple path routing from category restriction, drop dead vars (41c89d2)
- indexers: improve season-pack coverage and category mapping (3b53709)
- indexers: pass upstreamEnabled through page server load to UI (9071105)
- integrations: media server connection testing and version tracking (769b56a)
- integrations: notify media servers on file rename (e19fb61)
- integrations: persist version metadata on manual media server test (9d948b2)
- integrations: wire media server notifications and fix Emby stats URL (8e292b6)
- library: apply monitorSpecials to episode-group season rebuilds (b4be22e)
- library: pass library scope as form field so monitor-all works in custom libraries (10b5ee2)
- library: pass library scope as form field so monitor-all works in custom libraries (tv) (274e3e8)
- lint: remove redundant svelte-ignore a11y comments (ecca088)
- lint: remove unused imports/vars and add each-block keys in upstream code (2a8b83a)
- lint: resolve formating issues (d2c0ce7)
- logs: improve status bar clarity and contextual filter label (1828ed6)
- move failed downloads from Active to History tab (237e5ed)
- naming: preview endpoints always returned 500 due to missing success flag in response and DB path drift on failed folder rename (18bb403)
- overhaul date/time handling with i18n-aware display and timezone safety (3db865e)
- parser: handle fansub/BD-BOX naming conventions (b0e24c4)
- prevent fansub "S1 - NN" notation from matching as multi-season pack (99a7371)
- queue cards work across Active and History tabs (264f770)
- release-status: make movie release status date-driven and consistent (3b5345c)
- remaining release date loose ends (f50162c)
- remove dead showSelectedItemEditor state and type getTmdb season response (af1edfd)
- remove monitoring status banner from TV series page (b138f47)
- resolve absolute episode numbering for unmatched file matching and auto-matcher (4c9436f)
- resolve manual grab failures for usenet and improve grab diagnostics (9b3a11b)
- root-folder: use POST instead of PUT for library classification endpoint (012d90e)
- search: add smarter title selection to reduce indexer load (6df36ca)
- search: stop category filter from dropping validated season packs (7c0b560)
- season pack scope, -Infinity score, eliminate double evaluation, catch block decision (484b4cc)
- sse: reconnect with new URL when filters change (8e3fdd5)
- stalled downloads feature reliability and defaults (fd931c4)
- streaming: prevent body consumption crash and enforce VOD playlist markers (354cb80), closes #EXT-X-ENDLIST
- test: mock DB and notifier in RenamePreviewService tests (b4d600a)
- test: resolve lint warnings by using shared fixture factories (b97ba03)
- test: resolve TMDB integration test timeouts (28da29d)
- ui: replace button dropdown triggers with div for Safari iOS compatibility (ac17532)
- unmatched: surface match errors to UI and pass episode from request (87f2d0a)
- use protocol-aware stall reason for torrent vs usenet downloads (97d1adb)
- use synchronous DB API in addToBlocklist and update Emby test (9ea0b0e)
- use TMDB status field to prevent old movies showing 'In Theaters' (5ecd969)
- wire availabilityDelay through API add/edit/get endpoints (5bfb8d0)
Features
- add download release date tracking and in-theaters availability (1c0f5d3)
- add In Theaters section, release date overhaul, and per-movie availability delay (1da3d19)
- apply global preferred language as default original language filter on discover (44798aa)
- assemble GrabDecisionPipeline with all stages (07d2ffa)
- assemble SearchEligibilityPipeline, move buildExistingAttrs to scoring/utils (c9c22b8)
- batch subtitle auto-download for seasons, series, and collections (7806e50)
- calendar: add content rating, genre/rating filters, and non-library TV support (4b07c9d)
- central media occupancy system prevents duplicate automatic grabs (3e1ee73)
- create GrabService types and skeleton with resolveTarget/getExistingFiles (f3e6818)
- dashboard: modularize dashboard with setup-aware quick actions (d02d4e2)
- enrich library movie hero + unify SSE status to sidebar (aedbfdc)
- extract protocol handlers and complete GrabService routing (c16a9dc)
- implement GrabDecisionPipeline stages (ebad75c)
- implement SearchEligibilityPipeline stages (f3aa062)
- indexers: add Jackett and Prowlarr integration (446f7f0)
- indexers: add per-indexer category restriction with open/restrict/default semantics to newznab/torznab indexers (2eed712)
- indexers: add per-indexer usenet settings, extract shared helpers, and improve monitoring (1386480)
- indexers: expand season pack supplemental keywords to include Complete/BluRay/WEB-DL/WEBRip/2160p/1080p/Remux/HDTV variants in parallel for season-only supplemental search (a0a4b58)
- indexers: soft-delete orphaned managed indexers instead of hard-removing them (792dc84)
- indexers: supplement newznab ID search with text variants for anime episodes (45e465a)
- indexers: supplement season-only TV searches with a Complete-keyword text search to surface buried packs (292d7df)
- library: add contextual prompt to cascade monitor state to all seasons/episodes (16d66be)
- library: edit modal now lets you point to the folder for movies and series (86df348)
- library: TMDB episode group support for alternate season ordering (37aeae1)
- library: validate folder path on disk before accepting manual folder picker correction (6a1c2f3)
- redesign library and discover media hero cards (f133397)
- release-status: region-specific dates and TV/streaming availability (2e6e15f)
- root-folder: add folder skip patterns and video file type blocklist to root folder configuration that get ignored during folder scan. (05caf21)
- search: anime-aware filtering, adult categories, and provider cleanup (0d2336e)
- show per-release rejection reasons in interactive search UI with categorized breakdown (caddefe)
- show S##E## episode pill on manual import review and confirm steps (02cdd1f)
- user-configurable blocked search extensions (6724dcc)