![]()
A mobile app to manage your self-hosted media stack from a single interface.
Built with Expo & React Native. Inspired by nzb360.
A huge thank you to everyone who has supported Dashboarr's development on Ko-fi. Your generosity helps keep the project alive!
Thanks to everyone who has contributed to Dashboarr!
Dashboarr is a native mobile app (Android & iOS) that connects directly to your self-hosted *arr stack and media services. No backend server required — the app talks to each service's REST API using your API keys.
Supported services:
| Service | What you can do |
|---|---|
| qBittorrent | View queue, pause/resume/delete torrents, speed stats, transfer progress |
| rTorrent / ruTorrent | View queue, pause/resume/delete torrents, global speed stats, transfer progress |
| SABnzbd | View Usenet queue & history, pause/resume/delete jobs, add NZB by URL, speed stats |
| NZBGet | View Usenet queue & history, pause/resume/delete jobs, add NZB by URL, speed stats |
| Radarr | Search & add movies, monitor status, view queue, missing/wanted lists |
| Sonarr | Search & add shows, episode monitoring, airing calendar/schedule |
| Seerr | Browse & search media, request movies/shows, approve/decline requests |
| Tautulli | Active Plex streams, bandwidth stats, playback history |
| Tracearr | Live streams with codec/quality details, bandwidth, playback history |
| Prowlarr | Indexer status & toggle, search across all indexers, grab releases, stats |
| Plex | Now playing, recently added, on deck, library browsing |
| Jellyfin | Now playing, recently added, continue watching, library browsing |
| Emby | Now playing, recently added, continue watching, library browsing |
| Bazarr | Wanted subtitles for movies & episodes, history, on-demand subtitle search |
| Glances | Server CPU, RAM, disk, and network stats |
expo-secure-storeDashboarr is now available on the Apple App Store: Dashboarr on the App Store
Dashboarr is now available on the Google Play Store: Dashboarr on Google Play
If you're running a de-Googled Android (GrapheneOS, LineageOS, /e/OS, etc.) or just prefer to sideload, the signed APK for every release is attached to the matching tag on the Releases page.
app-release.apk from the latest releaseThe APK is signed with the same keystore as the Play Store build, so you can install it side-by-side or migrate from Play without losing data — but you cannot mix the two on the same device.
# Clone the repo
git clone https://github.com/renzobeux/dashboarr.git
cd dashboarr
# Install dependencies
pnpm install
# Start the dev server
pnpm start
Scan the QR code with Expo Go on your device, or press a for Android emulator / i for iOS simulator.
# Android (EAS Build)
pnpm build:android
# iOS (EAS Build)
pnpm build:ios
# Android local production build — produces both AAB (Play Store) and APK (sideload)
pnpm build:android:prod
# Upload the locally-built APK to the GitHub Release matching package.json version
# (creates the release with auto-generated notes if it doesn't exist yet)
pnpm release:android:apk
# Build + upload in one go
pnpm release:android
The release:* scripts require the GitHub CLI (gh) to be installed and authenticated against the repo. The APK is read from android/app/build/outputs/apk/release/app-release.apk and uploaded to the tag v<version> from package.json.
Dashboarr works fully without a backend. If you want real push notifications delivered to your phone's lock screen — torrent completed, new episodes grabbed, request approved, service offline — you can self-host the lightweight companion backend.
The backend polls your services and ingests their webhooks, then fires Expo pushes to every paired device. It pairs with your phone via QR code (no accounts) and supports multiple instances per service kind.
For setup, configuration, environment variables, webhook URLs, and per-instance push attribution, see the backend README.
All service configuration is done in the Settings tab within the app:
Tailscale works great with Dashboarr. The trick is to address each service by its Tailscale name or IP (the 100.x.x.x address, or a MagicDNS name like radarr.your-tailnet.ts.net) instead of its plain LAN IP. Tailscale addresses are reachable from anywhere, so Dashboarr never treats them as offline when you leave your home WiFi.
Pick whichever fits you:
http://192.168.1.50:7878)http://100.x.x.x:7878)At home Dashboarr uses the direct LAN URL; away it uses Tailscale.
- VPN that routes your LAN (WireGuard, OpenVPN, Tailscale subnet router): if your tunnel makes the plain 192.168.x addresses reachable from anywhere, you have two options. With Auto-switch network off, nothing to configure: Dashboarr always uses the Local URL and, while a VPN is connected, no longer marks private addresses offline. With auto-switch on, also enable Settings → Treat VPN as home (the toggle appears once auto-switch is on): while any VPN is connected, Dashboarr behaves as if you were on your home WiFi and uses the local URLs directly. The app can only detect that a VPN is up, not which one, so enable this only if your VPN reaches your home network.
Without a VPN connected, avoid putting a
192.168.xor10.xaddress in the Remote URL slot. Private LAN addresses can't be reached over mobile data, so Dashboarr marks them offline when you're off WiFi (when a VPN is connected it will still try them). If you only reach your server through a Tailscale subnet router (so it has no100.xaddress of its own), this VPN handling covers you; alternatively, install Tailscale directly on that server so it gets its own Tailscale address.
app/ # Expo Router file-based routing
(tabs)/ # Bottom tab screens (dashboard, movies, tv, etc.)
movie/ # Movie detail & search screens
series/ # Series detail & search screens
torrent/ # Torrent detail screen
sab/ # SABnzbd job detail screens
nzb/ # NZBGet job detail screens
backend/
dashboarr-backend/ # Self-hosted companion server (Fastify + SQLite)
components/
ui/ # Reusable UI primitives (cards, buttons, inputs, toggles)
common/ # Shared layout components (screen wrapper, pull-to-refresh)
dashboard/ # Dashboard card components
downloads/ # Unified downloads list (qBittorrent + SABnzbd + NZBGet)
qbittorrent/ # qBittorrent-specific components
radarr/ # Radarr-specific components
sonarr/ # Sonarr-specific components
overseerr/ # Seerr-specific components (folder name kept for back-compat)
settings/ # Settings screen components
services/ # Raw API clients for each service
hooks/ # TanStack Query wrappers (caching, polling, mutations)
store/ # Zustand stores + AsyncStorage/SecureStore helpers
lib/ # Types, utils, constants, HTTP client, Wake-on-LAN
plugins/ # Custom Expo config plugins (Android signing)
| Layer | Technology |
|---|---|
| Framework | Expo SDK 54 (React Native 0.81) |
| Routing | Expo Router v6 |
| Styling | NativeWind v4 (Tailwind CSS) |
| Data fetching | TanStack Query v5 |
| State management | Zustand v5 |
| Secure storage | expo-secure-store |
| Icons | lucide-react-native |
| Language | TypeScript (strict mode) |
See TODO.md for planned features and ideas.
Contributions are welcome! Feel free to open issues and pull requests.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Dashboarr is free and open source under GPL-3.0. If you find it useful, you can support continued development on Ko-fi:
Every coffee helps cover Apple Developer fees and time spent adding new services!
This project is open source. See the LICENSE file for details.
$ claude mcp add Dashboarr \
-- python -m otcore.mcp_server <graph>