Skip to content

Gadarr Parity Check

This is the working parity audit against the Arr applications. Gadarr is scoped as a library, release, queue, import, metadata, notification, and deployment app, not a multiplayer server operations tool.

Sources Checked

  • Sonarr repository: https://github.com/Sonarr/Sonarr
  • Radarr repository: https://github.com/Radarr/Radarr
  • Prowlarr repository: https://github.com/Prowlarr/Prowlarr
  • Sonarr API docs: https://sonarr.tv/docs/api/
  • Radarr API docs: https://radarr.video/docs/api/
  • Prowlarr API docs: https://prowlarr.com/docs/api/
  • Servarr wiki: https://wiki.servarr.com/

Upstream Product Shape

Sonarr and Radarr are library automation apps. They monitor wanted media, search RSS/indexers, apply profiles, send accepted releases to download clients, import completed downloads, track queue/history/blocklist state, expose calendar and health views, and keep a dense settings surface.

Prowlarr is not a library app. It is an indexer manager and proxy. Gadarr should keep using Prowlarr as a source of indexers and searches while Gadarr owns game library, release decisions, queue, history, import, and future patch-apply behavior.

Parity Matrix

Surface Sonarr/Radarr/Prowlarr pattern Gadarr status
Library item Sonarr/Radarr monitored item with root folder, profile, and metadata Done for games with monitor state, root folder, install path, aliases, profile, lookup-backed add flow
Root folders Storage roots with scan and import behavior Done for manual roots and folder scans
Existing library scan Scan disk and link discovered items Done for folder, Steam/GOG/Epic/Itch manifests, Lutris local library database discovery, Amazon Games local cache import, EA App/Origin local manifest import, Ubisoft Connect local registry/cache import, and Battle.net local registry/product cache import
Profiles Quality/language/release rules Done as platform, channel, source trust, seed, protocol profiles plus Servarr-style quality profile aliases
Custom formats/release profiles Required, preferred, ignored terms and scoring Done as release profiles, custom format aliases, and candidate scoring
Manual search Per item search with acceptance/rejection reasons Done for games and patch rows
Automatic search/RSS Background feed sync, candidate creation, and accepted-release grabs Done as monitored add/search and RSS sync that save candidates, respect profiles, and auto-grab the best acceptable monitored release when no active queue exists
Indexers Prowlarr sync, Torznab/Newznab, per-indexer settings Partial: Prowlarr pull plus Prowlarr indexer sync into saved Torznab/Newznab proxy sources, direct Torznab/Newznab/RSS/Fanzub/IP Torrents/Nyaa/TorrentLeech/BroadcastheNet/FileList/HDBits, with Prowlarr indexer status/stats visibility, category selection for saved sources, Torznab/Newznab capability category discovery, priority ordering, background failure backoff, RSS-compatible named providers, API-backed private tracker adapters, and Sonarr-style schema field objects. Upstream Prowlarr application-adapter registration remains future research
Download clients Separate clients, test buttons, status, categories, tags, remote path mappings Partial: qBittorrent, Transmission, Deluge, rTorrent, Aria2, uTorrent, Hadouken, Vuze, Flood, RQBit, Tribler, Freebox Download, Synology Download Station torrent and usenet clients, SABnzbd, NZBGet, NZBVortex, Pneumatic, Torrent Blackhole, and Usenet Blackhole support, protocol-aware handoff, test/status reads, queue/history listing where supported, category/destination/tag controls, provider-specific settings, delete actions, remote path mappings, Servarr-style provider CRUD/bulk/action aliases, Sonarr-style schema field objects, and completed-download cleanup after import
Queue Downloads with progress, retry/failure behavior Initial done: queue records, download-client handoff, remote path translation, queue refresh, manual actions, manual import review/staging/apply/reject, failed-download replacement, import trust gates, and applied-import rollback exist
History Search, grab, import, failure history Initial done: search, grab/download, import, failure, blocklist, command and event records now roll up through native Activity plus Servarr-style history aliases
Wanted Missing and cutoff-unmet item views Done
Calendar Release/upcoming schedule view, detail route, filters, and iCal feed Initial done: release, queue, wanted, import, health, compatibility events, protected iCal feed, month grid, event filters, detail lookup, and Servarr-style feed aliases
Health/System Health checks, tasks, runtime status Initial done: health, tasks, deployment doctor, logs, backup create/list/delete, staged restore by id or uploaded database, update/about tabs, and Servarr-style /api/v3 system/task/command/diskspace aliases
Settings UX Dense vertical settings sections with nested pages Initial done: dark theme and downward settings subnav
Notifications/Connect Webhooks and app notifications Initial done: provider model, tags, sanitized secrets, delivery test action, event-triggered delivery for webhook/Discord/Slack/Gotify/Apprise/Telegram/Pushover/Ntfy/Pushbullet/Email/SendGrid/Notifiarr/Join/Mailgun/Prowl/Pushcut/Signal/Simplepush/Synology Indexer/Trakt/Twitter/Plex/Emby/Jellyfin/Kodi, per-trigger templates, Servarr-style notification CRUD/test routes, and Sonarr-style schema field objects
Import lists External watchlists/list sync and exclusions Initial done: Steam Library, Steam Owned Games, Steam Wishlist, GOG Library, GOG Owned Games, Epic Library, Epic Owned Games, Legendary/Heroic Cache, Itch.io Library, Lutris Library, Amazon Games Library, EA App Library, Ubisoft Connect Library, Battle.net Library, manual URL, custom JSON, RSS, tags/exclusions, provider-backed test/sync/import command, cleanup modes, search-on-add, UI, and Sonarr/Radarr-style import-list provider schemas with field objects for AniList/IMDb/MyAnimeList/Plex/Plex RSS/Simkl/Sonarr/TMDb/Trakt
Metadata Posters, screenshots, trailers, store metadata Initial done: provider model, tags, game metadata storage, Steam lookup/add, Steam/custom JSON/PCGamingWiki/SteamGridDB/IGDB refresh adapters, Sonarr-style sidecar metadata consumer schemas with field objects for Kometa/Plex/Roksbox/WDTV/Kodi, screenshot/trailer persistence, and UI
Compatibility watcher Known versions, patch compatibility, wanted update signals Initial done: official/store/RSS/custom JSON sources, manual signals, sync command, UI
API key/auth Forms login plus API keys for integrations Initial done: first-run browser setup, session login, optional fixed GADARR_API_KEY, generated integration/feed tokens, key rotation UI, protected calendar feed token, and familiar /api/v3 API-key-protected integration routes
Docker Linux container with persistent config volume Initial done: Dockerfile, compose, /games and /downloads path checks, static UI serving, base-path UI/API/feed/session support, deployment doctor, backup retention, and GHCR workflow exist
Game-server management Not part of Arr library automation Removed: no provider, launcher, or remote-control surface

Removed Scope

Gadarr intentionally does not manage game servers, launch recipes, ports, remote-control credentials, or public server directories. Those features were removed from the codebase and roadmap so the app stays focused on Arr-style library automation.

Next Parity Priorities

  1. Import-list depth: more game-native store/library/watchlist providers beyond Steam/GOG/Epic/Itch/Lutris/Amazon/EA/Ubisoft/Battle.net local libraries, Steam Owned Games, GOG Owned Games, Epic Owned Games, Legendary/Heroic Cache, Steam Wishlist, manual URL, custom JSON, RSS, TMDb List, TMDb Popular, TMDb User, and the current Servarr-compatible media-list schemas. The next concrete gap is account sync or local cache sync for additional launchers beyond the current Steam, GOG, Epic, Legendary/Heroic, Itch.io, Lutris, Amazon Games, EA App, Ubisoft Connect, and Battle.net coverage.
  2. Metadata provider depth: richer store metadata adapters and provider-specific fields.
  3. Download-client polish: edge-case status mapping and queue/history depth across the broad client matrix.
  4. Upstream Prowlarr application adapter research only after Gadarr's native Prowlarr pull and sync modes are stable.

2026-06-02 Prowlarr Indexer Sync Pass

