Skip to content

Arr Research

This note captures the first source pass for Gadarr. Sources were official GitHub repositories, official OpenAPI specs, and the Servarr wiki.

Current Status Note

This is a historical research snapshot. Gadarr now has its own queue, protocol-aware download-client handoff, completed-download import flow, Servarr-compatible API aliases, Steam/GOG/Epic/Itch/Lutris/Amazon/EA/Ubisoft/Battle.net/TMDb import lists, and game-native metadata surfaces. Keep using this file for upstream context, but prefer Architecture, Parity check, and Roadmap for the current product state.

Before publishing documentation or screenshots, run the Documentation agent so historical Arr context does not leak stale TV/movie/book language into the current game-native docs.

Source Anchors

  • Sonarr: https://github.com/Sonarr/Sonarr and https://sonarr.tv/docs/api/
  • Radarr: https://github.com/Radarr/Radarr and https://radarr.video/docs/api/
  • Prowlarr: https://github.com/Prowlarr/Prowlarr and https://prowlarr.com/docs/api/
  • Prowlarr app sync docs: https://wiki.servarr.com/en/prowlarr/quick-start-guide
  • Prowlarr FAQ: https://wiki.servarr.com/prowlarr/faq
  • Raw Prowlarr OpenAPI: https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/src/Prowlarr.Api.V1/openapi.json
  • Raw Sonarr OpenAPI: https://raw.githubusercontent.com/Sonarr/Sonarr/develop/src/Sonarr.Api.V3/openapi.json
  • Raw Radarr OpenAPI: https://raw.githubusercontent.com/Radarr/Radarr/develop/src/Radarr.Api.V3/openapi.json
  • Lutris database schema: https://github.com/lutris/lutris/blob/master/lutris/database/schema.py
  • Lutris game database access: https://github.com/lutris/lutris/blob/master/lutris/database/games.py
  • Amazon Games local cache scanner reference: https://gitee.com/leeshan520/NonSteamLaunchers-On-Steam-Deck/blob/WIP/NSLGameScanner.py
  • Vortex game-detection notes for Origin/EA Play and Ubisoft Connect: https://github.com/Nexus-Mods/vortex-api/issues/33
  • Playnite Ubisoft Connect library integration source: https://github.com/JosefNemec/PlayniteExtensions/tree/master/source/Libraries/UplayLibrary
  • Playnite Battle.net library integration source: https://github.com/JosefNemec/PlayniteExtensions/tree/master/source/Libraries/BattleNetLibrary
  • Mod Organizer 2 basic games metadata docs for EA Desktop installer data: https://github.com/ModOrganizer2/modorganizer-basic_games

Patterns To Borrow

  • Monitor a desired library, not just one-off downloads.
  • Separate automatic search, interactive/manual search, RSS or feed sync, queue, history, and health.
  • Model profiles separately from items: quality profiles in Arr become game patch channels, platform rules, preferred sources, minimum seeders, and release filters in Gadarr.
  • Keep download clients separate from indexers. Prowlarr can search indexers, but downstream apps normally own the download client behavior.
  • Keep all external credentials server-side and expose sanitized connection state to the UI.
  • Add explainability to search decisions: why a release was accepted, rejected, queued, or ignored.

Game Launcher Cache Notes

  • Lutris keeps local game records in a SQLite pga.db database under its data folder. Current upstream schema has a games table with fields including id, name, slug, parent_slug, platform, runner, directory, installed, service, and service_id.
  • Lutris' own database access code treats installed service games as rows where installed is true and uses service plus service_id to match records from Steam, GOG, Epic, and other services.
  • Gadarr should read that database read-only, import installed games by default, preserve Lutris IDs/slugs and any service IDs, and skip child/add-on rows by default when parent_slug is set.
  • The Amazon Games scanner reference reads a local GameInstallInfo.sqlite cache under Amazon Games/Data/Games/Sql/, queries the DbSet table, and filters Installed = 1 rows while mapping Id and ProductTitle.
  • Gadarr should read that Amazon cache read-only, import installed games by default, preserve Amazon product IDs, carry install paths/version hints when present, and skip rows with explicit parent/add-on markers unless add-ons are enabled.
  • Vortex's Origin/EA Play detection notes describe local .mfst manifests under C:\ProgramData\Origin\LocalContent, including URL-encoded id, dipinstallpath, currentstate, and version-like parameters.
  • Mod Organizer's basic-games docs point EA Desktop detection at <EA Games install location>\<game title>\__Installer\installerdata.xml, with contentID as the EA Desktop identifier.
  • Gadarr should read those EA files read-only, import installed games by default, preserve EA content IDs, carry install paths/version hints when present, and skip parent/add-on rows unless add-ons are enabled.
  • Vortex's Ubisoft Connect detection notes use HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Ubisoft\Launcher\Installs keys for installed-game IDs and InstallDir, while the matching uninstall key UPlay Install {id} carries DisplayName.
  • Playnite's Ubisoft Connect plugin reads the local client configuration cache from %LocalAppData%\Ubisoft Game Launcher\cache\configuration\configurations, deserializes product info, and separately reads installed game paths from the Ubisoft launcher install registry keys.
  • Gadarr should read Ubisoft records read-only from registry/cache exports or game folders, import installed games by default, preserve Ubisoft/Uplay IDs and install IDs, carry install paths/version hints when present, and skip ULC/add-on rows unless add-ons are enabled.
  • Playnite's Battle.net plugin reads Windows uninstall entries with Battle.net --uid values, skips Test/Beta display names, handles classic Blizzard uninstall entries, and uses c:\ProgramData\Battle.net\Agent\product.db as a local fallback for games that do not create registry keys.
  • Gadarr should read Battle.net records read-only from registry exports, product.db/product JSON exports, protobuf product.db files, or game folders with Battle.net build markers, import installed games by default, preserve Battle.net internal/product/API IDs, carry install paths/version hints when present, skip Test/Beta rows, and skip explicit add-on rows unless add-ons are enabled.

