Skip to content

Release history

Sortarr releases

Sonarr & Radarr Media Library Insights

All releases

56 shown

v0.9.0 New feature
Notable features
  • Unified provider selection visibility across Setup UI, /api/config, and main interface
  • Promoted Mismatch Center with provider‑aware mismatch reasons for history and enrichment providers
  • Finalized auth/deployment models (basic, basic_local_bypass, external) with validation and recovery guidance
Full changelog

Changelog

[0.9.0] - 2026-05-02

Highlights

  • Unified media, history, and enrichment provider selection across Setup, /api/config, and the main UI so selected, available, effective, and degraded states are visible instead of silently falling back.
  • Promoted Mismatch Center and provider diagnostics into first-class troubleshooting tools, with provider-aware mismatch reasons across supported history and enrichment providers.
  • Finalized the basic, basic_local_bypass, and external auth/deployment model with setup validation, recovery guidance, and documented support boundaries for direct, reverse-proxy, Docker, Unraid, and Windows installs.
  • Expanded the modern UI pass across the toolbar, filters, status blocks, setup flow, tables, provider chips, mobile controls, and reduced-motion-safe animations.
  • Expanded German UI coverage and refreshed the translation catalog for the 0.9.0 interface.

Fixes

  • Setup provider-state summaries now treat stored-secret-backed providers and Arr instances as configured during live setup preview, so the Setup page no longer marks active Tautulli/Plex/Arr selections as unavailable when the main app is already using them.
  • Mismatch Center now distinguishes between loaded rows and total mismatch counts when the response is capped, avoiding contradictory summaries such as showing 3000 loaded rows while reporting a larger provider-conflict total.
  • Provider Insights and Mismatch Center now render explicit loading states on first open instead of presenting mostly empty shells while their API requests are still in flight.
  • Mobile filter/header layout keeps the advanced-help control aligned with the filter bar and gives the footer controls a more stable stack on narrow coarse-pointer screens.
  • Status blocks now surface provider-specific activity more clearly: media and enrichment blocks show active loading/refresh text, and each block’s top gradient animates while its provider is doing work.
  • Main UI polish now refines ambient surfaces, toolbar/filter hierarchy, filter focus states, table depth, and reduced-motion-safe animation behavior.
  • Mismatch Center now compares effective history/enrichment providers by default so inactive configured providers do not create pending/conflict rows; pass include_configured=1 to audit every configured provider.

Follow-up

  • Table row-alignment scroll snapping is intentionally disabled for 0.9.0; revisit the implementation for 0.9.1 as a configurable or lower-cost behavior.
0.8.10 New feature
Notable features
  • Emby direct media-source support for shows and movies with provider-aware diagnostics and image proxying
  • Tracearr history provider with public API and automatic fallback matching
  • Basic local auth bypass mode for trusted direct LAN installs
Full changelog

Added Emby and Tracearr provider support, plus the new basic local auth bypass mode.

Features

  • Added Emby direct media-source support for shows and movies, including setup/test wiring, cached background refresh, provider-aware drilldowns, image proxying, mismatch-center participation, and Emby-backed diagnostics and insights.
  • Added Emby as a selectable enrichment provider, including setup reuse when Emby is already chosen as the active media source.
  • Added Tracearr as a selectable history provider, including setup/test/save wiring, cache/refresh support, mismatch-center participation, and playback-match diagnostics support.
  • Tracearr support now uses its public API with automatic fallback from stable-ID matching to title/year matching when the newer public fields are unavailable.
  • Added an explicit basic_local_bypass authentication mode for trusted direct LAN installs. This mode requires configured Basic Auth credentials, a direct proxy mode, and an explicit local-bypass opt-in; only direct peer addresses in the configured local CIDRs can bypass the browser auth prompt, and forwarded headers are ignored for bypass decisions.
  • Auth modes are now explicitly split as:
    • basic: Sortarr challenges every client with its own Basic Auth credentials.
    • basic_local_bypass: Sortarr still requires Basic Auth credentials, but allowed direct local peers can bypass the browser auth prompt.
    • external: Sortarr trusts a configured upstream auth header from a trusted reverse proxy and does not require Sortarr-managed Basic Auth for steady-state access.
  • Setup, /api/config, and setup bootstrap payloads now expose shared provider-state data for media, history, and enrichment, making selected, available, effective, and reason values explicit.

Fixes

  • Setup source selection is now authoritative: when a specific media, history, or enrichment provider is selected, Sortarr warns when that provider is not configured or not currently effective instead of silently falling back to another configured provider.
  • Split media-source, history-source, and enrichment-provider semantics more consistently across setup summaries, helper text, and provider-specific actions so history-only flows no longer imply that media-provider features are active.