Gadarr now has a native Prowlarr sync action for game indexers. POST /api/sources/prowlarr/sync and Settings -> Indexers -> Sync From Prowlarr read Prowlarr API v1 indexers, skip disabled or unsupported rows, require at least one configured game-category match when category filtering is enabled, and create or update saved Gadarr torznab/newznab sources that point at Prowlarr's per-indexer /{id}/api proxy endpoints. The sync preserves Prowlarr priority, RSS/search flags, tags, and implementation metadata while keeping the Prowlarr API key server-side and redacted from browser responses.

2026-06-02 Documentation Agent Publish Pass

The documentation agent now acts as a publish gate instead of a local prose-only checker. It verifies required docs, PNG screenshot bytes and dimensions, README screenshot embeds, game-native wording, Steam Owned Games, GOG Owned Games, Epic Owned Games, Legendary/Heroic Cache, Itch.io Library, Lutris Library, Amazon Games Library, EA App Library, Ubisoft Connect Library, and Battle.net Library claims, TMDb import-list claims, GOG/Epic/Itch launcher manifest claims, build-revision stamp claims, release-filter defaults, Sonarr route/query/body/resource parity scripts, and git diff --check.

After a push, pnpm exec node scripts/documentation-agent.mjs --check-github compares local HEAD with the configured GitHub remote branch. Live-deploy checks are reserved for release notes or docs that explicitly claim a runtime update and require a local status file to report a healthy matching revision.

The screenshot set was refreshed from a live-safe local documentation instance seeded with game data: 007 First Light release filters, Crimson Desert queue progress with a visible game name and progress bar, store/library/TMDb import lists, download clients with remote path mappings, and System health. Steam Owned Games, GOG Owned Games, Epic Owned Games, Legendary/Heroic Cache, Itch.io Library, Lutris Library, Amazon Games Library, EA App Library, Ubisoft Connect Library, and Battle.net Library are source-checked as the Servarr-compatible SteamOwnedGamesImport, GogOwnedGamesImport, EpicOwnedGamesImport, LegendaryHeroicCacheImport, ItchLibrary, LutrisLibrary, AmazonGamesLibrary, EaAppLibrary, UbisoftConnectLibrary, and BattleNetLibrary providers; the import-list screenshot documents the native Settings surface rather than every compatibility implementation row.

2026-06-02 Global Import-List Exclusion Pass

Gadarr now applies Servarr-style global import-list exclusions during import-list sync and preview. Exclusions created through /api/v3/importlistexclusion or Radarr-style /api/v3/exclusions are stored in a standalone global exclusion table instead of as hidden import-list rows, and legacy ID-backed entries from the old synthetic Import List Exclusions list migrate into that store. Provider-ID exclusions such as steamAppId:620, tvdbId:321, and tmdbId:456 are globally unique and source-backed, so deleting a game with addImportListExclusion=true prevents another list from immediately re-adding it without relying on title substring matching. List-sync cleanup still treats a globally excluded item as present when the provider list still contains it, matching the Arr distinction between rejected imports and missing-from-list cleanup.

2026-06-02 Queue Live-Tracking Regression Pass

Route-level queue tests now cover the user-visible live-download cases that Activity depends on. /api/queue broad-scans qBittorrent when the saved Gadarr category is empty or misses a matching game download, adopts a live Crimson Desert download into a durable Gadarr queue row with gameTitle, progress, trackedDownload, time-left, and remove-from-client support, reports live SABnzbd rows as protocol: "usenet" instead of treating every live row as torrent, and still supports deleting unmatched live-only rows when unknown downloads are explicitly included.

2026-06-02 Client-Aware Activity Message Pass

Gadarr now shares one download-client display-name helper across grabs, queue refresh, and completed-download import. Activity and import rows for SABnzbd/NZBGet-style Usenet downloads no longer reuse qBittorrent wording, queue failures report the saved client name, and generic queue messages say "download" or "download-client ID" instead of torrent/hash-only language where the same refresh path can represent Usenet jobs.

2026-06-01 Documentation Agent Automation Pass

The documentation agent is now executable as pnpm docs:agent, with direct flags available through pnpm exec node scripts/documentation-agent.mjs. It verifies required docs, PNG screenshot bytes, game-native language drift, current source claims for TMDb import lists and release-filter defaults, Sonarr route/query/body/resource parity scripts, and git diff --check before a docs publish.

The screenshot set was refreshed from a live local docs instance with demo game data: Games library, game-detail release filters, Activity queue with game/progress columns, store/watchlist plus TMDb import-list settings, download-client remote path mappings, and System status.

2026-06-01 Documentation Agent Pass

A dedicated documentation-agent audit refreshed the public README, architecture, deployment, Prowlarr integration, roadmap, parity, and research docs against the current code and UI. The README now includes screenshots for the games library, game release filters, Activity queue live download tracking, store/watchlist import lists, download-client remote path mappings, and System status. The docs now describe Gadarr as a game-native, protocol-aware app instead of a single-client scaffold, and call out Steam import-list behavior plus the then-open import-list parity gap.

Future documentation publishes should rerun Documentation agent rather than relying on this completed pass as proof that current UI, route, or deployment claims are still true.

2026-05-25 API Parity Pass

Official Sonarr/Radarr API docs expose common integration surfaces under /api/v3, including command, task, queue, history, wanted, provider schema/test-all, backup, log, diskspace, ping, and system status routes. Gadarr now keeps its native /api/... routes and adds a compatibility layer for those familiar Arr endpoints so scripts and user habits have recognizable paths without exposing stored provider secrets.

2026-05-25 Profile Parity Pass

Official Sonarr/Radarr OpenAPI specs include /api/v3/qualityprofile, /api/v3/customformat, /api/v3/delayprofile, and matching schema/reorder/bulk routes. Gadarr now has persistent delay profiles, native /api/delayprofiles CRUD, and compatibility aliases for quality profiles, custom formats, and delay profiles so profile setup follows the same family of settings surfaces users expect from Sonarr and Radarr.

2026-05-25 Manual Import Parity Pass

Official Sonarr/Radarr OpenAPI specs include /api/v3/filesystem, /api/v3/filesystem/type, /api/v3/filesystem/mediafiles, and /api/v3/manualimport for browsing server-side paths and importing selected completed downloads. Gadarr now exposes filesystem browsing inside configured roots, native manual import staging, Servarr-compatible manual import routes, and an Activity > Import form for staging or applying a completed game folder from /downloads into the library.

2026-05-25 History Parity Pass

Official Sonarr/Radarr OpenAPI specs expose /api/v3/history, /api/v3/history/since, /api/v3/history/failed/{id}, /api/v3/history/series, Radarr's /api/v3/history/movie, and blocklist routes for failed releases. Gadarr now maps its aggregated Activity records into Servarr-style history resources so external tools see search, grab/download, import, failure, blocklist, command, and health events instead of search history alone.

2026-05-25 Calendar Parity Pass

