One mobile app for your whole self-hosted media stack.
Your phone talks straight to your own servers over each service's official API. No accounts, no cloud, no tracking. Free and open source.
Built for people who actually run this stack, not for a screenshot.
Create as many workspaces as you like. Each gets its own widgets, icon, accent colour, bottom-bar tabs and its own subset of servers, so a "Home" and a "Cabin" dashboard can show completely different stacks.
Queues, calendars, disk space, stream activity, server stats, health alerts and more. Place the same widget twice with different settings to watch two servers side by side.
Two qBittorrents, a 4K and a 1080p Radarr, a separate anime Sonarr. Switch in-tab and aggregate on the dashboard.
Give each service a LAN address and an internet address. On your home WiFi the app uses the fast local one, and away it switches to remote, never leaking a LAN URL onto a stranger's network.
Connects straight to your services. Your data stays between your phone and your servers.
Optional self-hosted backend for lock-screen pushes when a download finishes, media is imported or a service goes offline. Fan out to Discord, Telegram, ntfy or email via Apprise.
API keys live in the device Keychain or Keystore. No cloud, no accounts, no analytics, no ads.
Sub-paths, self-signed certificates and custom auth headers are all supported, globally or per service instance.
One search box across Radarr, Sonarr, Lidarr, Seerr, Prowlarr and Jackett, with each section loading independently. Titles already in your library match on the device and show up first, before any lookup returns.
Sonarr air dates and Radarr releases in one month grid. Live streams and history merged across Tautulli, Tracearr, Jellystat, Jellyfin and Emby.
Tap a magnet link anywhere and send it straight to qBittorrent, rTorrent or Transmission.
Export every service, credential, dashboard and widget into one passphrase-encrypted file, gated behind your device biometrics. Import it on a new phone.
Wake a sleeping server straight from the Services tab.
Five dark themes and three UI scales that resize the entire interface, including icons and poster grids.
Explore the whole app with realistic sample data before you connect a single server.
Nineteen integrations, each talking to its own official API. Enable only what you run.
Queue, pause, resume, delete, categories, speed limits
Queue, pause, resume, delete, add, speed limits
Queue, files, speed limits, turtle mode
Usenet queue, history, add NZB by URL or file
Usenet queue, history, add NZB by URL or file
Library, search and add movies, queue, wanted
Library, add shows, episode monitoring, calendar
Library, add artists, album monitoring, queue
Indexer status, search across indexers, grab, stats
Search across all indexers, send releases to your torrent client
Discover, request, approve. Overseerr and Jellyseerr
Now playing, recent, on deck, libraries
Now playing, recent, continue watching, libraries
Now playing, recent, continue watching, libraries
Active Plex streams, bandwidth, history, stats
Plex, Jellyfin and Emby streams and history
Jellyfin watch history, stats and charts
Wanted subtitles, history, on-demand search
CPU, memory, GPU, disks, network, containers
Container start/stop, array and disk health
Missing one? Most of these exist because someone opened an issue asking for it.
The questions that come up most often on the issue tracker.
No. Dashboarr talks directly from your phone to your own services and works fully on its own. The optional self-hosted backend exists for one thing: real push notifications on your lock screen while the app is closed. Without it notifications still fire, but only while the app is open.
No. If you only use the app at home, local URLs are enough. For remote access, give each service a remote URL through your reverse proxy, VPN or tunnel.
Even the optional notification backend does not need to be exposed. It needs outbound internet access and to be reachable by your phone on your LAN. Pushes still arrive over cellular because they go out through the standard Apple and Google push infrastructure.
This is deliberate. With network auto-switch on, Dashboarr uses a service's local LAN URL only once it has confirmed you are on one of your saved home WiFi networks. Anywhere else it uses your remote URL and never falls back, because a 192.168.x.x address on an unknown network could belong to a stranger and would leak your API key.
If it cannot read your WiFi name it plays it safe and stays remote. Grant Location permission (required on both iOS and Android just to read the network name), enable Precise Location on iOS, and add your network under Settings, Network, Home Networks. There is a diagnostics panel on that screen that tells you exactly what the app currently sees.
Only to read your WiFi network name, so it can tell "I am home, use the LAN address" apart from "I am out, use the remote address". Both iOS and Android gate the network name behind Location. Nothing about your location leaves the device, and there is no location tracking or logging of any kind.
Yes, two ways. The simplest is to address your services by their Tailscale or MagicDNS name, turn on "Always use Remote URL" and leave the local URL empty. One address that works on WiFi and on cellular, with no home-network setup at all.
Alternatively turn on Settings, Network, "Treat VPN as home" so local URLs are used whenever a VPN is connected. The app can only detect that some VPN is up, not which one, so only enable that if your VPN actually reaches your home network.
Yes to all three. Enter your proxied URL including any sub-path, such as https://media.example.com/radarr, and the app appends the API path itself. Each service instance has an "Allow invalid certificates" toggle for self-signed setups, plus a Custom Headers section for proxies that need their own headers, and a global header list under Settings, Network.
One caveat: forward-auth SSO such as Authentik or Authelia is cookie based, so headers cannot help. Exclude the API path from the proxy instead (^/api for the *arr apps, since the connection test goes through /api/v3/system/status). That is safe, because those APIs are already protected by their own API key.
Yes to both. Every service supports multiple instances, so two Sonarrs, a separate anime stack or a second household all work. You can also create as many dashboards as you like, each with its own widgets, icon, accent colour, bottom-bar tabs and its own subset of service instances.
API keys live in your device's secure store (iOS Keychain, Android Keystore) and the rest of your configuration in local app storage. There are no accounts, no analytics, no ads and no tracking, and there is no analytics or crash-reporting SDK in the app at all. Requests to your media services go straight from your phone to your own servers, and config backups are always encrypted with a passphrase you choose.
A few things do reach the internet by design, and the privacy policy lists them all: posters load from TMDB's image CDN, Plex sign-in talks to plex.tv, and the app checks the store (or GitHub) and Expo's update service for new versions. None of that carries your credentials.
Push notifications, if you opt into the self-hosted backend, are delivered via Expo and then Apple or Google, so the notification title and body pass through them, exactly as for any app that can wake a locked phone. The backend itself stays on your hardware, though pairing does upload your service URLs and keys to it so it can do the watching.
Without the backend, the app watches your services and raises notifications while it is open. With the backend, the watching happens server-side and pushes arrive with the app closed.
Two notifications for one download is expected rather than a bug: your download client reports "Download complete" when the file finishes, and Radarr or Sonarr reports "Movie downloaded" or "Episode downloaded" a minute later when it imports into the library. Turn either one off under Settings, Notifications, globally or per instance.
Check in this order. The master switch under Settings, Notifications must be on. The backend only notifies about events that complete after it starts, so a download that already finished is treated as seen, which is why testing with an old download looks broken. For Radarr, Sonarr and Seerr, send the webhook test event from the service itself: it should produce a confirmation push. Bazarr and Tautulli webhooks are ingested and logged today but do not raise a push yet.
Almost always the wrong port. The connection test succeeds against whatever is listening, then the API path fails. Check the service's real port, and make sure the URL is the bare origin with no /api/... suffix, since the app adds that itself.
Yes. Settings, Backup & Storage, Export settings writes one encrypted file containing every service, credential, dashboard and widget. Import it on the new phone.
Two things cannot travel in a file: OS permissions, so grant Location and Notifications again, and your device's push token. The backup does restore the backend URL and pairing secret, so the new phone will look paired, but the backend is still pointed at the old device, so re-pair from Settings, Backend to make notifications land on the new phone. Saved home networks also drop any pinned access-point MAC on import, since those never match across phones.
Dashboarr is free and open source under GPL-3.0, with no accounts, subscriptions, ads or in-app purchases. The source lives at github.com/RenzoBeux/Dashboarr. It is on the App Store, on Google Play, and available as a signed APK attached to each GitHub release for sideloading on de-Googled Android.
The guide walks through a first-time setup in the order you will actually do it.