Global/per‑group exclusions + OR rules
Release history
Maintainerr releases
Looks and smells like Seerr, does the opposite. A library maintenance tool for Plex and Jellyfin.
All releases
23 shown
Concurrency rename + limit + failure tracking
- Overlay reset operations are now gated against concurrent processing runs (#2827).
- Force-processing support for overlay operations
- Enhanced storage metrics with separate panels for reclaimable space by movies, shows, seasons, and episodes
Full changelog
Highlights
- Added support for force-processing overlays and gated reset operations against concurrent processing runs (#2827).
- Improved collection sorting: collections now apply sort order at save time and synchronize with the media server (#2860, #2868).
- Enhanced storage metrics with detailed breakdowns for potential reclaimable space by movies, shows, seasons, and episodes (#2854).
Breaking Changes
- Overlay reset operations are now gated against concurrent processing runs (#2827).
Features
- Added force-processing support for overlay operations (#2827).
- Enhanced storage metrics with separate panels for potential reclaimable space by movies, shows, seasons, and episodes (#2854).
Fixes
- Fixed collection sorting to apply on save and synchronize with the media server (#2860, #2868).
- Resolved issue where excluding a single episode incorrectly excluded all episodes of the same show (#2867).
- Fixed storage metrics to merge shared volumes across hosts when byte-exact (#2852).
- Corrected Jellyfin retry ID check to align with pre-filter logic (#2853).
- Fixed issue where reclaimed bytes were not credited when
sizeByteswas not yet cached (#2855).
Database migrations
- Added a new
mediaServerSortcolumn to thecollectiontable to store media server sort order.
Internal
- Added typed TanStack Query test helpers and migrated UI spec mocks to use typed builders (#2863).
- Added an architecture overview document detailing the monorepo structure, core components, and deployment guidelines (#2817).
Dependencies
- Updated 5 dependencies, including notable updates to TypeScript and typescript-eslint.
- Deduplicated reclaimable bytes and added per‑type cleanup byte counters in storage metrics
Full changelog
Highlights
- Fixed version comparison logic to correctly detect updates for multi-digit version segments (#2838).
- Improved storage metrics by deduplicating reclaimable bytes and adding per-type cleanup byte counters (#2833).
Fixes
- Suppressed re-addition of items to collections after handler actions, preventing redundant notifications (#2837).
- Corrected version comparison for multi-digit segments to ensure update detection (#2838).
- Deduplicated reclaimable bytes in storage metrics and excluded collections without delete rules; added per-type cleanup byte counters (#2833).
Database migrations
- Added a
sizeBytescolumn to thecollection_mediatable to track media size.
Dependencies
- Updated 8 dependencies, including react-router-dom, postcss, and axios.
Fixed EPIPE crash stabilizing canvas preview SSE streams.
Full changelog
Fixes
- Fix EPIPE crash and stabilize canvas previews by hardening SSE stream client to handle late EPIPE errors gracefully (#2832).
Dependencies
- Updated 6 dependencies, including notable packages:
axios,@tanstack/react-query, andzod.
- Compact image picker in overlay Properties panel for direct UI uploads
- Cumulative cleanup totals section on Storage Metrics page
Full changelog
Highlights
- Added a compact image picker in the overlay Properties panel, allowing users to upload images for overlay Image elements directly from the UI (#2814).
- Fixed overlay template selection reverting to "Default" after saving a rule group by ensuring templates are loaded before applying changes (#2815).
- Scaled overlay shape strokes in previews and renders to ensure consistent appearance between the editor and server output (#2803).
Features
- Added a cumulative cleanup totals section to the Storage Metrics page, displaying aggregated counts of items, movies, and episodes handled across all collections (#2804).
- Introduced the ability to upload images for overlay Image elements directly from the UI (#2814).
Fixes
- Tightened upload filename guards and improved error handling for missing directories in overlay image and font uploads.
- Replaced
Intl.ListFormatwith a custom helper to fix type-checking issues in the UI. - Fixed overlay template selection reverting to "Default" after saving a rule group (#2815).
- Hardened server logging against
stdioEPIPEerrors to prevent crashes (#2812). - Guarded collection template mode in overlays.
Internal
- Updated repository instructions to consolidate agent and Copilot guidance into a single
AGENTS.mdfile (#2813). - Added new contributors to the changelog (#2806).
Dependencies
- Updated 3 dependencies, including
rolldown,@tanstack/eslint-plugin-query, andknip.
- Block path traversal in log file download endpoint
- Custom collection poster support with upload, fetch, and clear endpoints for Plex and Jellyfin
- Cache Jellyfin collections and children to reduce redundant queries during rule execution
- Add ntfy.sh as supported notification service
Full changelog
Highlights
- Fix: Block path traversal in log file download endpoint to prevent unauthorized file access.
- Feat: Add custom collection poster support, including upload, fetch, and clear endpoints, with integration for Plex and Jellyfin.
- Fix: Unstick rules-collections lock to resolve "Collection handling is already running" errors and improve rule execution reliability.
Features
- Cache Jellyfin collections and their children to reduce redundant queries during rule execution (#2800).
- Add ntfy.sh as a supported notification service (#2769).
- Replace Fider cc:user comment prefix with Discord notifications.
Fixes
- Block path traversal in log file download endpoint.
- Unstick rules-collections lock and clarify
sw_watcherslabels across media servers (#2801). - Fix overlay SSE EPIPE handling to prevent server crashes during transient failures (#2781).
- Fix UI TypeScript configuration and resolve hidden type errors (#2776).
- Fix overlays preset editing, cron discoverability, and tab gating (#2775).
- Bound Plex request timeout and propagate watch-history errors (#2773).
- Dedupe sibling-rule media events within a batch to reduce redundant notifications.
- Stop cross-rule contamination for same-titled automatic collections (#2766).
- Fix Fider stale-sweep to create the 'stale' tag on first run.
Performance
- Harden rule-executor job management and SSE listener handling to prevent lock leaks (#2801).
Internal
- Add automated Fider triage, invitation, re-evaluation, and stale workflows.
- Tighten Fider triage script and improve handling of pre-existing matches.
- Add "Behavioral fixes worth reviewing" section to docs-drift CI.
- Restore version header and add "New Contributors" section to release notes.
Dependencies
- Updated 10 dependencies, including typescript-eslint, react-hook-form, and nodemailer.
- Removed event-driven overlay processing for collections and rules
- Storage Metrics dashboard
- Overlay templates system
- Calendar page
Full changelog
Highlights
- Added a new Storage Metrics dashboard for aggregating disk usage from Radarr/Sonarr root folders, deduplicating mounts, and surfacing reclaimable space. Includes accurate per-library size computation for Plex and Jellyfin.
- Introduced overlay templates and refactored the overlay system to include new entities, services, and controllers. Added an overlay editor, template management features, and a font upload endpoint.
- Introduced a Calendar page to the UI.
- Implemented drag-and-drop reordering for rules and sections in the Rule Creator, improving usability and state management.
Breaking Changes
- Removed event-driven overlay processing for collections and rules. Overlays now run only on the overlay schedule or via explicit actions (#2733).
Features
- Added drag-and-drop reordering for rules and sections in the Rule Creator.
- Added
collection_siblings_lastViewedAtproperty to rules for aggregating the newest watched-at timestamp across a movie's collection siblings.
Fixes
- Fixed
DELETE_SHOW_IF_EMPTYin Sonarr to handle Seerr integration properly and added debug logs for cleanup skips (#2763). - Fixed
useLockBodyScrollbehavior to address scrolling issues caused by simultaneous modal closures (#2749). - Improved handling of watch history failures in Jellyfin and Plex, ensuring better error distinction and fail-closed behavior (#2744).
- Fixed multiple issues with overlays, including preserving the
isDefaultflag, resolving font mismatches, and improving overlay notifications (#2723). - Fixed storage metrics to deduplicate same-host instances, improve badge colors, and refine capacity calculations for shared filesystems.
- Fixed collection item action handling to improve validation, serialization, and UI consistency (#2730).
- Fixed React hooks warnings by converting effect-driven data fetches to TanStack Query hooks and derived state (#2729).
Performance
- Optimized storage metrics by deduplicating library sizes and improving error handling for Plex and Jellyfin (#2718).
Database Migrations
- Added
overlay_templatestable for managing overlay templates. - Added
overlay_settingstable for storing overlay configuration. - Added
overlay_item_statetable for tracking overlay processing state, with a unique index oncollectionIdandmediaServerId.
Internal
- Refactored the overlay system to support Jellyfin and align with the media server interface (#2756).
- Simplified Rule Creator state management and promoted shared button components.
- Retired the
ACTIONS_TOKENPAT in favor of GitHub App tokens for CI workflows (#2762). - Updated release process to exclude chore commits from release notes and generate notes using GitHub Models (#2740).
- Added a docs drift report workflow to surface user-facing changes requiring documentation updates (#2745).
Dependencies
- Updated 40 dependencies, including nodemailer, @typescript-eslint/eslint-plugin, prettier-plugin-tailwindcss, vite, @nestjs/swagger, and @tanstack/react-query.
New Contributors
- @gssariev made their first contribution in https://github.com/Maintainerr/Maintainerr/pull/2644
- @nbellowe made their first contribution in https://github.com/Maintainerr/Maintainerr/pull/2721
- @MrLinford made their first contribution in https://github.com/Maintainerr/Maintainerr/pull/2723
- @ionred made their first contribution in https://github.com/Maintainerr/Maintainerr/pull/2749
- Explicit exists rule operators for filtering rules and collections
Full changelog
- Collection membership storage model changed
- Downgrading to older Maintainerr versions is not supported; rolling back may lose collection membership details for items with both rule and manual inclusion
- Quality profile change action for Radarr and Sonarr
- Plex connection resilience with auto re-discovery and manual override
Fixed a bug in servarr that caused issues with identity validation during filtered API lookups.
- Tautulli configuration is deleted when switching the media server to Jellyfin.
- Added per-provider metadata refresh action
- Added ID validation and retry path for metadata refresh
- Added overlay data endpoint for collections
Fixed collection orphaning and duplicate issues. Resolved Jellyfin batch creation crash. Improved request-line size handling. Enhanced Jellyfin Items API usage. Improved logging with noise reduction and secret sanitization. Fixed UI search debouncing and loader spinners. Optimized routes and dependencies.
- ARR disk target path selection for disk space rules
- Missing episode rules
- Jellyfin favorites rule property
Fixed collection notification events to emit only after successful operations. Resolved Seerr addUser returning null.
- Database migrations not backward compatible
- Multi-server schema requires fresh migration
- Jellyfin support
- Multiple media server support
- Collection size display
- Database download functionality
- Apple touch icon
Fixed source maps for production debugging, hidden test media in non-rule collections, and resolved rule editor crashes