Official Sonarr/Radarr OpenAPI specs expose /api/v3/calendar, /api/v3/calendar/{id}, and app-specific /feed/v3/calendar/*.ics feeds with date ranges, tag filters, unmonitored toggles, and feed-window options. Gadarr now maps its game release, queue, wanted, import, health, and compatibility events into that shape, supports event/tag/status filters, includes movie/series aliases for integration familiarity, redirects Sonarr/Radarr/Gadarr feed aliases, supports all-day ICS entries, and adds UI filters plus a copyable calendar feed URL.

2026-05-25 Provider Tag And Blocklist Parity Pass

Sonarr/Radarr settings expose tags across download clients, notifications, metadata, import lists, indexers and profiles, with tag detail endpoints showing where each tag is used. Gadarr now persists provider tags for download clients, connect providers and metadata providers, exposes native and /api/v3/tag/detail usage details, surfaces import-list exclusions in the settings UI, adds blocklist remove/clear actions, and broadens patch/update search queries for update-only, patch-only and versioned releases.

2026-05-25 Add Game Lookup Parity Pass

Sonarr exposes /api/v3/series/lookup?term= and Radarr exposes /api/v3/movie/lookup?term=, then the add screen lets users pick an enriched result instead of typing a blank record. Gadarr now mirrors that shape with /api/games/lookup?term=, Steam Store backed title lookup, cover/background/description/developer/publisher/genre metadata, and a lookup-backed add route that stores metadata at creation time.

2026-05-25 Parse And Quality Definition Parity Pass

Sonarr and Radarr expose /api/v3/parse to show how a release title was understood and /api/v3/qualitydefinition to manage global quality size limits. Gadarr now exposes native and Servarr-compatible parse results backed by its game release classifier, plus persisted quality definitions for base games, patches, hotfixes, DLC, mods, repacks and related release types. Those size limits are applied during candidate matching before a release can be queued.

2026-05-25 Naming And Custom Filter Parity Pass

Sonarr and Radarr expose naming settings and saved custom filters so users can control import folder formats and quickly reapply common list filters. Gadarr now persists naming settings for game folders, release folders, and manual imports, applies those formats during completed-download and manual-import target resolution, exposes native and /api/v3 naming/config examples, and adds saved release filters that can be reused from the release search screen.

2026-05-25 Notification Trigger Parity Pass

Sonarr and Radarr notification resources expose provider CRUD, single-provider tests, schema routes, and familiar trigger flags such as onGrab, onDownload, onUpgrade, onImportComplete, onHealthIssue, onApplicationUpdate, and onManualInteractionRequired. Gadarr now maps those flags into its connect-provider triggers, preserves secret redaction, supports saved and unsaved /api/v3/notification/test calls, and lets users configure title/message templates from the Connect settings form.

2026-05-28 Backup Upload Restore Parity Pass

Sonarr exposes /api/v3/system/backup/restore/upload for restore staging from an uploaded backup. Gadarr now supports that Servarr-compatible route plus native /api/system/backup/restore/upload, accepts multipart file uploads and raw SQLite backup bodies, validates the uploaded database header, stores a retained uploaded backup record, and stages <database>.restore-pending so the existing restart-apply restore flow remains intact.

2026-05-28 Provider CRUD Parity Pass

Sonarr's OpenAPI exposes provider management routes for download clients, indexers, import lists, metadata, notifications, and remote path mappings, including {id}, bulk, test, and action/{name} paths. Gadarr now maps those Servarr-style routes onto its native provider repositories, accepts both native JSON and Sonarr-style fields payloads, preserves secret redaction, supports saved-provider test actions, and covers the new routes with a provider CRUD/action parity test.

2026-05-29 Settings And Catalog Parity Pass

Sonarr's OpenAPI also exposes global config resources, language/localization catalogs, release profiles, auto-tagging rules, import-list exclusions, tag detail lookup, wanted item detail lookup, and indexer flags. Gadarr now maps those routes onto its existing import policy, naming, UI, custom filter, release profile, import list, tag, wanted, and source models.

2026-05-29 Sonarr Route Alias Parity Pass

The last Sonarr-specific route gap was the series/episode/media-cover cluster. Gadarr now exposes Sonarr-style /api/v3/series, /api/v3/episode, /api/v3/episodefile, /api/v3/seasonpass, /api/v3/rename, /api/v3/release/push, and /api/v3/mediacover/{seriesId}/{filename} aliases. These routes intentionally map to Gadarr games, virtual single-release episodes, import items, release candidates, and metadata artwork rather than inventing TV-season data that Gadarr does not own.

2026-05-29 Method-Level OpenAPI Parity Pass

A method-level comparison against Sonarr's current OpenAPI spec found remaining verb gaps on command deletion, custom-format bulk deletion, root-folder deletion, tag read/update, delay-profile reorder via PUT, episode update, episode-file single/bulk update, and Sonarr's static/form-login web paths. Gadarr now covers the API methods in the Servarr compatibility layer and maps the web paths through its static UI plus /login and /logout browser-session aliases, bringing the current Sonarr OpenAPI route/method comparison to zero missing routes.

2026-05-29 RSS And Ping Parity Pass

A fresh comparison against Sonarr's develop OpenAPI found one missed verb: HEAD /ping. Gadarr now serves HEAD /ping through Fastify's generated HEAD route for GET /ping, avoiding a duplicate route registration while keeping the Sonarr-compatible verb available. RSS sync also moved closer to Sonarr behavior: each monitored game now saves matched RSS candidates and auto-grabs the best acceptable candidate when no active queue exists, while still skipping rejected, blocklisted, DRM-bypass, DLC-only-for-installed-game, no-download, and active-queue cases.

2026-05-29 Release Identity Parity Pass

Gadarr now treats mirrored indexer/feed releases as the same release before they inflate result groups: info hash is the strongest identity, followed by normalized title, size, and protocol across sources. That keeps the game detail view focused on the best row for a release, preserves the existing base-game-first ordering, and leaves DLC in its own selectable release-type surface.

The Sonarr-compatible /api/v3/release and /api/v3/queue surfaces also now emit Sonarr-shaped resources instead of raw Gadarr candidates or queue rows, including approval/rejection flags, download allowance, quality/revision, language, indexer, info-hash, seed/leech, mapped virtual episode, tracked download status/state, status messages, size-left, output path, and download-client fields. Grab calls resolve either Gadarr candidate IDs or release GUIDs.

The wanted aliases now follow Sonarr's EpisodeResourcePagingResource shape too: /api/v3/wanted/missing and /api/v3/wanted/cutoff return paged virtual episodes for wanted games, with Gadarr's wanted reason/version/profile fields retained as extra metadata.

Command and scheduled-task aliases now follow Sonarr resource shape as well: /api/v3/command wraps every command in CommandResource fields such as commandName, queued, started, ended, duration, trigger, and client-update flags, even for commands whose native implementation returns a result payload like RSS sync. /api/v3/system/task now returns TaskResource fields including taskName, interval, lastExecution, and nextExecution.

Indexer and download-client aliases now return Sonarr-style provider resources, including implementation, implementationName, configContract, fields, enable/enableRss flags, protocol, tags, priority, presets, and provider messages while preserving Gadarr's native IDs and safe redacted configuration fields.

Provider action aliases also follow Sonarr's loose action behavior: saved and unsaved test actions are handled where Gadarr has equivalent behavior, unknown provider actions return JSON null, and indexers expose a newznabCategories action that returns game-oriented select options plus any configured category IDs.

Configuration aliases now carry the Sonarr *ConfigResource field names for host, download-client, indexer, import-list, media-management, naming, and UI config routes, while retaining Gadarr's native policy and display fields as extra metadata.

Series, episode-file, root-folder, blocklist, tag, quality/profile, import-list, metadata, notification, remote-path-mapping, custom-filter, and language aliases now also carry the Sonarr resource field names. Gadarr keeps game-specific IDs and native fields, but the compatibility responses expose the same top-level property names that Sonarr clients expect.

2026-05-29 Import Trust Policy Pass

Import hardening now moves beyond recording checksums after the fact. Gadarr import policy can require a completed download's computed SHA-256 to appear in an allowlist, or require a .gadarr.sig manifest whose checksum matches the completed artifact and whose Ed25519 signature verifies against a configured trusted public key. Failed trust checks create failed import records and keep the item out of the library before dry-run staging or apply.

2026-05-29 Import Rollback Pass

When backupBeforeApply is enabled and an import replaces an existing target, Gadarr now records the final target path and backup path on the import item. Applied imports with a backup can be rolled back through the native import queue API and UI: the current imported artifact is moved aside, the previous target is restored, and the import record is marked rolledBack with a timestamp and retained path to the moved artifact.

2026-05-29 Manual Import Review Pass

Gadarr's native manual import flow now has an Arr-style review pass before staging or applying. /api/manualimport/review inspects a path or the immediate children of a folder, infers the matching game, computes target/final target paths, checks size and trust policy, warns about backup-required replacements, and returns approval/rejection reasons. The Activity > Import view can review /downloads, stage or apply approved candidates, and reject staged imports without touching already applied records.

2026-05-29 Notification Provider Depth Pass

The Connect surface now covers three more common Servarr notification targets beyond the existing webhook, Discord, Slack, Gotify, Apprise, and custom-script records. Telegram providers can use a bot token plus chat id, Pushover providers use an application token plus user key, and Ntfy providers publish directly to a topic name or URL with optional bearer auth. The native UI, core schema, event dispatcher, /api/v3/notification/schema, and Servarr implementation-name mapping all recognize these providers while preserving the existing title/message template rendering.

2026-05-29 Notification Provider Depth Pass 2

The Connect surface now covers another set of Sonarr-adjacent notification and library-refresh targets. Pushbullet providers send note pushes with access-token auth and optional device, email, channel, or client targets. Email providers send direct SMTP mail using smtp:// or smtps:// URLs, optional STARTTLS, sender and recipient query fields, and the saved token as the SMTP password. SendGrid providers send text emails through the v3 Mail Send API using a sender-to-recipient target string and API key. Notifiarr providers send passthrough payloads to the hosted passthrough endpoint or a configured URL. Plex providers trigger library-section refresh endpoints with optional X-Plex-Token query auth. Emby and Jellyfin providers can trigger whole-library refreshes during tests and path-specific /Library/Media/Updated refreshes after imported game events using API-key query/header auth. Kodi providers call JSON-RPC VideoLibrary.Scan with dialogs disabled. These providers are exposed in native Connect settings and Servarr-compatible notification schemas while preserving secret redaction.

2026-05-29 Notification Provider Depth Pass 3

Gadarr now covers six more Sonarr notification providers through the Connect delivery layer. Join sends device or all-device pushes through Join's sendPush API, Prowl posts application/event/description forms to the public API, Pushcut calls named notification endpoints with API-Key auth and time-sensitive support, Simplepush posts key/event/title/message forms, Mailgun sends text emails through the US or EU v3 messages API with basic auth, and Signal posts to signal-cli-rest-api /v2/send with sender/receiver mapping and optional basic auth. The native UI, core schema, Servarr-compatible notification schemas, field payload mapping, and delivery tests all recognize these providers.

2026-05-29 Notification Settings Alias Pass

Gadarr now exposes and accepts more Sonarr-native Connect setting names for high-use notification providers. Discord and Slack accept webHookUrl; Gotify accepts server and appToken; Apprise accepts serverUrl and configurationKey; Telegram accepts botToken, chatId, topicId, and silent/title toggles; Pushover accepts apiKey and userKey; Ntfy accepts serverUrl, accessToken, topics, userName, password, and click/tag options; and Pushbullet accepts apiKey, deviceIds, channelTags, and senderId.

Saved notification resources now also return Sonarr-style configContract values such as WebhookSettings rather than the bare implementation id, matching the schema resources clients use to build Connect forms.

2026-05-29 Notification Implementation Name Pass 2

Gadarr now returns Sonarr's exact notification implementation identifiers for Mailgun and Plex Media Server: MailGun and PlexServer. Legacy payloads still map to the same native connect kinds, but Servarr-compatible schemas and resources now align with Sonarr's class names and PlexServerSettings contract.

2026-05-29 Custom Script Notification Pass

Gadarr's Custom Script connect provider now executes a configured script path instead of only storing the provider. Event delivery runs the script without a shell, applies the provider title/message templates first, passes Gadarr-specific environment variables, and includes Sonarr-style compatibility variables such as sonarr_eventtype, virtual series title/path, release title, and health message fields.

2026-05-29 Custom Script Arguments Pass

Gadarr now persists non-secret Connect provider settings and uses them for Sonarr's Custom Script arguments setting. Servarr /api/v3/notification/schema advertises path plus arguments, saved Custom Script resources round-trip the arguments field, and event delivery passes the configured arguments to the script process while continuing to provide the Sonarr-style environment variables.

2026-05-29 Synology Indexer Notification Pass

Gadarr now maps Sonarr's Synology Indexer notification provider into Connect as synology-indexer. Tests run /usr/syno/bin/synoindex --help, imported game events refresh the indexed game path with -R, delete-like events use -D, and pathless events fall back to refreshing Synology's video index. The native UI, core schema, Servarr notification schema, MediaBrowser alias, and /api/v3/notification payload mapping recognize the provider without requiring a URL or token.

2026-05-29 Trakt And Twitter Notification Pass

Gadarr now recognizes Sonarr's Trakt and Twitter notification implementations. Trakt providers use a configured client id plus access token to test /users/settings and send collection add/remove sync payloads for imported or delete-like events. Twitter providers accept Sonarr-style OAuth fields, keep the credential bundle redacted as the provider token, and format OAuth 1.0a signed status-update or direct-message requests. Both providers are exposed in the native Connect selector, Servarr notification schema, field payload mapper, and delivery tests.

2026-05-29 Named RSS Indexer Provider Pass

Gadarr now recognizes Sonarr's RSS-compatible named indexers for Fanzub, IP Torrents, Nyaa, and TorrentLeech. These providers have native source kinds, Servarr /api/v3/indexer/schema entries, payload mappings for Sonarr field names, UI selector options, and source-manager URL builders for their RSS/search feed shapes. Fanzub is treated as Usenet, while IP Torrents, Nyaa, and TorrentLeech remain torrent sources with seed filtering and RSS sync support.

2026-05-29 Torrent RSS Indexer Schema Pass

Gadarr now exposes Sonarr's exact TorrentRssIndexer implementation in /api/v3/indexer/schema while keeping legacy RSS payload aliases accepted on create/update. Saved RSS indexers already returned TorrentRssIndexer; the schema now matches that resource shape and Sonarr's provider class name.

2026-05-29 Torrent RSS Settings Pass

Gadarr now stores and redacts Sonarr's Torrent RSS indexer settings beyond the feed URL: cookie, allow-zero-size, seed criteria, reject-blocklisted torrent hashes, multi-language release, and fail-download options. The /api/v3/indexer/schema and saved indexer resources expose those fields, and RSS fetches send the configured cookie header.

2026-05-29 Newznab/Torznab Settings Pass

Gadarr now exposes and round-trips Sonarr's richer Newznab/Torznab settings: API path, anime categories, anime standard-format search, additional parameters, multi-language release, fail-download lists, and Torznab seed/reject options. Torznab/Newznab payloads can build the configured API path into the source URL, and searches include configured additional query parameters.

2026-05-29 Named API Indexer Provider Pass

Gadarr now recognizes Sonarr's API-backed private tracker indexers for BroadcastheNet, FileList, and HDBits. These providers have native source kinds, Servarr /api/v3/indexer/schema entries, username/passkey/API-key payload mapping, UI selector support, and source-manager JSON request parsers for BroadcastheNet JSON-RPC, FileList's JSON API, and HDBits' torrent API. Secrets remain redacted in native and Servarr-compatible source responses.

2026-05-29 Indexer Minimum Seeders Alias Pass

Gadarr now advertises and accepts Sonarr's minimumSeeders indexer field alongside the native minSeeders shorthand for Torznab, Torrent RSS, IP Torrents, Nyaa, TorrentLeech, BroadcastheNet, FileList, and HDBits. Servarr field payloads using minimumSeeders now populate Gadarr's seed threshold and resource fields echo both aliases.

2026-05-29 Notification Implementation Name Pass

Gadarr's Servarr notification resources now emit Sonarr's exact implementation ids for Pushbullet and Kodi compatibility: PushBullet and Xbmc. The native provider kinds remain pushbullet and kodi, while /api/v3/notification/schema and saved notification resources use Sonarr's implementation names with the familiar display labels.

2026-05-29 Sidecar Metadata Consumer Pass

Gadarr now exposes Sonarr's sidecar metadata consumer implementations in /api/v3/metadata/schema: KometaMetadata, PlexMetadata, RoksboxMetadata, WdtvMetadata, and XbmcMetadata. These compatibility providers can be created through the Servarr metadata routes and keep their Sonarr implementation/display names, while Gadarr's game metadata lookup refresh continues to use only store/lookup providers.

2026-05-29 Metadata Sidecar Export Pass

Sonarr metadata consumers do more than save provider rows: Plex writes .plexmatch, Kodi/XBMC writes tvshow.nfo and artwork sidecars, and WDTV/Roksbox emit XML/image sidecars. Gadarr now persists Sonarr-style metadata consumer settings, exports game metadata sidecars through native /api/games/{id}/metadata/export and Servarr /api/v3/metadata/action/export actions, writes .plexmatch, tvshow.nfo, URL artwork sidecars, and WDTV/Roksbox XML analogs into the game's install/root-folder path, and triggers sidecar export after successful lookup metadata refreshes when consumer providers are enabled.

2026-05-29 Import List Provider Schema Pass

Gadarr now exposes Sonarr's current import-list provider implementations through /api/v3/importlist/schema: AniListImport, CustomImport, RssImportBase, ImdbListImport, MyAnimeListImport, PlexImport, PlexRssImport, SimklUserImport, SonarrImport, TraktListImport, TraktPopularImport, and TraktUserImport. Gadarr also exposes game-native store import-list compatibility providers, including SteamLibrary, SteamOwnedGamesImport, SteamWishlistImport, GogLibrary, GogOwnedGamesImport, EpicLibrary, EpicOwnedGamesImport, LegendaryHeroicCacheImport, ItchLibrary, LutrisLibrary, AmazonGamesLibrary, EaAppLibrary, UbisoftConnectLibrary, and BattleNetLibrary. These compatibility providers can be created and tested through the Servarr import-list routes, with common field names mapped onto Gadarr's source URL, root-folder, tag, and exclusion fields. Native Gadarr import-list kinds stay game-oriented and include Steam Library, Steam Wishlist, GOG Library, Epic Library, Itch.io Library, Lutris Library, Amazon Games Library, EA App Library, Ubisoft Connect Library, and Battle.net Library.

2026-06-01 TMDb Import List Pass

Gadarr now covers the Radarr-family TMDb import-list gap with separate TMDbListImport, TMDbPopularImport, and TMDbUserImport compatibility providers plus native tmdb-list, tmdb-popular, and tmdb-user kinds. TMDb List reads /4/list/{listId}, TMDb Popular reads discover/movie with list-type, rating/vote, certification, genre, company, language, and page controls, and TMDb User reads account movie watchlist/recommendations/rated/favorites resources with access-token auth. Imported items preserve externalIds.tmdbId, skip non-movie list records where TMDb marks media type, respect tags/exclusions/search-on-add, and redact TMDb API keys or access tokens in native and Servarr-compatible responses.

2026-06-02 Steam Owned Games Import Pass

Gadarr now supports SteamOwnedGamesImport through the Servarr-compatible import-list surface. It reads Steam's owned-games JSON with a SteamID64 and Steam Web API key, optionally includes free games returned by Steam, preserves steamAppId/steamId external IDs, maps the provider into the existing Steam import-list kind, redacts the API key from read responses, and uses the same tags, exclusions, cleanup modes, and search-on-add flow as the other import-list providers.

2026-06-02 GOG Owned Games Import Pass

Gadarr now supports GogOwnedGamesImport through the Servarr-compatible import-list surface. It reads GOG account filtered-product pages using a configured session cookie or access token, preserves gogId external IDs, maps PC/GOG platform hints plus build/version values, skips non-game movie records, maps the provider into the existing GOG import-list kind, redacts cookies and access tokens from native and Servarr-compatible read responses, and uses the same tags, exclusions, cleanup modes, and search-on-add flow as the other import-list providers. Cleanup remains fail-closed when a paged GOG account read is partial or returns an HTTP error.

2026-06-02 Epic Owned Games Import Pass

Gadarr now supports EpicOwnedGamesImport through the Servarr-compatible import-list surface. It reads Epic's launcher-backed library items with a configured access token, follows responseMetadata.nextCursor paging, enriches records with Epic catalog bulk-item metadata for stable titles, preserves Epic catalog IDs, app names, namespaces, PC/Epic platform hints, and build/version values, and maps the provider into the existing Epic import-list kind. DLC/add-ons are skipped by default, and mods, private sandboxes, records without an app name, and Unreal Marketplace records stay out of the game library. Tokens stay server-side and are redacted from native and Servarr-compatible read responses. Cleanup remains fail-closed when library paging, catalog enrichment, or response parsing fails.

2026-06-02 Legendary/Heroic Cache Import Pass

Gadarr now supports LegendaryHeroicCacheImport through the Servarr-compatible import-list surface. It maps into the existing Epic import-list kind and reads local Legendary metadata directories, Heroic store_cache/legendary_library.json, or direct cache-file paths without storing Epic access tokens. Cache imports preserve Epic app names, namespaces, catalog IDs when present, install paths, platform hints, and version/build values, while skipping DLC/add-ons by default plus mods, mobile-only records, and Unreal Marketplace records. The provider uses the same tags, exclusions, cleanup modes, root folder/profile fields, and search-on-add behavior as the other import-list providers. Cleanup remains fail-closed when cache JSON is malformed, no supported cache shape is found, or every record is filtered out.

2026-06-02 Itch.io Library Import Pass

Gadarr now supports ItchLibrary through the native and Servarr-compatible import-list surfaces. It scans local Itch install-location folders for official .itch/receipt.json.gz receipts, maps them into an itch import-list kind and itch-manifest scan source, preserves Itch.io game, upload, and build IDs, carries install paths and user/build versions when present, and tags imported games with pc plus itch platforms. Cleanup remains fail-closed when the configured library path has no readable Itch receipts instead of falling back to plain folder names.

2026-06-02 Lutris Library Import Pass

Gadarr now supports LutrisLibrary through the native and Servarr-compatible import-list surfaces. It reads a local Lutris pga.db SQLite library database from either a direct database path or a Lutris data-folder path, maps rows into a lutris import-list kind, imports installed games by default, preserves Lutris IDs/slugs plus Steam/GOG/Epic/Itch service IDs when present, carries install paths and platform hints, and skips child/add-on rows by default through Lutris parent_slug. The provider uses the same tags, exclusions, cleanup modes, root-folder/profile fields, and search-on-add behavior as other game-native import lists. Cleanup remains fail-closed when the configured path has no readable pga.db or no importable installed game rows.

2026-06-02 Amazon Games Library Import Pass

Gadarr now supports AmazonGamesLibrary through the native and Servarr-compatible import-list surfaces. It reads the local Amazon Games GameInstallInfo.sqlite cache from either a direct database path or an Amazon Games data-folder path, maps DbSet rows into an amazon import-list kind, imports installed games by default, preserves Amazon product IDs, carries install paths and version hints, and skips rows with explicit parent/add-on markers by default. The provider uses the same tags, exclusions, cleanup modes, root-folder/profile fields, and search-on-add behavior as other game-native import lists. Cleanup remains fail-closed when the configured path has no readable cache database or no importable installed game rows.

2026-06-02 EA App Library Import Pass

Gadarr now supports EaAppLibrary through the native and Servarr-compatible import-list surfaces. It reads local EA Desktop __Installer/installerdata.xml files or older Origin/EA Play .mfst LocalContent manifests from either a direct file, game folder, or broader library path, maps records into an ea import-list kind, imports installed games by default, preserves EA content IDs, carries install paths and version hints, and skips rows with explicit parent/add-on markers by default. The provider uses the same tags, exclusions, cleanup modes, root-folder/profile fields, and search-on-add behavior as other game-native import lists. Cleanup remains fail-closed when the configured path has no readable local manifests or no importable installed game rows.

2026-06-02 Ubisoft Connect Library Import Pass

Gadarr now supports UbisoftConnectLibrary through the native and Servarr-compatible import-list surfaces. It reads local Ubisoft registry exports, Ubisoft Connect cache/export records, or game folders containing uplay_install.manifest or uplay_install.state, maps records into a ubisoft import-list kind, imports installed games by default, preserves Ubisoft/Uplay IDs plus install IDs and game-code hints, carries install paths and version hints, and skips ULC/add-on rows by default. The provider follows Vortex/Playnite-style local detection sources instead of storing Ubisoft account credentials, uses the same tags, exclusions, cleanup modes, root-folder/profile fields, and search-on-add behavior as other game-native import lists, and stays fail-closed when the configured path has no readable local records or no importable installed game rows.

2026-06-02 Battle.net Library Import Pass

Gadarr now supports BattleNetLibrary through the native and Servarr-compatible import-list surfaces. It reads local Battle.net uninstall-registry exports, product.db/product JSON exports, protobuf product.db files, or game folders containing Battle.net build markers, maps records into a battlenet import-list kind, imports installed games by default, preserves Battle.net internal IDs, product IDs, and account API title IDs when known, carries install paths and version hints, skips Test/Beta rows, and skips explicit add-on rows by default. The provider follows Playnite-style local detection sources instead of storing Battle.net account credentials, uses the same tags, exclusions, cleanup modes, root-folder/profile fields, and search-on-add behavior as other game-native import lists, and stays fail-closed when the configured path has no readable local records or no importable installed game rows.

2026-05-29 Import List Test/Sync Pass

Import-list test and sync actions now read provider content instead of only updating timestamps. Gadarr can parse JSON, RSS/Atom XML, CSV and plain-text lists, expand Sonarr import-list URLs to /api/v3/series, export bare IMDb list IDs to IMDb CSV, scan Steam/GOG/Epic/Itch library paths through launcher-aware manifest parsing, fetch Steam Owned Games JSON through SteamID64/API-key settings, fetch GOG Owned Games account products through cookie/access-token settings, fetch Epic Owned Games account-library records through access-token settings plus catalog metadata, fetch Legendary/Heroic Epic cache records through local JSON paths, read Lutris pga.db rows through local paths, read Amazon Games GameInstallInfo.sqlite rows through local paths, read EA App/Origin local manifest rows through local paths, read Ubisoft Connect registry/cache rows through local paths, read Battle.net registry/product cache rows through local paths, preserve Steam App IDs, GOG game IDs, Epic catalog/app IDs, Itch.io game/upload/build IDs, Lutris IDs/slugs, Amazon product IDs, EA content IDs, Ubisoft/Uplay IDs, Battle.net product/internal/API IDs, install paths and platform hints, sync Steam Wishlist titles and Steam App IDs, merge import-list tags onto existing games, skip configured exclusions, and add missing games with source: "import-list". Native /api/importlist/*, Servarr /api/v3/importlist/test, /api/v3/importlist/testall, /api/v3/importlist/action/sync, and the Import List Sync command all use the same manager.

2026-06-02 GOG And Epic Library Identity Pass

Gadarr's local store-library import lists now preserve provider identity beyond Steam. GOG library scans read goggame-*.info files to keep GOG game IDs, install paths, PC/GOG platform hints, and build/version values. Epic library scans read Launcher .item manifests from local manifest folders to keep Epic catalog IDs, app names, namespaces, install locations, PC/Epic platform hints, and build versions. Folder fallback still works, but launcher metadata folders are no longer treated as games.

2026-05-29 Trakt User Import Filter Pass

Gadarr now applies Sonarr's Trakt user watched-list filter when importing from TraktUserImport. The traktWatchedListType setting distinguishes all watched shows, in-progress shows, and completely watched shows using Trakt's watched-season payload, matching Sonarr's non-special season episode-count behavior before items are merged into the library.

2026-05-29 Import List Provider ID Pass

Import-list sync now preserves provider IDs from Sonarr-style list payloads into Gadarr game metadata for both newly added and existing games. Gadarr also matches Sonarr's Plex RSS parser behavior by importing only category=show items with IMDb/TVDB/TMDB GUIDs, and Plex watchlist JSON GUIDs are mapped into metadata external IDs instead of being treated as title-only items.

2026-05-29 AniList Import List Auth Pass

AniList import-list sync now sends the stored OAuth access token as a bearer token on GraphQL requests when configured, matching Sonarr's authenticated AniList request generator while still allowing public username-backed list reads.

2026-05-29 Import List Exclusion ID Pass

Import-list exclusions can now target provider identifiers such as tvdbId:123, and Servarr /api/v3/importlistexclusion payloads with tvdbId are preserved in exclusion resources. During sync, Gadarr checks these ID-backed exclusions against imported provider IDs before adding or tagging games, instead of relying only on title substring matches.

2026-05-29 Import List Cleanup Config Pass

Gadarr now persists Sonarr's /api/v3/config/importlist cleanup settings (listSyncLevel and listSyncTag) and applies them after successful import-list syncs. keepAndUnmonitor unmonitors games no longer present in enabled import lists, keepAndTag tags missing games with the configured Gadarr tag, and logOnly records a health event without changing library state.

2026-06-02 Radarr Import List Removal Cleanup Pass

Gadarr now accepts Radarr's destructive cleanup levels through /api/v3/config/importlist. removeAndKeep removes games that are no longer present in enabled import lists while leaving downloaded files alone. removeAndDelete removes the game and deletes managed files only when the game has an explicit install path inside a configured Gadarr root folder; paths outside configured roots are treated as unmanaged and are not deleted.

2026-05-29 Provider Schema Field Pass

Provider schema endpoints now emit Sonarr-style field objects rather than bare field-name strings for download clients, indexers, import lists, notifications, and metadata providers. /api/v3/*/schema responses include configContract, infoLink, presets, typed field labels, default values, and password privacy markers, so Servarr-compatible clients can render create/test forms from the schema response itself.

