Releases: Maintainerr/Maintainerr
Release list
v3.17.1
v3.17.0
3.17.0 (2026-07-05)
Highlights
- Added new rule properties for Sonarr and Radarr, enabling advanced scoping and rolling window functionality (#3095, #3222, #3223).
- Fixed issues with library reconciliation and improved error handling for transient errors and unavailable dependencies (#3226).
- Addressed compatibility issues with older CPUs by ensuring the server continues to boot when certain libraries fail to load (#3184).
Features
- Added
seasonFileRankrule property for Sonarr, enabling season-level rolling windows (#3223). - Added
movieTitleandmovieIdrule properties for Radarr, allowing movie-specific scoping (#3222). - Added
episodeFileRankrule property for Sonarr withseriesTitleandseriesIdscoping (#3095).
Fixes
- Resolved validation error when adding seasons or episodes with hex-GUIDs to collections in Jellyfin (#3225).
- Improved clarity of rule-builder labels for rank properties (#3224).
- Fixed misleading messaging for automatic collections when a library is missing (#3203, #3211).
- Hardened library reconciliation against transient errors and clarified messaging for unavailable dependencies (#3226).
- Ensured server boots even when
sharplibrary fails to load on pre-x86-64-v2 CPUs (#3184).
Performance
- Patched vulnerable transitive dependencies, including
multer,dompurify, andlinkify-it, via resolutions (#3201).
Database migrations
- Backfilled the
operatorfield in stored rules to ensure explicit values for section and within-section operators, preserving existing behavior.
Internal
- Addressed a potential code scanning alert related to untrusted checkout in GitHub Actions (#3209).
Dependencies
- Updated 28 dependencies, including
sharp,typescript-eslint,prettier, andeslint.
New Contributors
- @jackemcpherson made their first contribution in #3095
v3.16.0
3.16.0 (2026-06-28)
Highlights
- Sonarr/Radarr tags can now be written from Maintainerr collections and exclusions (#3162).
- Fixed Seerr rule evaluation for large libraries by implementing bulk-prefetching (#3170).
- Resolved Sonarr season corruption issue affecting
part_of_latest_seasonrule (#3169).
Features
- Added functionality to write Sonarr/Radarr tags based on Maintainerr collections and exclusions (#3162).
Fixes
- Increased Sonarr/Radarr ID lookup timeout to 20 seconds for slow servers (#3181).
- Fixed Seerr rule evaluation degradation by bulk-prefetching requests (#3170).
- Prevented mutation of shared Sonarr season arrays, resolving
part_of_latest_seasonrule failures (#3169). - Fixed collection log cleaning to avoid TypeORM errors on undefined
ruleGroup(#3168).
Database migrations
- Added
tagInArrcolumn to thecollectiontable to support Sonarr/Radarr tagging.
Dependencies
- Updated 24 dependencies, including
prettier,eslint-plugin-jest,@nestjs/typeorm, and@vitejs/plugin-react.
v3.15.3
3.15.3 (2026-06-23)
Highlights
- Improved Plex rule evaluation performance by prefetching watch history in bulk, reducing redundant API calls (#3082).
- Standardized UI action buttons with consistent corner radii, text styles, and theme colors (#3143, #3144).
Fixes
- Log benign SSE client disconnects without a stack trace (#3145).
- Initialize the active media server adapter immediately after a switch to prevent false connection-test failures.
- Dropped BETA tag from notifications and marked download client as BETA.
- Fixed
ExecuteButtoncorner radius to align with the sharedButtoncomponent (#3144). - Standardized action buttons on the shared
Buttoncomponent and applied consistent theme colors (#3143). - Explicitly installed
corepackin the dev container for Node 26+ compatibility (#3141).
Performance
- Bulk-prefetched Plex watch history for rule evaluation, reducing redundant API calls (#3082).
Internal
- Documented the L1/L2/L3 confinement model for agents in the devbox.
- Fixed stale workspace path in agent documentation.
- Simplified devbox workflow to work and push from inside the container.
- Documented remote devbox workflow.
- Documented development environment.
Dependencies
- Updated 1 dependency, including explicit installation of
corepackfor Node 26+ (#3141).
v3.15.2
3.15.2 (2026-06-20)
Highlights
- Fixed transient Sonarr/Radarr lookup failures that could cause incorrect collection item state changes under heavy load (#3125, #3128, #3139).
- Resolved issues with Jellyfin/Emby collections, ensuring proper handling of empty collections and preventing resurrection of deleted media-server links (#3129, #3134, #3135, #3137).
- Improved Streamystats watchlist handling by inheriting parent show information at the season/episode level, preventing unintended deletions/unmonitoring (#3127, #3133).
Fixes
- Fail closed on transient Sonarr/Radarr lookup failures to prevent incorrect collection item state changes (#3125, #3128, #3139).
- Fixed handling of Jellyfin/Emby collections to heal empty collections, prevent redundant deletions, and avoid resurrecting deleted media-server links (#3129, #3134, #3135, #3137).
- Corrected Streamystats watchlist handling to inherit parent show information at the season/episode level, ensuring accurate rule evaluations (#3127, #3133).
Dependencies
- Updated 12 dependencies, including @types/node, sharp, better-sqlite3, and @typescript-eslint/eslint-plugin.
v3.15.1
3.15.1 (2026-06-17)
Highlights
- Fixed issue where Emby collections failed to create due to an empty initial item, resolving HTTP 500 errors (#3097).
- Fixed Radarr exclusion handling to correctly treat "already excluded" 400 responses as success, ensuring items are properly removed from collections (#3096, #3099).
- Fixed Plex
sw_lastWatchedgetter to returnnullfor never-watched shows, preventing TypeErrors (#3102).
Fixes
- Fixed Emby collections creation by adding an initial item to avoid HTTP 500 errors (#3097).
- Skipped remote creation for empty Emby collections to prevent unnecessary HTTP 500 errors (#3098).
- Fixed Radarr exclusion handling to correctly treat "already excluded" 400 responses as success, avoiding misreporting and ensuring proper exclusion (#3096, #3099).
- Resolved Plex
sw_lastWatchedgetter issue where it threw TypeErrors for never-watched shows (#3102). - Fixed Emby movie/show ID resolution to correctly resolve IDs from the item itself, addressing failures in movie rule actions (#3100).
- Fixed Plex collections to self-heal when empty collections reject every item addition (#3094).
Performance
- Increased timeout for
OverlayRenderServicerender tests to avoid CI flake due to slow native cold-start (#3101).
Dependencies
- Updated 23 dependencies, including nodemailer, @typescript-eslint/parser, axios, @nestjs/typeorm, and sharp.
v3.15.0
3.15.0 (2026-06-09)
Highlights
- Added functionality to delete items from the download client and manage collection membership within the media server.
- Optional integration for qBittorrent to remove completed downloads and optionally their data when Radarr/Sonarr deletes media (#3054).
- Plex connection fixes: updated connection probe to use
/identityand server discovery to use v2/api/v2/resources(#3063).
Features
- Added item deletion and collection management features within the media server.
- Added download client cleanup for Radarr/Sonarr deletions, scoped to qBittorrent (#3054).
Fixes
- Fixed Plex connection issues: updated connection probe to use
/identityand server discovery to use v2/api/v2/resources(#3063). - Fixed overlay rendering issues: uniform style scaling, corrected rotation offsets, and improved font register logging (#3057).
- Improved metadata ID handling: media-server IDs are now authoritative unless corroborated by provider data (#3011).
Database migrations
- Added a new
temporary_settingstable with fields for download client configuration, includingdownload_client_url,download_client_username,download_client_password,download_client_delete_data, anddownload_client_fallback_ratio.
Internal
- Removed unused Plex API helpers:
getWatchlistandgetDiscoverDataUserState(#3064).
Dependencies
- Updated 8 dependencies, including
typescript-eslint,@types/node, andreact-hook-form.
v3.14.0
3.14.0 (2026-06-05)
Highlights
- Added
/api/healthendpoints for liveness and readiness checks, including database health status (GET /api/health,GET /api/health/live,GET /api/health/ready) (#3029). - Collection handler now skips media currently being streamed to avoid deleting or modifying active content (#3027).
- Fixed issue where saving log settings would override an active
LOG_LEVELenvironment variable (#3053).
Breaking Changes
- None.
Features
- Added support for
LOG_LEVELenvironment variable to override persisted log settings on startup (#3030).
Fixes
- Fixed issue where saving log settings would override an active
LOG_LEVELenvironment variable (#3053). - Fixed webhook agent to validate URL schemes before posting, preventing potential SSRF vulnerabilities (#3031).
- Fixed rule group saving to preserve collection links and visibility on partial updates (#3045, #3046).
- Fixed issue with finding manual collections across libraries on Jellyfin/Emby servers (#3042).
- Fixed issue where deleted media remained stuck in Jellyfin/Emby collections and caused repeated processing errors (#3023, #3024, #3040).
- Fixed issue where Seerr requests for episode rules incorrectly deleted entire season requests (#3015).
- Fixed issue where Radarr bulk exclusions were not used, causing duplicate 400 errors (#3012).
- Improved failure notifications for collection handling to include the name of the failing collection (#3013).
Performance
- None.
Database migrations
- None.
Internal
- Updated README with refreshed features, health endpoint documentation, deployment examples, and credits (#3048).
- Clarified that
yarncommand-not-found errors indicate a stalenode_modulesdirectory.
Dependencies
- Updated 20 dependencies, including
@typescript-eslint/parser,react-router-dom,axios, andvite.
New Contributors
- @Arvuno made their first contribution in #3029
v3.13.0
3.13.0 (2026-05-28)
Global vs scoped exclusions
Exclusions are now either global (everywhere) or per-group — not both. Setting a global exclusion replaces any per-group ones for that item. If you later remove the global exclusion, you'll need to re-add the per-group ones.
Per-group exclusions stay in their group
Per-group exclusions used to hide an item in every group. They now apply only to the group you set them in, so items you excluded in one group may start showing up in others. Existing exclusions aren't auto-converted — to exclude something everywhere, use a global exclusion.
Rule section operators
A section without an operator used to be treated as AND; it's now OR instead. Existing rules are migrated automatically so they keep evaluating the same way.
If a multi-section rule wasn't matching as you expected, this is probably why. The operator between sections is now visible in the rule editor, and new rules need an explicit operator on every section after the first.
This migration is not reversible.
Highlights
- Added metadata fallback for rules when series are absent from Sonarr, using the configured metadata provider (#3002).
- Introduced Streamystats watchlist rule properties for Jellyfin, enabling watchlist-based rules (#2977).
- Fixed OR rule sections incorrectly evaluated as AND due to operator coercion, ensuring accurate rule logic (#2971).
- Scoped exclusions to their rule group under TypeORM 1.0, resolving latent bugs (#2991).
Features
- Added Plex rule for "Amount of episodes marked as watched" (#2975).
- Added Streamystats watchlist rule properties for Jellyfin (#2977).
- Adopted Tailwind CSS v4 and implemented related UI enhancements.
Fixes
- Fixed OR rule sections incorrectly evaluated as AND due to operator coercion (#2971).
- Prevented Plex auth drop when plex.tv is unreachable (#2996).
- Improved rule import robustness for YAML and community rules across media servers (#2986, #2976).
- Fixed HTTP 414 errors when creating large collections by batching item additions (#3001).
- Resolved navigation issues in the UI for global-exclusion warning links.
- Omitted empty Discord embed thumbnails to prevent webhook failures.
- Fixed styling and crash issues in Test Media search and unary-rule comparisons (#2978).
Performance
- Improved cache hygiene for external API and metadata responses (#2972).
Database migrations
- Backfilled the
operatorfield in stored rules where it was previously null, ensuring explicit AND/OR values for accurate rule evaluation.
Internal
- Refactored shared media getter rule helpers to reduce duplication (#2922).
- Unified form field styling into a single source for consistency.
Dependencies
- Updated 14 dependencies, including notable packages like
typeorm,@tanstack/react-query, and@typescript-eslint/eslint-plugin.
New Contributors
- @stormshaker made their first contribution in #2972
- @CampbellMG made their first contribution in #2975
v3.12.1
Highlights
- Added
ruleEvaluationFailedfield to collection media, enabling tracking of rule evaluation failures. - Improved rule evaluation performance by batching operand reads and reducing concurrency to prevent backend overload.
- Fixed Emby overlay issues where posters were not restored after media left a collection.
Features
- Enhanced error handling for Emby image uploads by attaching response body to thrown errors for better debugging.
Fixes
- Scoped Emby
itemExistschecks to user context to resolve overlay revert issues. - Corrected overlay notification titles for Emby/Jellyfin movies.
- Fixed collection rule group entity type in the server.
- Provided production peer dependencies for the UI.
Performance
- Reduced
RULE_EVALUATION_CONCURRENCYfrom 16 to 8 to prevent backend overload. - Batched rule operand reads with bounded concurrency for improved performance.
- Deduplicated uncached Sonarr/Radarr identity lookups during rule evaluation.
Database migrations
- Added
ruleEvaluationFailedcolumn to thecollection_mediatable to track rule evaluation failures.
Internal
- Removed unused
forwardRefimports in the server module after settings module refactor. - Renamed settings services and fields to better reflect their roles.
- Decoupled settings service into a data store and coordinator for improved modularity.
- Added tests for
ArrLookupCachededuplication and eviction on failure.
Dependencies
- Updated 13 dependencies, including nodemailer, glob, qs, postcss, and vite.