Atrium
The central courtyard for your self-hosted media stack.
One Android app that fronts Sonarr, Radarr, Lidarr, Prowlarr, Bazarr,
Seerr, Ombi, Tautulli, Tracearr, Jellyfin, Emby, Plex, Navidrome,
qBittorrent, Deluge, Transmission, rTorrent, aria2, slskd, SABnzbd, NZBGet, Glances,
Speedtest Tracker, MySpeed, Beszel, dashdot, Gluetun, AdGuard Home, Cleanuparr
and Unraid - and routes every request through the right URL whether you're on
the home Wi-Fi or out in the world.
Website - screenshots and a tour, no install needed.
Status: v1.10.1. Install from F-Droid, or grab a signed APK
from the releases page.
Why
LunaSea (Flutter, GPL-3) was archived in 2024 and the niche is
open. Atrium picks up that space with a modern Flutter codebase, a focus
on multi-instance setups, and first-class handling of split local /
external URLs.
Highlights
- Multi-instance per service. Run two Sonarrs, three qBits, whatever
- every instance is a first-class profile entry.
- Dual-URL routing. Every instance has a LAN URL and a WAN URL. The
app probes the LAN URL with a short timeout, caches the verdict per
network, and falls back to WAN. You can pin Force-Local or
Force-External per instance.
- Activity feed. One tab aggregates live activity across every
instance: active streams from Plex / Jellyfin / Emby / Tautulli and
transfers (downloads and active uploads) from qBittorrent, Deluge,
Transmission, rTorrent, aria2, slskd, SABnzbd, NZBGet, and the *arr queues.
- Controller, not a player. Media servers are browse/manage/remote-
control surfaces; playback stays with the official apps (deep links
provided).
- Wake-on-LAN. Store your machines (MAC / broadcast / port) in the
profile and wake them from Settings; magic packets are sent with pure
Dart UDP.
- Reverse-proxy friendly. Global and per-instance custom HTTP
headers (Authelia / Cloudflare Access style) ride every request. See
Behind a reverse proxy.
- Hardware-backed credentials. API keys live in the Android Keystore
via
flutter_secure_storage. Optional biometric unlock on launch.
Profiles export/import as JSON (including WOL devices and headers).
- Material 3 Expressive. Tonal cards, poster-palette theming,
backdrop now-playing cards, and dynamic color throughout.
- F-Droid first. Reproducible build; no proprietary blobs and no
runtime-fetching dependencies.
Services
Every service below works today. Depth varies, and the table says what
each one covers:
| Service | What works today |
|---|
| Sonarr | 7 tabs incl. full Settings editor, sort/filter with the server's custom filters, calendar |
| Radarr | same depth as Sonarr, movie flavored, with collection monitoring |
| Lidarr | artists, albums and tracks, wanted, activity, settings, log reader |
| Prowlarr | indexers, search + grab, history, settings, system |
| Bazarr | series/movies, wanted, manual subtitle search, system |
| Seerr | discover, search, requests management filtered by status, sign in as a Seerr, Jellyfin or Emby user |
| Ombi | requests with approve/deny/delete, search, discover |
| Tautulli | activity, history, stats, users, terminate |
| Tracearr | fleet overview, live streams, media catalog, user profiles, policy incidents |
| Jellyfin | libraries, detail, seasons, music, sessions with remote control |
| Emby | same depth as Jellyfin |
| Plex | libraries, detail, seasons, music, genres, now-playing controller, plex.tv sign-in |
| Navidrome | artists, albums and tracks, playlists, ratings and favorites, search |
| qBittorrent | realtime list, add/manage, torrent detail, private/public badges, queue reorder, full settings, execution log, external IP |
| Deluge | torrent list with a filter drawer, add/manage, queue moves, speed limits, torrent detail (beta) |
| Transmission | the web UI's filters in a drawer, actions and inspector, full settings, turtle mode |
| rTorrent | torrent list, add/manage, priorities, speed limits, torrent detail (beta) |
| aria2 | transfer list, add/manage, speed limits, download detail, full settings, Active downloads widget (beta) |
| slskd | Soulseek P2P client, album search, peer shares browser, chat rooms & direct messages, transfer leaderboard, Active downloads widget (beta) |
| SABnzbd | queue, history with retry, speed limit, server stats |
| NZBGet | queue with reorder/priority/category, add NZB, speed limit, history |
| Glances | CPU/memory/network/disk monitoring |
| Speedtest Tracker | latest result, history chart, dashboard, confirmed remote test runs |
| MySpeed | status and manual runs, the day's results, history with averages, password auth, dashboard widget |
| Beszel | systems list, live metrics, per-system detail screen |
| dashdot | live CPU, memory, disk, and GPU usage with a system-info tab, dashboard widget |
| Gluetun | VPN status, forwarded port, reconnect, dashboard widget |
| AdGuard Home | protection switch and timed pause, statistics, top clients and domains, query log with block and unblock, blocklists, custom rules, blocked services and rewrites, persistent and runtime clients, DNS, cache, access and retention settings, dashboard widget |
| Cleanuparr | system status, operational metrics, active strikes ledger & reset, audit events feed, background cleaner job triggers, dashboard widget (beta) |
| Unraid | array and disk health, system with per-core load, Docker, VM control |
Install
Atrium is on F-Droid, which is the easiest route: it picks the
right build for your device and keeps it updated.
To install by hand instead, grab the APK for your device from the
releases page. Most phones want app-arm64-v8a-release.apk;
armeabi-v7a covers older 32-bit devices. Android 7.0 (API 24) or newer.
Atrium is built reproducibly, so F-Droid rebuilds it from source, verifies
the result matches the published APK byte for byte, and ships it carrying
this project's own signature. The two sources are therefore
interchangeable: you can move between the releases page and F-Droid without
uninstalling. F-Droid builds each tag only after it is published, so it can
sit a version behind the releases page for a few days.
iOS
There is an iOS target and CI builds it on every change, but there is no
download and there will not be one. Atrium is GPL-3.0-or-later, which is
incompatible with the App Store's terms, and relicensing would need the
agreement of everyone who has contributed. So iOS means building it
yourself and sideloading, with Xcode or a tool like AltStore. iOS 14 or
newer.
Be aware this has never run on a real device - it is verified to compile,
nothing more. The first person to try it will find rough edges; issues and
fixes are welcome. On iOS the theme uses Atrium's own palette rather than
the system one, since there is no wallpaper colour to read, and iOS will
ask permission the first time the app reaches a device on your network.
Build
Requires Flutter ^3.27 and Dart ^3.6 (pub workspaces).
flutter pub get
flutter run -d <device>
Code-generation step (run after edits to any freezed / json_serializable
model). To run code generation for a specific package, navigate to that
package's directory and run:
dart run build_runner build --delete-conflicting-outputs
Alternatively, to run code generation for all packages in the workspace
from the repository root, run:
dart run tool/build_all.dart
Debug builds need no setup. To try a release build without a signing key
of your own, sign it with the debug key:
flutter build apk --release -PdebugSignRelease=true
Without that flag a release build comes out unsigned, and an unsigned APK
will not install. That is deliberate rather than an oversight: F-Droid
verifies a release by copying the signature off the published APK onto its
own build of the same source, which only works if its build carries no
signature. So the flag must never be set for anything you publish.
To sign with your own key instead, copy app/android/key.properties.example
next to itself as key.properties and fill it in; that file and the keystore
it points at are gitignored.
Published releases are built by CI and signed by hand: see
docs/RELEASING.md.
Repo layout
app/ Flutter application - the APK target
packages/ Cross-service infrastructure
core_models/ Domain models (Profile, Instance, WolDevice, ...)
core_storage/ Secure storage, Hive boxes, biometric unlock
core_networking/ Dio factory, dual-URL resolver, WOL, custom headers
core_profile/ Profile CRUD, providers, import/export
core_ui/ Material 3 theme + shared widgets
core_router/ GoRouter setup (shell with drawer + bottom nav)
services/ One feature package per integrated service
See CONTRIBUTING.md for the contribution guide and
STATUS.md for a detailed feature snapshot.
License
GPL-3.0-or-later - the same license as Sonarr, Radarr,
Jellyfin, qBittorrent, and LunaSea.