2026-05-29 PCGamingWiki Metadata Pass

PCGamingWiki is now a first-class metadata refresh adapter instead of a generic custom URL placeholder. Gadarr queries the PCGamingWiki MediaWiki Cargo API against Infobox_game, prefers a stored Steam App ID when available, falls back to title matching, and maps page IDs, Steam/GOG IDs, cover art, release date, developers, publishers, and genres into the game metadata record while preserving existing external IDs.

2026-05-29 SteamGridDB Artwork Pass

SteamGridDB is now a first-class artwork metadata adapter. Gadarr uses a saved SteamGridDB ID when present, resolves by Steam App ID through /games/steam/{id} when available, falls back to /search/autocomplete/{term}, and fetches the highest-scored static poster grid and hero artwork from /grids/game/{id} and /heroes/game/{id}. SteamGridDB API keys stay server-side and are sent as bearer tokens only during provider tests and refreshes.

2026-05-29 IGDB Metadata Pass

IGDB is now a first-class metadata refresh adapter. Gadarr posts Apicalypse queries to /v4/games with the provider client ID and access token, fetches cover and screenshot image IDs, release date, summary/storyline, genres, involved developer/publisher companies, slug, URL, and IGDB IDs, then maps those fields into the existing game metadata record. The native and Servarr metadata provider payloads accept clientId plus apiKey/accessToken while keeping secrets out of read responses.

