Requestarr's foundation is copied from Prowlarr, which is licensed under GPL-3.0. Requestarr is licensed under GPL-3.0 too.
| Source | https://github.com/Prowlarr/Prowlarr, develop branch |
| Commit | 26a605e41f6156b959bc8f3ae5db4bec252106c5 (2026-10-18) |
| Imported in | commit cb5838d ("Import Prowlarr foundation at 26a605e…"). This is an unmodified copy, so git diff cb5838d -- <path> shows every Requestarr change to an upstream file. |
| .NET | Imported on net8.0 (Prowlarr's target at that commit). Requestarr moved to net10.0 on 2026-10-19 and now diverges from upstream's target framework (see below). |
These are shared Servarr infrastructure, kept under their NzbDrone.* namespaces so upstream fixes apply cleanly:
- database, migrations framework, Dapper mapping
- configuration (
config.xmland theConfigtable) - DI wiring (DryIoc), HTTP API base, SignalR
- authentication (API key, Basic, Forms, External)
- health checks, scheduled tasks, the command and event system, housekeeping, backups
- logging, the provider pattern (ThingiProvider), tags, custom filters
- the React web shell: Settings (General, UI, Tags, Development) and System (Status, Tasks, Backup, Updates, Events, Logs)
The Prowlarr domain:
- indexers (including Cardigann definitions), indexer proxies, indexer search, versions, and stats
- download clients
- applications (app sync) and app sync profiles
- history
- notifications. Requestarr will add its own notification needs later.
- their API controllers, frontend pages, store slices, and tests
- Prowlarr's 44 migrations, replaced by one initial migration (
001_initial_setup.cs). It holds the Servarr infrastructure tables in their final upstream shape plus the Requestarr data model. - calls to Servarr-hosted services: Sentry error reporting (backend and frontend), the update and notification service, the system-time check, and Piwik. Requestarr reports no updates until it has its own release feed.
- the root packaging scripts
build.sh,test.shanddocs.sh(2026-10-27). Requestarr builds withdotnetand its Dockerfile, runs tests withdotnet test, and publishes Docker images only, so nothing used them; they still targeted older SDKs and a macOS package folder Requestarr doesn't have. An upstream change to them doesn't apply: keep them deleted. - inherited code nothing used, whole files only (2026-10-27, the clean-code sweep): 104 web app files left from the removed Prowlarr pages (charts, the filter builder, custom filters, virtual tables, sort and view menus, the page jump bar, provider-settings helpers, unused selectors, hooks and utilities) with their stylesheets, and
preload.js, which nothing loads; in the backend,ReleaseUnavailableExceptionandSearchFailedException(indexer search),RescanAfterRefreshType, the emptyResultSetclass andBackendCommandAttribute, and the Sentry logging helpers. An upstream change to one of them doesn't apply: keep it deleted. General-purpose code nothing calls today is kept (the EnsureThat checks, extension methods, the path and URL validators, the HTTP exceptions), because upstream fixes touch it and Requestarr's admin portal is likely to use some; so is anything found by reflection or dependency injection. Files Requestarr still uses are never edited just to remove unused members inside them.
- Projects, assemblies, and the solution:
Prowlarr.*→Requestarr.*. TheProwlarr.HttpandProwlarr.Api.V1namespaces becameRequestarr.HttpandRequestarr.Api.V1, mirroring how each *arr names these.NzbDrone.*namespaces are unchanged. - The frontend global
window.Prowlarrbecamewindow.Requestarr, and the client header becameX-Requestarr-Client. - Default port 9797. Translation values say Requestarr, but translation keys are unchanged, so upstream locale updates still merge.
New code uses Requestarr.* namespaces in Requestarr/ folders inside the existing projects, for example src/NzbDrone.Core/Requestarr/Provisioning. It lives inside those projects so DI scanning, table mapping, and provider-settings registration work without changes to upstream files.
Small upstream-file changes worth knowing when merging:
ConfigFileProvider.SetApiKey, used by provisioningAppFolderFactory.Registercreates the app data folder before the legacy DB migration (it failed on fresh installs)HealthCheckReason.ProvisioningFailedTagServiceandCleanupUnusedTagsonly consider theBackendstable- Requestarr's backend analyzer checks are additions only: a block at the end of
.editorconfig("Requestarr additions"), the Sonar analyzer and two files (src/Sonar.globalconfig,src/SonarLint.xml) insrc/Directory.Build.props. Upstream's.editorconfigsections are unchanged; merge upstream changes above the additions. - The web app's lint configuration moved from
frontend/.eslintrc.jstofrontend/eslint.config.js(2026-10-27), because ESLint 10 dropped the old format and ESLint 8 gets no updates. Upstream's rules are in it unchanged (lessvalid-jsdocandrequire-jsdoc, which ESLint 9 removed and upstream had off). Apply an upstream change to.eslintrc.jsto the matching rule ineslint.config.jsby hand; Requestarr's own checks are in the block at its end.
On 2026-10-19, Requestarr moved from net8.0 to net10.0 because .NET 8 support ends 2026-11-10. Upstream Prowlarr was still on net8.0 at the import commit. Expect these differences when merging upstream changes:
- Every
TargetFrameworksisnet10.0(net10.0-windowsfor the tray app). Keep Requestarr's value when an upstream hunk touches these lines. global.jsontargets SDK 10.0.100 withrollForward: latestFeature.- Microsoft.* and System.* packages are on 10.0.x. These references were removed because .NET 10 includes them in the framework (NU1510): System.Text.Json, System.Text.Encoding.CodePages, System.Resources.Extensions, System.Private.Uri, System.Runtime.Loader, System.Security.Principal.Windows. Drop them again if an upstream change re-adds them.
- APIs obsolete in .NET 10 were replaced:
- SSL certificate loading uses
X509CertificateLoader.LoadPkcs12FromFile(Bootstrap and CertificateValidator). - Trusted proxies use
KnownIPNetworkswithSystem.Net.IPNetwork(ForwardedHeadersConfigurator). - The tray app overrides
OnFormClosing.
- SSL certificate loading uses
- Third-party packages were not changed. All of them restore and build for net10.0 with no compatibility warnings (no NU1701), so none are held back.
- Find the upstream commit and check which files it touches.
- Apply it with path and name translation (
Prowlarr.Http→Requestarr.Http, and so on), for examplegit format-patchfrom upstream plussedon the patch. - Skip any hunk that touches removed domain code.