0.8.9 Breaking risk
Security fixes
  • requests upgraded to 2.33.0
  • Secret file resolution hardening
  • Environment variable secret scrubbing
Notable features
  • Jellyfin direct media-source support
  • Streamystats history provider
  • Advanced column header filters
Full changelog

# 0.8.9

Features

  • Setup now shows live per-section header summaries so collapsed steps indicate the current media, history, security, and advanced configuration state at a glance.
  • Setup now prioritizes Plex, Jellystat, Streamystats, or Tautulli within the history/playback section based on the selected preferred history source, keeping the chosen provider closest to the top of the step.
  • Setup now progressively reveals optional Sonarr and Radarr instances behind explicit add actions, keeps history/playback provider forms hidden until they are preferred, already configured, or explicitly added, and adds explicit Remove connection actions for saved optional provider blocks.
  • Setup now adds section-level setup status badges, routes validation failures back to the relevant step, keeps stored-secret-backed sections understandable even when secret fields are blank, and splits setup validation into section-oriented backend helpers.
  • Setup now uses a five-step source-category flow: Media info source, History source, Playback and enrichment providers, Protect access, and Advanced network and performance, with explicit Plex/Jellyfin connection reuse between steps.
  • Added Jellyfin direct media-source support for shows and movies, including provider-aware drilldowns, image proxying, mismatch-center support, and provider-aware insights.
  • Added Jellyfin diagnostics and provider-aware /api/playback/insights support, including library-scoped Jellyfin match-health views.
  • Added Streamystats as a selectable history provider, including setup/test/save wiring, background refresh/cache support, mismatch-center participation, and Streamystats-backed playback overlays for Sonarr/Radarr rows.

Fixes

  • Stopped deleting on-disk Arr, Plex, Tautulli, and Jellystat caches on routine app-version changes during startup. Sortarr now keeps warm caches across normal upgrades and instead relies on explicit cache payload version mismatches to invalidate stale cache formats.
  • Basic Auth setup now accepts a newly entered password even if the remove-password checkbox is ticked, avoiding the upgrade/setup trap where replacing credentials could be misread as requiring the old password to be cleared first.
  • Added env-driven iframe embedding control via SORTARR_FRAME_ANCESTORS while keeping the secure default deny posture. Same-origin embedding now emits X-Frame-Options: SAMEORIGIN; multi-origin embedding relies on CSP frame-ancestors.
  • Sonarr season expansion layout now supports a Merged mode in the season dropdown, combining visible seasons into one sortable episode grid.
  • Sonarr season expansion episode lists now support field-based sorting, including CF Score, via both sticky header clicks and dedicated sort field/order controls.
  • Sonarr score extrema columns now default hidden, and the visible labels/tooltips clarify that they represent the lowest and highest episode custom format scores found within the series or season.
  • Reused the existing startup Arr bootstrap load instead of issuing a second duplicate first-tab fetch during frontend init, reducing redundant initial network and render work without changing visible behavior.
  • Delayed only the hidden-tab startup Arr prefetch so first-load audits prioritize the active tab; manual refreshes and later background refresh behavior are unchanged.
  • Deferred non-critical mobile startup UI wiring for filter/panel controls and Radarr poster hover behavior until after first paint settles, reducing mobile main-thread startup work without changing table load behavior.
  • Expanded header-triggered column filters to more unambiguous numeric and boolean fields, still reusing the existing filter-token engine so sorting and active-filter state stay in sync.
  • Added contextual per-column active filter chips inside the header filter popup so existing column-specific filters are visible and removable without leaving the header workflow.
  • Expanded header-triggered column filters to additional real table columns with unambiguous existing parser semantics, including Instance, Sonarr Avg / Ep and Title Slug, Edition, Video HDR, Watch Time, and TMDB ID.
  • Added the remaining date-like header funnels with conservative raw date-fragment matching for Date Added, Last Aired, Last Search, and Last Watched, keeping the existing parser semantics instead of inventing new date operators.
  • Added a first Excel-style Values mode for safe enum/bool header filters, using the existing popup shell and token engine with dataset-driven checklist values for columns like Status, Monitored, Quality, Resolution, Video Codec, Audio Codec, Has File, Available, and related low-cardinality fields.
  • Expanded the mixed Values/Advanced header popup to Studio and Release Group, using case-insensitive distinct values from the active dataset while keeping the existing advanced text matching available.
  • Capped noisy header checklist popups, added an in-popup overflow hint with search guidance, and frequency-sorted Studio and Release Group values so large distinct-value lists remain usable without disabling mixed mode.
  • Kept Audio Languages and Subtitle Languages in Advanced mode only after auditing the underlying language data, and fixed Users Watched so its header condition menu correctly exposes the numeric operators.
  • Upgraded requests to 2.33.0 to address the current GitHub dependabot advisory for insecure temporary file reuse in extract_zipped_paths().
  • Hardened local secret-file resolution so only files whose real paths remain under the expected base/secrets roots are eligible for loading.
  • Added a defensive secret scrub in env-file writes so plaintext secret values are converted to file/credential refs, or cleared when an external secret ref already exists, before persisting config.
  • Added a lightweight Plex sections bootstrap cache so /api/config can populate plex_libraries without loading the full Plex index cache on cold startup, while still validating the snapshot against the current Plex server URL/token and falling back to the full cache when needed.
  • Jellyfin direct media rows now populate size and bitrate fields from Jellyfin media metadata instead of relying only on local filesystem stats.
  • Jellyfin and Plex direct-media modes now hide Arr-only workflow columns that do not make sense outside Sonarr/Radarr-backed views.
  • Fixed Jellyfin mismatch-center inclusion, insights provider selection, and cache/refresh edge cases that could leave stale partial Jellyfin state in use.
  • Fixed provider-aware match-health reporting so Plex and Jellyfin insights reflect the active playback/history provider instead of misleading provider self-match totals, and now label match summaries as Series / Movies.
  • Fixed direct-media season and episode drilldowns plus poster proxying for Jellyfin and Plex-backed views.
  • Removed the hardcoded sample SORTARR_FRAME_ANCESTORS value from the Docker Compose example, refreshed the Unraid template product description, and expanded Docker entrypoint ownership prep to cover Plex, Jellyfin, Jellystat, and Streamystats cache path overrides.