2026-05-29 Metadata Media Depth Pass

Gadarr metadata records now retain screenshot and trailer URL arrays instead of collapsing provider media down to one background image. Custom JSON providers can return screenshotUrls/screenshots and trailerUrls/trailers/videos; Steam appdetails maps screenshot and movie media; and IGDB maps every screenshot image ID plus video IDs into proxied screenshots and trailer links. The game detail UI shows a compact screenshot/trailer strip, and Servarr-style media-cover image arrays include screenshot entries alongside poster/fanart.

2026-05-29 Torrent Blackhole Download Client Pass

Gadarr now supports a Sonarr/Radarr-style Torrent Blackhole download client alongside qBittorrent. The native and Servarr-compatible download-client payloads accept torrent-blackhole/TorrentBlackhole, watch-folder and completed-folder fields, and expose the provider in schema responses and settings. Grabs write .magnet, .torrent, or fallback .url files to the configured watch folder and keep the queue item in a non-terminal queued state so qBittorrent refreshes do not incorrectly fail blackhole handoffs.

2026-05-29 qBittorrent API Key Pass

Gadarr now supports Sonarr's qBittorrent API-key authentication mode. /api/v3/downloadclient/schema exposes ApiKey alongside username/password fields, Servarr payloads that provide apiKey store the secret as an API-key auth mode, read responses redact the API key, and the runtime sends Authorization: Bearer requests without performing password-login cookie auth.

