A Flutter app for managing your self-hosted media stack from anywhere.
One client for Seerr, Radarr, Sonarr, Lidarr, and qBittorrent on macOS, iOS, and Android.
- Screenshots
- Features
- Getting Started
- Configuration
- Platform-specific Install
- Architecture
- Contributing
- About this project
- Support
- License
- Discover — Browse trending movies and TV shows via Seerr
- Three horizontal carousels: Trending / Movies / TV, with a unified search across both
- Rich detail page: TMDB + external ratings, region-aware watch providers and content ratings, cast, collections, keywords, and playable trailers
- TV detail surfaces season/episode lists; both movies and TV show studios, networks, directors, writers, and release info
- Actions: add to your *arr library, send a Seerr request, run an interactive search, or manage existing media (delete from Radarr/Sonarr, clear data)
- Movies — Your Radarr library in your pocket
- Browse the full library with status badges (file, monitoring, queued), pull-to-refresh, and search
- Detail page with ratings, file info, quality profile, and genres
- Actions: auto and interactive search, toggle monitored, change quality profile, manual import, delete (with optional file removal and import exclusion)
- TV Series — Manage your Sonarr series library
- Everything Movies does, plus a season list with episodes and per-season / per-episode search
- Status badges show
episodeFileCount / episodeCountat a glance
- Music — Manage your Lidarr music library
- Everything Movies does, plus a per-artist album list
- Circular artist posters and album/file counts in status badges
- Torrents — Manage qBittorrent torrents from anywhere
- Status filter chips (all / downloading / seeding / completed / paused / queued), category / tag / tracker pills, and a free-text search field, all in the filter row
- Sort by name, size, progress, ETA, download/upload speed, added date, or state (with reverse toggle)
- Detail screen with Info / Files / Trackers / Actions tabs and 3s live polling
- Mutate: pause, resume, force-start, force-recheck, reannounce, set per-torrent speed limits, edit category and tags, delete (with optional file removal)
- Polished with the shared design-token system (
AppSpacing,AppRadius,AppAnimation)
- Search — Cross-service search with always-visible search bars
- Activity — Comprehensive task monitoring
- Queue, History, and Blocklist with sticky segmented navigation and full pagination
- Wanted: Missing and Cutoff Unmet with status text and pagination
- Queue status normalization based on structured fields
- Sonarr wanted items organized by Series → Season → Episode with per-episode search
- Customization — Light, Dark, or System theme; configurable navigation bar services
- Multiplatform — Tested on Android, iOS, and macOS
Just want to use the app? Skip ahead to Platform-specific Install — download the right file for your platform from Releases and install it. No prerequisites.
- Flutter SDK compatible with Dart
^3.10.0(CI uses Flutter 3.38.7) - For iOS / macOS: Xcode (latest stable)
- For Android: Android Studio + Android SDK (compileSdk 36)
- At least one running self-hosted service: Seerr, Radarr, Sonarr, Lidarr, or qBittorrent
git clone https://github.com/matthw-labs/seekarr.git
cd seekarr
flutter pub get
flutter runSeekarr ships with no default credentials. After launching the app, open Settings and configure each service you want to use:
- Seerr — Base URL + API key
- Radarr — Base URL + API key
- Sonarr — Base URL + API key
- Lidarr — Base URL + API key
- qBittorrent — Base URL + Username + Password (uses qB's WebUI v2 form login; no API key)
- Region preferences (where applicable)
API keys are stored securely on the device using flutter_secure_storage and are never transmitted outside your local network.
| Platform | Status | Distribution |
|---|---|---|
| Android | ✅ Supported | .apk from Releases |
| iOS | ✅ Supported (sideload) | Unsigned .ipa from Releases |
| macOS | ✅ Supported | .dmg from Releases |
| Web / Linux / Windows | Build from source, not officially tested |
Download the .apk file from the Releases page and install it on your device (you may need to allow installs from unknown sources).
Download the .dmg file from the Releases page, drag Seekarr to /Applications, and launch it. On first run, right-click the app and choose Open to bypass Gatekeeper.
Download the unsigned .ipa from the Releases page and sideload it with one of the standard tools:
- AltStore — refreshes over Wi-Fi on the same machine
- Sideloadly — desktop tool, no account needed on macOS
- Sideload — web-based, runs in your browser
The .ipa is not signed by Apple, so it has to be installed through one of the tools above (they apply an ad-hoc signature on install). The signature expires and the app needs to be re-installed periodically:
- Free Apple ID — 7 days
- Paid Apple Developer account — 1 year
Build from source
If you'd rather build the iOS app yourself, clone the repo and run:
flutter build ios --no-codesignThen open the resulting .app in Xcode and run it on your device or simulator.
Project scaffolding for these platforms exists, but they are not officially tested or supported.
Contributions to improve support on these platforms are welcome.
Seekarr follows a feature-first layered architecture:
lib/
├── core/ # Shared infrastructure: theme, routing, API client, reusable widgets
└── features/
├── <feature>/
│ ├── data/ # Services and API calls
│ ├── domain/ # Models
│ └── presentation/ # Screens, providers, widgets
├── activity/
├── discover/
├── movies/
├── music/
├── qbittorrent/
├── search/
├── series/
└── settings/
Key technical choices:
| Concern | Library |
|---|---|
| UI framework | Flutter 3.x + Material 3 |
| State management | Riverpod 3 |
| Navigation | go_router 17 |
| HTTP | Dio (+ cookie manager for qBittorrent) |
| Image caching | cached_network_image |
| SVG | flutter_svg |
| Dynamic color | dynamic_color |
| Secure storage | flutter_secure_storage |
| Settings storage | shared_preferences |
| Pagination | infinite_scroll_pagination |
| URL launching | url_launcher |
| In-app purchase | in_app_purchase |
| File picking | file_picker |
Goals: readability, modularity, and reusable UI components built on a consistent design token system (AppSpacing, AppRadius, AppAnimation).
Contributions are very welcome.
If you want to work on a change, please open an issue first to discuss scope and direction before implementation. I review PRs and issues in my spare time and will get to them as soon as I can.
For setup notes, conventions, and pull request expectations, see CONTRIBUTING.md.
Seekarr was born from a personal need: flawlessly managing a self-hosted *arr stack from a phone, from anywhere. It is developed with heavy use of agentic coding tools (OpenCode + LLMs), with a focus on pushing AI-assisted development to its quality limits — not just shipping fast.
If you find Seekarr useful, consider supporting me with a donation — it helps keep the project going!
This project is licensed under the MIT License.