Prowlarr Facts That Matter For Gadarr

  • Prowlarr is an indexer manager/proxy in the Arr ecosystem and exposes a v1 API.
  • Prowlarr supports Newznab and Torznab indexers, generic definitions, custom YML definitions, indexer stats, indexer health, and manual searches.
  • Prowlarr can sync indexers into supported apps, but supported app sync is category and tag aware.
  • Full Sync means Prowlarr overwrites most managed indexer settings in the connected app when settings differ.
  • Download clients configured in Prowlarr are for Prowlarr-side searches. For searches from downstream apps, the downstream app's download clients are used.
  • Prowlarr does not currently list Gadarr as a native supported application, so the first integration should be pull-first: Gadarr reads Prowlarr indexers and searches Prowlarr directly.

Prowlarr Endpoints To Use First

  • GET /api/v1/system/status
  • GET /api/v1/health
  • GET /api/v1/indexer
  • GET /api/v1/indexer/categories
  • GET /api/v1/indexerstats
  • GET /api/v1/indexerstatus
  • GET /api/v1/search
  • POST /api/v1/search

Source inspection notes from Prowlarr SearchController:

  • GET /api/v1/search converts the request into a Newznab request and maps results to ReleaseResource.
  • SearchResource defaults type to search and accepts query, type, indexer ids, categories, limit, and offset.
  • Prowlarr caches search results for later grab calls. Gadarr treats those results as candidates, applies game release decisions, and uses its own queue plus download-client handoff.
  • ReleaseResource carries the fields Gadarr needs first: title, guid, indexer, indexerId, protocol, categories, publish date, size, download URL, magnet URL, seeders, leechers, and info URL.

Sonarr And Radarr API Shape

Sonarr and Radarr both expose v3 REST APIs with familiar resources:

  • tracked library item: /api/v3/series or /api/v3/movie
  • lookup: /api/v3/series/lookup or /api/v3/movie/lookup
  • indexers: /api/v3/indexer
  • download clients: /api/v3/downloadclient
  • releases: /api/v3/release
  • queue: /api/v3/queue
  • history: /api/v3/history
  • wanted/missing: /api/v3/wanted/*
  • health and system state: /api/v3/health, /api/v3/system/status
  • background work: /api/v3/command

Gadarr should mirror that conceptual surface with game-specific resources rather than copying media naming.

Gadarr Domain Translation

  • Sonarr/Radarr library item terms translate to game.
  • Sonarr/Radarr file terms translate to installed build, patch artifact, mod pack, or depot.
  • Quality profile -> patch channel, platform, source trust, checksum/signature policy, minimum seeders.
  • Wanted/missing -> games behind desired version.
  • RSS sync -> watch feeds and Prowlarr searches for monitored titles.
  • Manual search -> search candidates for a selected game and explain acceptance/rejection.
  • Queue -> pending downloads, patch fetches, hash checks, unpack/install staging.
  • History -> search attempts, grabs, imports, failures, ignored releases.
  • Root folders -> library roots per platform or launcher.

Early Product Boundary

Gadarr should not become a launcher replacement on day one. The first product surface is:

  • Watch game titles and versions.
  • Search Prowlarr for update candidates.
  • Track candidate status and queue decisions.
  • Leave install/patch apply automation behind an explicit future milestone.