2026-05-29 qBittorrent Settings Pass

Gadarr now accepts and returns Sonarr's qBittorrent host/port/SSL/urlBase shape in addition to Gadarr's legacy hostUrl, maps tvCategory into the stored category, persists post-import category and advanced add settings, and applies initial-state, sequential-download, first/last-piece, and content-layout options when adding torrents through the qBittorrent Web API.

2026-05-29 qBittorrent Post-Import Category Pass

Gadarr now mirrors Sonarr's qBittorrent post-import category behavior during completed-download import. When tvImportedCategory is configured, successful imports call qBittorrent's torrents/setCategory endpoint for the imported hash before optional completed-download cleanup runs.

2026-05-29 Download Client Settings Alias Pass

Gadarr now accepts and returns Sonarr-native download-client settings fields beyond qBittorrent. Transmission, Deluge, rTorrent, uTorrent, Aria2, Hadouken, Vuze, Flood, RQBit, Tribler, Freebox Download, Download Station, SABnzbd, NZBGet, NZBVortex, Pneumatic, Torrent Blackhole, and Usenet Blackhole schemas advertise their Sonarr-style host/port/SSL/path/category/directory fields where applicable, and Servarr payloads using names such as tvDirectory, downloadDirectory, completedDirectory, directory, destinationDirectory, addStopped, intialState, rpcPath, apiUrl, torrentFolder, saveMagnetFiles, magnetFileExtension, and readOnly round-trip into Gadarr's native client model.