0.8.8 New feature
Security fixes
  • Upgraded requests to 2.33.0 for temporary file reuse CVE
Notable features
  • Sonarr season expansion with sorting/filtering
  • Header-triggered column filters
  • Values mode for enum/bool filters
0.8.7 New feature
Security fixes
  • Fixed CSRF validation for reverse proxy HTTP/HTTPS scheme drift
Notable features
  • Lowest/Highest Custom Format Score fields
  • Season expansion score summaries
0.8.6 Security relevant
Breaking changes
  • External auth mode requires explicit SORTARR_WAITRESS_TRUSTED_PROXY
  • Changed session/CSRF cookie security defaults
Security fixes
  • Fixed HTTPS setup CSRF for reverse proxies
  • Fixed setup/session cookie transport policy
  • Improved trusted origin validation
Notable features
  • Basic/External authentication choice
  • SORTARR_AUTH_METHOD configuration
  • Public URL hint for cookie security
0.8.5.1 Maintenance

Fixed Docker image build failure by restoring missing Waitress entrypoint file to the build context.

0.8.4 Bug fix
Notable features
  • SORTARR_WAITRESS_TRUSTED_PROXY configuration
  • Setup UI proxy configuration
0.8.3.1 Security relevant
Breaking changes
  • Playback refresh now requires POST instead of GET
Security fixes
  • Fixed bootstrap blocking on partial auth config
  • Removed state-changing GET requests
0.8.3 Security relevant
Breaking changes
  • Session-secret now required to be persistent
  • State-changing operations now require POST
Security fixes
  • Hardened CSRF policy
  • Enforced persistent session secrets
  • Improved CSP connect-src policy
Notable features
  • Diagnostics endpoints for CSRF/security
  • Persistent secret-file support
  • Unsafe recovery mode for lockout
0.8.2 New feature
Notable features
  • Duplicate detection by title+year
  • Secret file support (*_FILE env vars)
  • Windows Credential Manager integration
0.8.1 New feature
Breaking changes
  • Setup now supports Plex-only configurations without Sonarr/Radarr
Notable features
  • Plex playback provider integration
  • Mismatch Center for provider comparison
  • Multi-provider setup support
0.8.0 New feature
Breaking changes
  • Docker image now uses Waitress instead of Gunicorn
Notable features
  • Fullscreen data table
  • Split URL support for API/external
  • Alphabetized searchable filters
0.7.12 New feature
Notable features
  • Separate internal/external URLs
  • Clickable filter shortcuts
0.7.11.2 Maintenance

