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.dbdatabase under its data folder. Current upstream schema has agamestable with fields includingid,name,slug,parent_slug,platform,runner,directory,installed,service, andservice_id. - Lutris' own database access code treats installed service games as rows where
installedis true and uses service plusservice_idto 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_slugis set. - The Amazon Games scanner reference reads a local
GameInstallInfo.sqlitecache underAmazon Games/Data/Games/Sql/, queries theDbSettable, and filtersInstalled = 1rows while mappingIdandProductTitle. - 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
.mfstmanifests underC:\ProgramData\Origin\LocalContent, including URL-encodedid,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, withcontentIDas 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\Installskeys for installed-game IDs andInstallDir, while the matching uninstall keyUPlay Install {id}carriesDisplayName. - 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
--uidvalues, skips Test/Beta display names, handles classic Blizzard uninstall entries, and usesc:\ProgramData\Battle.net\Agent\product.dbas 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.dbfiles, 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/statusGET /api/v1/healthGET /api/v1/indexerGET /api/v1/indexer/categoriesGET /api/v1/indexerstatsGET /api/v1/indexerstatusGET /api/v1/searchPOST /api/v1/search
Source inspection notes from Prowlarr SearchController:
GET /api/v1/searchconverts the request into a Newznab request and maps results toReleaseResource.SearchResourcedefaultstypetosearchand 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.
ReleaseResourcecarries 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/seriesor/api/v3/movie - lookup:
/api/v3/series/lookupor/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.