2026-05-29 Transmission Download Client Pass

Gadarr now supports Transmission RPC as a real download client alongside qBittorrent and Torrent Blackhole. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept transmission/Transmission, test the RPC session endpoint, add magnet or torrent URL candidates with category labels and optional paused state, list matching torrents for queue refresh/status, and remove completed torrents during cleanup when configured.

2026-05-29 Deluge Download Client Pass

Gadarr now supports Deluge Web JSON-RPC as a first-class torrent download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept deluge/Deluge, authenticate through auth.login, connect to the daemon with web.connected/web.get_hosts/web.connect, test daemon.get_version, add magnets and fetched torrent files through Deluge core methods, apply labels for Gadarr categories, map web.update_ui torrents into queue-compatible status, and remove torrents through core.remove_torrent.

2026-05-29 rTorrent Download Client Pass

Gadarr now supports rTorrent/ruTorrent-style XML-RPC as a first-class torrent download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept rtorrent/RTorrent, test system.client_version, add magnets with load.start or stopped load.normal, add fetched torrent files with load.raw_start or stopped load.raw, set Gadarr categories and destination paths through rTorrent load commands, map d.multicall2 torrent rows into queue-compatible status, and remove torrents through d.erase.

2026-05-29 Aria2 Download Client Pass

Gadarr now supports Aria2 JSON-RPC as a first-class torrent download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept aria2/Aria2, map Sonarr-style secretToken into Gadarr's stored secret field, test aria2.getVersion, add magnets with aria2.addUri, upload fetched torrent files with aria2.addTorrent, map tellActive, tellWaiting, and tellStopped downloads into queue-compatible status, and remove active/completed records through Aria2's remove APIs. Aria2 has no RPC category/label feature, so Gadarr scopes listed downloads by the configured destination path when present.

2026-05-29 uTorrent Download Client Pass

Gadarr now supports uTorrent WebUI as a Sonarr-style torrent download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept utorrent/UTorrent, authenticate with the WebUI token flow, test getsettings, add magnets with add-url, upload fetched torrent files with add-file, parse torrent info hashes for exact queue matching, set Gadarr categories through the label property, map list=1 torrent arrays into queue-compatible status, and remove torrents with or without data through the WebUI remove actions.

2026-05-29 Hadouken Download Client Pass

Gadarr now supports Hadouken as another Sonarr-style torrent download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept hadouken/Hadouken, authenticate with Hadouken JSON-RPC basic auth, test core.getSystemInfo, send magnets or base64 torrent files through webui.addTorrent with Gadarr category labels, map webui.list rows into queue-compatible status, and remove torrents through webui.perform remove/removedata actions.

2026-05-29 Vuze Download Client Pass

Gadarr now supports Vuze as Sonarr models it: a Transmission RPC-compatible torrent client without label support. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept vuze/Vuze, validate RPC protocol version 14 or newer, send magnets/torrent URLs through Transmission RPC without category labels, list all Vuze downloads without category filtering, and remove torrents through Transmission's remove action.

2026-05-29 Flood Download Client Pass

Gadarr now supports Flood as a Sonarr-style torrent download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept flood/Flood, authenticate through Flood's cookie-based API login, send magnets and base64 torrent files through the add-url/add-file endpoints with Gadarr tags and destination mapping, map Flood torrent status and completed content paths into queue-compatible records, and remove torrents with optional data deletion.

2026-05-29 RQBit Download Client Pass

Gadarr now supports RQBit as a Sonarr-style torrent download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept rqbit/RQBit, verify the RQBit HTTP API version, send magnets or fetched torrent files through /torrents?overwrite=true, map RQBit torrent progress and state into queue-compatible rows, and remove torrents through the forget/delete endpoints.

2026-05-29 Tribler Download Client Pass

Gadarr now persists provider-specific download-client settings and supports Tribler as a Sonarr-style torrent client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept tribler/TriblerDownloadClient, map Sonarr's API key into the stored secret, preserve anonymity-level and safe-seeding settings, send magnet links through Tribler's /api/downloads endpoint, map Tribler download/file rows into queue-compatible status records, and remove downloads with optional data deletion. Torrent-file handoff is rejected to match Sonarr's current Tribler behavior.

2026-05-29 Freebox Download Client Pass

Gadarr now supports Freebox Download as a Sonarr-style torrent download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept freebox-download/TorrentFreeboxDownload, authenticate with the Freebox challenge/session-token flow using App ID and App Token fields, send magnets and torrent files to /downloads/add with base64 destination-directory mapping, map BT task status/progress/output paths into queue-compatible records, and delete tasks with optional data removal.

2026-05-29 NZBVortex Usenet Client Pass

Gadarr now supports NZBVortex as another Sonarr-style Usenet download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept nzbvortex/NzbVortex, authenticate with NZBVortex's nonce/session API-key flow, require API level 2.3 or newer, upload fetched NZB files through nzb/add with group and priority mapping, map queue and completed NZB rows into queue-compatible status/output paths, and remove active or completed jobs through NZBVortex cancel actions.

2026-05-29 Pneumatic Download Client Pass

Gadarr now supports Sonarr's Pneumatic usenet handoff as a named download client. Native settings and Servarr-compatible /api/v3/downloadclient payloads accept pneumatic/Pneumatic, map Sonarr's nzbFolder to the NZB drop folder, map strmFolder to the generated STRM folder, fetch release NZBs into the drop folder, and write plugin.program.pneumatic STRM files that queue refresh can resolve as completed local handoff items.

2026-05-29 Synology Download Station Pass

Gadarr now supports Synology Download Station as a Sonarr-style torrent download client for self-hosted deployments. The client discovers DSM Download Station APIs through SYNO.API.Info, prefers SYNO.DownloadStation2.Task when present, logs in with a DownloadStation session, sends magnet and torrent-file releases with destination/category mapping, lists BT task detail and transfer records for queue refresh/status, and removes tasks through the Download Station task API. Native payloads accept download-station; Servarr-compatible payloads accept Sonarr's TorrentDownloadStation implementation plus the legacy DownloadStation alias; and the settings UI exposes Download Station as a first-class client.

2026-05-29 Synology Usenet Download Station Pass

Gadarr now also models Sonarr's separate UsenetDownloadStation provider instead of treating Synology Download Station as torrent-only. Native payloads accept usenet-download-station, Servarr-compatible schemas expose UsenetDownloadStation with DownloadStationSettings, protocol-aware selection can route NZB releases to Synology, the shared DSM adapter uploads NZB files through the task file API, and queue refresh filters NZB tasks separately from the torrent client's BT tasks.

2026-05-29 SABnzbd Usenet Client Pass

Gadarr now supports SABnzbd as a first-class Usenet download client, closing the handoff gap for Newznab/Prowlarr releases whose protocol is usenet. Download-client selection is now protocol-aware, so torrent releases prefer torrent-capable clients and Usenet releases prefer SABnzbd. The SABnzbd adapter supports API-key or username/password auth, version testing, addurl NZB handoff with category/priority, queue plus history status mapping, completed-output paths, and queue/history delete actions. Native and Servarr-compatible payloads accept sabnzbd/Sabnzbd, with apiKey mapped into Gadarr's stored secret field.

2026-05-29 Usenet Blackhole Download Client Pass

Gadarr now supports Sonarr's Usenet Blackhole handoff shape alongside Torrent Blackhole. Native payloads and Servarr-compatible /api/v3/downloadclient payloads accept usenet-blackhole/UsenetBlackhole, map Sonarr's nzbFolder to the watched NZB drop folder, map watchFolder to Gadarr's completed-download destination, and keep protocol-aware selection from sending Usenet releases to torrent-only clients. Grabs fetch the NZB URL and write a cleaned .nzb file into the configured folder while leaving the queue item in a queued state for external blackhole processing.

2026-05-29 NZBGet Usenet Client Pass

Gadarr now supports NZBGet as another first-class Usenet download client. The adapter talks to NZBGet's JSON-RPC /jsonrpc endpoint with optional basic auth, tests version, sends NZB URLs through append with a Gadarr tracking parameter, maps status, listgroups, and history into queue-compatible download records, uses category filtering, exposes completed-output paths, and removes queue/history records through editqueue. Native and Servarr-compatible payloads accept nzbget/Nzbget, and protocol-aware handoff can now choose NZBGet for Newznab/Prowlarr Usenet releases.