Precompiled .exe for Windows. - [Sortarr.zip](https://github.com/user-attachments/files/24898627/Sortarr.zip) **Full Changelog**: https://github.com/Jaredharper1/Sortarr/compare/0.7.11.1...0.7.11.2

0.7.10.1 Bugfix

**Full Changelog**: https://github.com/Jaredharper1/Sortarr/compare/0.7.10...0.7.10.1 - Hotfix to resolve translation issues

0.7.10 New feature
Notable features
  • Complete German translation
  • File History badges
  • Filter builder with chips
0.7.3 Bug fix

Fixed Docker setup page configuration persistence by respecting the SORTARR_CONFIG_PATH environment variable. Updated docker-compose example for easier persistence.

0.7.2 Bugfix

## UI Fixes - Update styles.css to prevent Title header from disappearing on scroll.

0.7.1 Maintenance

## Security - Prevent exception details from leaking in health endpoint error responses.

0.7.0 New feature
Notable features
  • Health badge system with alerts
  • Image proxy endpoint
  • Tri-state filter chips
0.6.11 Security relevant
Security fixes
  • Clear-text logging vulnerability in diagnostics
  • Exception exposure in instance warnings
0.6.10 Mixed
⚠ Upgrade required
  • New environment variables: RADARR_WANTED_WORKERS for fetch parallelism, RADARR_INSTANCE_WORKERS for multi-instance workers, and SORTARR_RADARR_LITE_FIRST for lite-first payloads
  • Arr/Tautulli timeouts and worker settings now configurable in setup advanced options
  • Partial results on instance failures now allowed by default; optional strict mode requires all results
Security fixes
  • CSRF protection added to prevent cross-site request forgery attacks
  • CSV formula neutralization prevents injection attacks in exported data
  • Basic authentication added for /api/version and /health endpoints
Notable features
  • Sonarr series expanders with richer episode grids and per-season extras, including episode-level keyboard navigation
  • Table keyboard navigation (arrow keys, Enter to refresh/expand) with hover sync and auto-focus on load
  • Radarr lite-first payloads on cold start with background hydration and parallelized workers (RADARR_WANTED_WORKERS, RADARR_INSTANCE_WORKERS)
Full changelog

UI and columns

  • Add Sonarr series expanders with richer episode grids and per-season extras.
  • Add new Sonarr/Radarr metadata and playback columns/chips with improved mixed-value handling and match-status display.
  • Improve table layout and readability (Title/Path caps, numeric alignment, width stabilization, scroll behavior).
  • Lock Radarr column widths during batched renders to prevent resize flashes.
  • Keep Genres and Last Search cells on a single line in the table.
  • Add keyboard navigation for table rows and Sonarr season lists (arrow keys + enter/expand).
  • Refine keyboard navigation so Enter refreshes rows and left/right control Sonarr expansions.
  • Sync keyboard selection with hover and auto-focus the table on load.
  • Add episode-level keyboard navigation, season-level extras toggle on Enter, and animated Sonarr season/episode expanders.
  • Clamp Radarr text columns and preserve scroll anchors on chip toggles to prevent row shifts.
  • Fix Radarr columns widening after rapid chip/sort interactions.
  • Keep Radarr column widths consistent when filters drop below batched-render thresholds.
  • Expose Arr/Tautulli timeouts and worker settings in setup advanced options.
  • Refine Sonarr keyboard navigation within expanded seasons and speed up expansion animations.
  • Enable season extras when pressing Enter on a selected episode.
  • Allow Radarr lite hydration to complete even while Tautulli background matching is active.
  • Brighten the Tautulli match completion flash in the status panel.
  • Increase chip group divider contrast per theme (lighter in dark mode, darker in light mode).
  • Refine refresh/status UX (per-row refresh controls, status pills/notices, tooltips).
  • Updated UI and styling (more see-through glass panels, Columns panel transparency, filter collapse control, background glow tweaks).
  • Animate filter/chip panel collapse to mirror the restore animation.
  • Disable table scroll snapping at the bottom so the last row stays visible.
  • Hide chips immediately during filter panel collapse to avoid odd text fade.
  • Darken the filter/chip panel glass in dark mode for better readability.
  • Refresh text input focus styling with a glass-like inner glow and unclipped ring.

Performance and reliability

  • Add Sonarr episode-file modes, caching, and Arr backoff to reduce load.
  • Improve rendering performance (batched renders, deferred heavy columns for Sonarr, lighter column visibility work, debounced filter renders, throttled series expansion scroll, deferred header cap work, lite status polling).
  • Defer Sonarr/Radarr wanted/recent grabbed stats on cold start and backfill them in the background.
  • Add Radarr wanted fetch parallelism (RADARR_WANTED_WORKERS) and optional multi-instance fetch workers (RADARR_INSTANCE_WORKERS).
  • Reduce Radarr moviefile fetch overhead by batching movie file lookups.
  • Speed up Radarr table renders by batching earlier and accelerating deferred hydration.
  • Begin Radarr large-table render refactor with a lighter first pass and deferred hydration for heavy columns.
  • Serve lite Radarr payloads on cold start with background hydration (SORTARR_RADARR_LITE_FIRST).
  • Scope Arr circuit breakers by endpoint group so history timeouts do not block episode file calls.
  • Allow partial results on instance failures with optional strict mode.

Security

  • Add CSRF protection, CSV formula neutralization, and basic auth for /api/version and /health.

Refresh and cache workflow

  • Improve per-row refresh messaging, and remove rows when Arr reports missing items.

Tests and tooling

  • Capture selenium scenario failures in perf.json with attached failure artifacts and scenario scoping.
0.6.9 Maintenance

### Security - Redact credentialed URLs and identifiers from Arr/Tautulli warning logs.

0.6.8 New feature
Notable features
  • Per-row refresh with status indicators
  • Grouped column toggles for Playback/Language
  • Deep Tautulli refresh capability
Full changelog

Deployment and configuration

  • Default Docker image to a single Gunicorn worker with threads to keep cache/refresh state consistent.
  • Guard .env reloads with a lock to prevent concurrent config transitions.
  • Allow Arr timeouts to be disabled by setting SONARR_TIMEOUT_SECONDS/RADARR_TIMEOUT_SECONDS to 0.
  • Increase default Sonarr/Radarr request timeouts to 90 seconds for large or remote instances.

Refresh and cache workflow

  • Serialize Arr cache writes in background threads to avoid request stalls and racey disk writes.
  • Apply cache snapshot/atomic updates for Tautulli overlays and in-memory cache refreshes.
  • Snapshot Arr cache payloads before background saves to avoid concurrent mutation issues.
  • Add Refresh Current Tab to update only the active app cache.
  • Add Sonarr/Radarr refresh-all endpoints and UI buttons plus per-row refresh that also triggers Tautulli when configured.
  • Ensure per-row Radarr refresh targets a single movie by sending movieIds to the Radarr command API.
  • Reload just the refreshed series/movie after row refreshes with a short delay for Arr/Tautulli updates.
  • Only force the Tautulli index on per-row reloads when the item lacks keys.
  • Place the per-row refresh control in the Title column as a subtle refresh icon.
  • Show longer per-row refresh status messages without delaying the row reload.
  • Add Deep Tautulli Refresh to rebuild library media info and rerun matching from the UI.
  • Defer Tautulli overlays on cold cache loads and apply matching in the background for faster first paint.

Playback stats and matching

  • Prefer library play counts over history or episode aggregates to avoid double-counted show stats.
  • Log Tautulli index build timings for shows, movies, and history buckets.

Performance and rendering

  • Parallelize Sonarr episodefile fetches with the SONARR_EPISODEFILE_WORKERS cap.
  • Stabilize row keys for duplicate titles and add optional render perf logging/reset hooks for UI baselines.
  • Allow batched rendering on large interactive updates (filters, chips, sorting) while keeping small tables synchronous.
  • Stabilize Title column width on large tables by measuring the longest title per load.
  • Apply column visibility during batched renders so hidden columns don't inflate row height mid-load.
  • Skip redundant full-table column visibility passes after batched renders unless columns changed mid-render.
  • Time-slice batched rendering with a frame budget to reduce main-thread stalls on large tables.
  • Gate inactive-tab prefetch on cold-cache loads and defer it until the first render completes.
  • Enable gzip compression for JSON/CSV API payloads to reduce cold-start transfer time.
  • Cache per-row display values, defer hidden heavy columns, merge deferred hydration passes, and increase batch size to reduce render overhead.
  • Lazily compute light column display values when hidden and hydrate them when columns become visible.
  • Skip filter passes when no query is active and memoize sorted results to avoid repeat sorts on stable data.

UI and columns

  • Add grouped column toggles for Playback and Language columns.
  • Add Date Added column for Sonarr and Radarr views.
  • Hide Date Added by default (available via Columns).
  • Add Radarr bitrate column with estimated fallback when media info is missing.
  • Hold the Tautulli matching notice until the first table render (chips visible).
  • Increase row refresh icon size and contrast in light/dark themes.
  • Spin the row refresh icon while per-row refresh is pending.
  • Mark per-row refreshes as partial when Tautulli is skipped or pending so the notice reflects missing playback data.
  • Stabilize Match Status pill width to reduce column jitter during row refreshes.
  • Restore filled Match Status pill backgrounds for clearer status emphasis.
  • Add purple/cyan pill styling for Future release and Not on disk statuses.
  • Lock column widths during batched renders to reduce post-sort jitter.
  • Clear stale column width locks between rapid sorts.
  • Add subtle per-column dividers (toggle by setting --col-divider-color).
  • Center table headers and data cells (keep Title, Path, Audio Codec left-aligned).
  • Animate and dim rows while per-row refresh is pending.
  • Clamp Audio Codec cell content to keep the column from expanding.
  • Trigger a one-time post-load re-render to stabilize initial column widths.
  • Re-run the column-width stabilization pass after tab or instance chip switches.
  • Add optional render debug flags to disable batching, deferred columns, width locks, or stabilization.
  • Disable deferred heavy-column hydration by default (toggleable via render flags).

Diagnostics

  • Log Arr JSON decode failures with response snippets for faster diagnosis.
  • Add sanitized X-Sortarr-Error headers when Arr fetches fail so the UI can surface hints.
  • Add optional per-item refresh timing output (timing=1) for row refresh diagnosis.
  • Add detailed Tautulli fetch timing breakdowns to the per-item timing output.
0.6.6 Security
Security fixes
  • Polynomial ReDoS vulnerability fixed in trailing-parenthetical title cleanup regex
  • Instance labels no longer logged during cold-start fetch/match steps to prevent sensitive data exposure
Full changelog

0.6.6

  • Avoid logging instance labels during cold-start fetch/match steps to keep logs free of sensitive data.
  • Replace the trailing-parenthetical title cleanup regex with a safe string parser to avoid polynomial ReDoS.
0.6.5 New feature
Notable features
  • Live Tautulli refresh progress with counts
  • Disk-only cache inclusion
  • Performance optimizations for large tables
Full changelog

0.6.5

  • Show live Tautulli refresh progress with processed/total counts and last update time in the status row
  • Refresh both tabs after Tautulli matching completes so data appears without manual tab swaps
  • Include disk-only caches in Tautulli match progress to avoid 0-to-full jumps
  • Replace the Status pill label with live progress and smooth pill transitions; remove redundant Last Updated from the toolbar
  • Keep the cold-cache notice visible while background refreshes run and restore Sonarr column ordering
  • Yield a frame before rendering large fetches and avoid per-batch column visibility passes for smoother table loads
  • Cache per-row sort keys and increase batch sizes for very large tables to reduce refresh overhead
  • Defer hidden-column cell rendering on large tables and hydrate them after the initial render
  • Skip reapplying Tautulli stats to cached rows when the index timestamp is unchanged and add a lite status poller
  • Reapply Tautulli match overlay when cached rows are missing match fields to avoid pending-only counts
  • Serve cached rows immediately on refresh requests and update Arr caches in a background thread when possible
  • Reduce Tautulli index build and match overhead with cached title keys and lazy key generation
  • Slow chip reveal animation for smoother transitions
  • Tune light-theme surfaces (background, toolbars, data, progress) to reduce glare
  • Add a subtle purple tint to the top toolbar in light mode
  • Keep chips visible during refreshes after the first load
  • After Fetch New Data, perform a one-shot background refresh to clear stale mismatch badges
  • Enforce unlimited Tautulli metadata lookups and clear caches on upgrade to prevent history bucket gaps
  • Backfill history items from strict title+year mappings to keep ID buckets current without false matches
  • Move performance tuning fields into the Advanced section of setup
  • Hide Cache seconds from setup (env-only)
  • Document ENV_FILE_PATH, PORT, and SORTARR_LOG_LEVEL env vars in README.
0.6.4 Bugfix

Improved Tautulli integration by hiding unconfigured Tautulli columns in CSV exports, ensuring history merges do retain play counts, playbacks, and watch time; also clears Tautulli refresh lock and marker files during upgrades and refresateshes Sonarr and Radarr screenshots.

0.6.3 Maintenance
Notable features
  • Parallelize Tautulli metadata lookups with periodic cache flushing
  • Clear stale refresh locks to prevent stuck state after crashes
  • Improved matching: avoid title-only matches when release year is present to reduce cross-title collisions
Full changelog
  • Parallelize Tautulli metadata lookups and periodically flush the metadata cache to disk
  • Clear stale Tautulli refresh locks to prevent matching from getting stuck after a crash
  • Avoid title-only Tautulli matches when release year is present to reduce cross-title collisions
  • Show Total (GiB) by default and reorder Sonarr columns to Episodes, Avg / Ep, Total
  • Shorten Tautulli placeholders so columns stay tighter during background matching
  • Switch table layout to auto sizing and reserve scrollbar gutter for consistent column widths during loads
  • Left-align all table columns for consistency
0.6.2 Bugfix
Notable features
  • Fetch New Data now forces a Tautulli background refresh to pick up new matches
  • Tautulli original titles are now included in title-based matching
0.6.0 Security relevant
⚠ Upgrade required
  • First run after upgrade will clear caches and remove legacy Tautulli default env values — review and explicitly set any Tautulli environment variables previously relying on defaults.
  • Default Tautulli timeout and fetch budget have been raised; expect longer initial loads on cold starts.
Breaking changes
  • On first run after upgrade, all caches are cleared and legacy Tautulli default environment variable values are dropped. Users relying on those defaults must explicitly reconfigure them.
Security fixes
  • Base image updated to python:3.14-slim and pip upgraded to address unspecified CVE findings.
Notable features
  • Tautulli match status surfaced in the UI with a mismatch badge, filterable view, and CSV export fields.
  • Tautulli matching now runs in the background with a UI progress notice and auto-refresh until complete.
  • Default Tautulli lookup and fetch limits changed to unlimited for full cold-start coverage.
0.5.15 Security relevant
Security fixes
  • Logs redact sensitive paths and avoid leaking connection error details
Notable features
  • Per-table CSV columns toggle in Columns menu, separate from Advanced filters
Full changelog

0.5.15

  • Add a per-table CSV columns toggle in the Columns menu, separate from Advanced filters
  • Security: redact sensitive paths and avoid leaking connection error details in logs

0.5.13

  • Expose Tautulli metadata lookup and timeout controls in setup and the Unraid template
  • Add a Settings button in the toolbar to reopen setup

0.5.12

  • Display watch time columns as hh:mm instead of decimal hours
  • Add watch vs content hours playback column with ratio sorting and filters
  • Improve Tautulli matching with relaxed title variants (parentheses, &, colon/dash, possessive prefixes, 3D tokens)
  • Request Tautulli library GUIDs/external IDs when available to improve ID matching
  • Use Tautulli metadata lookups to resolve external IDs when GUIDs are Plex-only
  • Cache Tautulli metadata IDs to disk with configurable lookup limits for faster loads
  • Persist Sonarr/Radarr caches to disk and refresh them only via Fetch New Data
  • Fail open when Tautulli data is unavailable, warn in the UI, and cap Tautulli fetch time
  • Increase initial load headroom (Gunicorn timeout + higher default Tautulli budgets) and surface a first-load notice
  • Support PUID/PGID in Docker entrypoint and add defaults to the Unraid template
  • Validate Sonarr/Radarr connections during setup before saving
  • Validate Tautulli connection during setup when configured
  • Add per-instance test buttons with inline setup errors
  • Add advanced UI columns for CSV-only fields, include TMDB ID in Sonarr CSV exports, and surface Content Hours in the Sonarr columns
0.5.13 Feature
Notable features
  • Tautulli metadata lookup and timeout controls in setup and the Unraid template
  • Settings button in the toolbar to reopen setup
Full changelog

0.5.13

  • Expose Tautulli metadata lookup and timeout controls in setup and the Unraid template
  • Add a Settings button in the toolbar to reopen setup
0.5.12 New feature
⚠ Upgrade required
  • Sonarr/Radarr caches now persist to disk; refresh only via Fetch New Data button, not automatically
  • Tautulli unavailability now fails open with UI warnings instead of blocking operations
Notable features
  • Watch vs content hours playback column with ratio sorting and filtering
  • Disk persistence for Sonarr/Radarr and Tautulli metadata caches with configurable lookup limits
  • Connection validation for Sonarr, Radarr, and Tautulli during setup with inline error messages
Full changelog

0.5.12

  • Display watch time columns as hh:mm instead of decimal hours
  • Add watch vs content hours playback column with ratio sorting and filters
  • Improve Tautulli matching with relaxed title variants (parentheses, &, colon/dash, possessive prefixes, 3D tokens)
  • Request Tautulli library GUIDs/external IDs when available to improve ID matching
  • Use Tautulli metadata lookups to resolve external IDs when GUIDs are Plex-only
  • Cache Tautulli metadata IDs to disk with configurable lookup limits for faster loads
  • Persist Sonarr/Radarr caches to disk and refresh them only via Fetch New Data
  • Fail open when Tautulli data is unavailable, warn in the UI, and cap Tautulli fetch time
  • Increase initial load headroom (Gunicorn timeout + higher default Tautulli budgets) and surface a first-load notice
  • Support PUID/PGID in Docker entrypoint and add defaults to the Unraid template
  • Validate Sonarr/Radarr connections during setup before saving
  • Validate Tautulli connection during setup when configured
  • Add per-instance test buttons with inline setup errors
  • Add advanced UI columns for CSV-only fields, include TMDB ID in Sonarr CSV exports, and surface Content Hours in the Sonarr columns
0.5.10 Maintenance

- Docker: change default compose port to 9595 to avoid 8787 conflicts - Docs: update default access URL

0.5.9 Maintenance

- Docker: publish multi-arch images (linux/amd64, linux/arm64/v8) to GHCR and Docker Hub - Docs: note Apple Silicon support and optional platform override

0.5.8 Maintenance

## 0.5.8 - Resolution chips now filter by video quality tags instead of file resolution - README note updated to clarify chip behavior Full changelog: https://github.com/Jaredharper1/Sortarr/compare/0.5.7...0.5.8

0.5.7 Maintenance

Docker compose configuration defaults to the published ghcr.io/jaredharper1/sortarr:latest image.

0.5.6 New feature
Notable features
  • Multi-instance Sonarr/Radarr support end-to-end
  • Instance-aware search and filtering
  • Resolution filtering improvements with tolerances
Full changelog

0.5.6 Release Notes

  • Multi‑instance Sonarr/Radarr support end‑to‑end (backend config arrays, per‑instance cache, public config API, and
    instance‑aware links).
  • Instance naming improvements: friendly names, required only when additional instances are configured, and surfaced in
    chips/Instance column/CSV exports.
  • Setup UI now includes Advanced sections for additional instances, with clearer inline guidance and examples.
  • Instance filtering added to advanced search (instance:) and instance chips/column hide automatically when not
    applicable.
  • Resolution filtering enhanced: tolerances + aliases, and wide 1920x8xx sources now classify as 1080p instead of 720p.
  • Env file writing fixed and expanded to preserve extra keys while supporting new instance fields.
  • Selenium and smoke tests updated for multi‑instance, no‑Tautulli, and large‑dataset scenarios.
  • Docs refreshed to reflect multi‑instance setup, filters, and updated resolution behavior.
  • docker-compose.yaml now supports local builds for testing (with sortarr:local).
0.5.5 Bug fix

Minor fixes and improvements.

Full changelog

Sortarr 0.5.5

  • Fix URL normalization in setup (handles accidental double scheme like http://http://host)
  • Bump requests to 2.32.4
  • Sonarr: always fetch episode files per series to avoid unsupported bulk calls
  • Radarr: use /movie movieFile payload with per-movie fallback when needed

Sortarr 0.5.4 (unreleased)

  • Reduce Arr API calls by bulk-fetching files with safe fallback
  • Reuse HTTP session and log Tautulli/Arr fetch failures
  • Batch table rendering for large libraries
  • Improve table sorting performance and reduce layout jitter during large renders
  • Show playback "Times Watched" for Sonarr too
  • Fix Tautulli ID matching for Radarr playback stats
  • Keep basic auth password hidden and allow clearing it
  • Cache-bust CSS/JS assets using the app version
  • Replace Refresh button with Shift+Click on Load (fixes stale UI error)
  • Add Reset UI button to clear local UI settings
  • Fix audio channel filters for 5.1/7.1 values
0.5.3 New feature
⚠ Upgrade required
  • Optional: configure TAUTULLI_URL and TAUTULLI_API_KEY environment variables (or via /setup) to enable playback statistics
Notable features
  • Optional Tautulli integration for playback statistics (play count, last watched, watch time, users watched)
  • Audio and subtitle language columns with friendly names and expandable lists
  • New filters: audiolang, sublang, nosubs, playcount, lastwatched, dayssincewatched, watchtime, users, neverwatched
Full changelog

Sortarr 0.5.3

Highlights

  • Optional Tautulli integration for playback stats (play count, last watched, watch time, users watched)
  • Playback columns/filters/chips only appear when Tautulli is configured
  • Audio/subtitle language columns with friendly names, plus language chips
  • Expandable language lists with “Show all” for large subtitle/audio sets
  • New filters: audiolang, sublang, nosubs, playcount, lastwatched, dayssincewatched, watchtime, users, neverwatched
  • Faster tab switching via background prefetch of the other tab
  • Setup page includes optional Tautulli fields

Upgrade notes

  • No action required for existing users.
  • To enable playback stats, set TAUTULLI_URL and TAUTULLI_API_KEY (via /setup or env file).
0.5.2 Maintenance

- Image-based compose + renamed service/container in docker-compose.yaml. - Release publish workflow in .github/workflows/publish-image.yml. - Updated Docker instructions in README.md. - Version bump and changelog entry in app.py and CHANGELOG.md.

Beta — feedback welcome: [email protected]