Skip to content

Releases: Maintainerr/Maintainerr

v3.15.0

09 Jun 16:54

Choose a tag to compare

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 /identity and 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 /identity and 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_settings table with fields for download client configuration, including download_client_url, download_client_username, download_client_password, download_client_delete_data, and download_client_fallback_ratio.

Internal

  • Removed unused Plex API helpers: getWatchlist and getDiscoverDataUserState (#3064).

Dependencies

  • Updated 8 dependencies, including typescript-eslint, @types/node, and react-hook-form.

v3.14.0

05 Jun 23:09

Choose a tag to compare

3.14.0 (2026-06-05)

Highlights

  • Added /api/health endpoints 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_LEVEL environment variable (#3053).

Breaking Changes

  • None.

Features

  • Added support for LOG_LEVEL environment variable to override persisted log settings on startup (#3030).

Fixes

  • Fixed issue where saving log settings would override an active LOG_LEVEL environment 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 yarn command-not-found errors indicate a stale node_modules directory.

Dependencies

  • Updated 20 dependencies, including @typescript-eslint/parser, react-router-dom, axios, and vite.

New Contributors

v3.13.0

28 May 14:01

Choose a tag to compare

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 operator field 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

v3.12.1

23 May 21:26

Choose a tag to compare

Highlights

  • Added ruleEvaluationFailed field 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 itemExists checks 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_CONCURRENCY from 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 ruleEvaluationFailed column to the collection_media table to track rule evaluation failures.

Internal

  • Removed unused forwardRef imports 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 ArrLookupCache deduplication and eviction on failure.

Dependencies

  • Updated 13 dependencies, including nodemailer, glob, qs, postcss, and vite.

v3.12.0

21 May 15:40

Choose a tag to compare

Highlights

  • Added Emby as a third supported media server alongside Plex and Jellyfin (#2911).
  • Introduced Jellyfin-only Streamystats integration, including a new settings tab and per-user stats panel (#2923).
  • Fixed Emby library size computation and metadata updates to align with documented API behavior (#2924).

Breaking Changes

  • None.

Features

  • Added Emby as a third supported media server (#2911).
  • Introduced Jellyfin-only Streamystats integration, including a new settings tab and per-user stats panel (#2923).

Fixes

  • Fixed Emby library size computation and metadata updates to align with documented API behavior (#2924).
  • Resolved transitive security advisories by forcing patched versions of dependencies.
  • Fixed issue with Emby login error styling.
  • Prevented Jellyfin API key from being sent during Streamystats connection tests (#2925).
  • Fixed overlay ellipse anchoring during drag and resize (#2938).
  • Synced settings forms via react-hook-form values to stop render loops.

Performance

  • None.

Database migrations

  • Added support for Emby by introducing new columns: emby_url, emby_api_key, emby_user_id, and emby_server_name to the settings table.
  • Added support for Streamystats by introducing a new column: streamystats_url to the settings table.

Internal

  • Updated test for overlay "Run Now" button to wait for enabled state before clicking.
  • Replaced partial query mocks in CollectionDetailPage spec with typed helpers (#2914).
  • Documented GitHub CI workflow commands (#2912).
  • Improved CI docs drift scanner to surface documentation-labeled items.

Dependencies

  • Updated 29 dependencies, including @tanstack/react-query, @vitejs/plugin-react, vitest, react-router-dom, and tar.

v3.11.2

14 May 14:54

Choose a tag to compare

Fixes

  • Fixed an issue in Sonarr where the "Unmonitor and delete season + delete show if empty" action failed to delete the now-empty show after removing a season's files (#2897).

Internal

  • Restored missing release headers in changelog.
  • Backfilled missing new contributor in release notes.
  • Added open_pr input to the docs-drift CI workflow for drafting documentation PRs.

Dependencies

  • Updated 4 dependencies, including notable packages: @tanstack/eslint-plugin-query, zod, and jest.

v3.11.1

13 May 06:28

Choose a tag to compare

Highlights

  • Fixed an issue where Jellyfin libraries with "Group films into collections" enabled caused BoxSet members to incorrectly appear and disappear from rule results (#2870).
  • Improved error message when a Plex library section ID is invalid, addressing user confusion when libraries are removed and re-added (#2883).
  • Enhanced custom collection UX by renaming tags, adding tooltips, and providing warnings when disabling the feature (#2882).

Fixes

  • Validated Jellyfin IDs before refresh to prevent errors (#2853).
  • Resolved a collection add/remove loop for Jellyfin libraries with "Group films into collections" enabled (#2870).
  • Improved error message for invalid Plex library section IDs (#2883).
  • Updated custom collection terminology and added warnings for better user experience (#2882).

Internal

  • Added explicit token permissions to the Fider move CI job to address a CodeQL warning.
  • Added an environment gate to mitigate a TOCTOU vulnerability in the release_pr workflow (#2879).
  • Applied yarn resolutions to address transitive dependency vulnerabilities in dompurify, picomatch, and postcss (#2881).

Dependencies

  • Updated 10 dependencies, including notable packages: vite, @typescript-eslint/eslint-plugin, and typeorm.

New Contributors

v3.11.0

11 May 17:35

Choose a tag to compare

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 sizeBytes was not yet cached (#2855).

Database migrations

  • Added a new mediaServerSort column to the collection table 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.

v3.10.2

08 May 11:07

Choose a tag to compare

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 sizeBytes column to the collection_media table to track media size.

Dependencies

  • Updated 8 dependencies, including react-router-dom, postcss, and axios.

v3.10.1

03 May 15:31

Choose a tag to compare

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, and zod.