2026-05-29 Import List Runtime Metadata Pass

Gadarr now reports Sonarr's provider-derived import-list runtime metadata on /api/v3/importlist resources. listType, listOrder, and minRefreshInterval are mapped from the active implementation (SonarrImport, Plex, Trakt, Simkl, AniList, IMDb, MyAnimeList, and Custom), and field-level provider settings still take precedence over same-named top-level resource fields so Simkl's numeric listType setting can round-trip without being overwritten by Sonarr's resource enum.

2026-06-02 Native Import List Troubleshooting Pass

Native /api/importlist/:id/test and /api/importlist/:id/sync responses now include redacted testResult and syncResult summaries alongside the saved import-list resource. The summaries expose item counts, added/existing/skipped counts, cleanup counts, search-on-add counts, and provider messages without nesting the saved provider record or leaking secrets. The Settings import-list status column now shows the latest individual test/sync result so store-library, watchlist, Arr-program, RSS, TMDb, and custom JSON lists are easier to troubleshoot from the game-native UI.

2026-06-02 Radarr Import List Defaults Pass

Gadarr now mirrors Radarr's safer program-import default for RadarrImport: omitted enableAuto/enableAutomaticAdd values resolve to disabled automatic add, while explicit enableAuto: true still imports matching games. Import-list updates also treat empty tags and exclusions arrays as intentional clears instead of preserving the prior values, so Servarr-compatible clients can remove per-list filters without recreating the provider.

2026-05-29 Notification Provider Fields Pass

Notification resources now render and persist provider-specific Sonarr field objects beyond Gadarr's generic URL/token model. Webhook method/auth/header fields, Email SMTP fields, SendGrid sender/recipient fields, Notifiarr API key, Synology library-update, and Plex/Emby/Jellyfin/Kodi connection/update fields are exposed through /api/v3/notification/schema, round-trip from fields payloads, and redact secret values in saved resources.

2026-05-29 Webhook Delivery Settings Pass

Webhook notification delivery now honors Sonarr's saved Webhook settings at dispatch time. Gadarr maps method 1/2 to POST/PUT, applies username/password basic auth when Webhook credentials are configured, preserves Gadarr's existing bearer-token behavior for native Webhook tokens, and sends Sonarr-style custom header key/value lists with the notification payload.

2026-05-29 Notifiarr Delivery Settings Pass

Notifiarr notification delivery now accepts Sonarr's API-key-only configuration. Gadarr posts those providers to Notifiarr's Sonarr integration endpoint with the X-API-Key header and a Sonarr-style webhook payload, while preserving the older explicit channel/endpoint passthrough behavior for native Gadarr configurations.

2026-05-29 Ntfy Delivery Settings Pass

Ntfy notification delivery now follows Sonarr's settings more closely. Gadarr stores the Ntfy-specific emoji tags field separately from provider tags, publishes once per configured topic, carries priority/tags/click URL as request parameters, and supports Sonarr's bearer-token or username/password authentication shape.

2026-05-29 SendGrid Delivery Settings Pass

SendGrid notification delivery now honors Sonarr-style field-backed settings at dispatch time. Gadarr uses the saved baseUrl, from, and recipients values when no derived target string exists, posts to the configured mail/send endpoint, and nests the message subject inside SendGrid personalizations like Sonarr.

2026-05-29 Email Delivery Settings Pass

Email notification delivery now consumes Sonarr's saved SMTP settings directly when they are present. Gadarr preserves separate To, Cc, and Bcc recipients for SMTP envelope/message generation, honors Sonarr's encryption modes for SSL-on-connect versus STARTTLS, and still accepts the legacy SMTP URL format.

2026-05-29 Media Server Update Settings Pass

Media-server notification delivery now honors Sonarr's library-update controls more closely. Plex, Emby, Jellyfin, and Kodi skip real event library refreshes when updateLibrary is disabled, Emby/Jellyfin path updates apply Sonarr-style mapFrom/mapTo path mapping, and Servarr resources report Sonarr's default enabled library updates for Plex/Emby/Jellyfin providers while leaving Kodi opt-in.

2026-05-29 Import List Provider Parser Pass

Import-list provider behavior now follows more of Sonarr's implementation-level parsing. Simkl sync filters anime entries with Sonarr's supported content-type and TVDB-id requirements, while Trakt Popular's recommended-all-time request path mirrors Sonarr's current provider route.

2026-05-29 Import List Schema Metadata Pass

Import-list provider schemas now include Sonarr-style select metadata for MyAnimeList, Simkl, and Trakt enum fields, remote Sonarr provider-action selects for profiles/tags/root folders/language profiles, OAuth sign-in field types, hidden token metadata, and advanced Trakt additional-parameter fields.

2026-05-29 MediaBrowser Notification Pass

Emby and Jellyfin Connect providers now follow Sonarr's MediaBrowser notification split: provider tests and notify-enabled events post GUI notifications to /Notifications/Admin, while library updates remain controlled separately by updateLibrary and still use path-specific media update calls when a game path is known.

2026-05-29 Kodi Notification Pass

Kodi Connect delivery now follows Sonarr's XBMC split more closely: provider tests send GUI.ShowNotification, event notifications are gated by notify, library scans are gated by updateLibrary, library cleans are gated by cleanLibrary, and Kodi username/password fields are sent as Basic auth. When alwaysUpdate is disabled, Gadarr checks Player.GetActivePlayers and skips scan/clean actions while a video player is active.

2026-05-29 Plex Section Refresh Pass

Plex Connect delivery now checks Plex library sections for provider tests and refreshes matching show sections instead of always using the broad /library/sections/all/refresh endpoint. When a game path is available, mapFrom/mapTo are applied before matching Plex section locations and passing the refreshed path to /library/sections/{id}/refresh.

The remaining response wrappers and utility resources are covered too: paging responses, system status, disk space, health, update, backup, manual import, parse, ping, indexer flags, localization, tag details, log files, import-list exclusions, delay profiles, and language profiles all map their Sonarr OpenAPI field names.

History resources now carry the remaining Sonarr HistoryResource fields around Gadarr activity rows: virtual episode IDs/details, languages, release quality, custom format score, quality-cutoff state, and the existing event data payload.

Virtual episode resources were broadened for every Sonarr episode-shaped alias, including wanted and history embeds: they now include runtime, finale type, last search time, scene numbering fields, image arrays, optional virtual episode-file data, end time, and grab date where Gadarr has equivalent game state.

Query-parameter compatibility is now tracked separately from path/method coverage. Gadarr accepts or intentionally ignores the Sonarr query names used for release, queue, blocklist, history, wanted, episode, episode-file, manual import, filesystem, delay-profile reorder, calendar/feed, provider test/save, naming examples, series lookup/update/delete, log, and login routes. The most integration-sensitive filters now have native behavior: seriesId/seriesIds, episodeIds, episodeFileIds, protocol(s), queue status, wanted monitored, manual-import downloadId, filesystem includeFiles, and queue removal blocklist.

Request-body compatibility is now tracked as its own OpenAPI check too. Gadarr accounts for Sonarr body fields across provider CRUD and bulk routes, series editor/import/update routes, episode monitor and file editor routes, season-pass requests, manual import, queue/blocklist bulk operations, config updates, and resource updates. Bulk/editor applyTags now follows Sonarr-style add/remove/replace behavior for games, indexers, download clients, and import lists, while enableAutomaticAdd, rootFolderPath, and season-pass monitoringOptions are accepted by the matching Gadarr models.

Four Sonarr OpenAPI parity checks are available for the compatibility surface:

  • node scripts/sonarr-route-parity.mjs verifies Gadarr implements every Sonarr v3 operation path and method.
  • node scripts/sonarr-query-parity.mjs verifies every Sonarr query parameter is accounted for by Gadarr's compatibility layer.
  • node scripts/sonarr-body-parity.mjs verifies every Sonarr JSON request-body property is accounted for by Gadarr's compatibility layer.
  • node scripts/sonarr-resource-parity.mjs verifies the Sonarr-shaped resource mappers cover the upstream schema properties for releases, queue, history, commands, tasks, providers, config resources, library resources, and virtual episodes.