Version 2.11.0 — System Pulse, Library Intelligence, TRaSH scheduled sync, quality upgrade visibility
A unified dashboard for managing multiple Sonarr, Radarr, Prowlarr, Lidarr, Readarr, Plex, Tautulli, and Seerr instances. Consolidate your media automation management into a single, secure, and powerful interface.
Click to expand screenshots
- Multi-Instance Aggregation — View queue, calendar, history, and statistics across all Sonarr, Radarr, Prowlarr, Lidarr, and Readarr instances from a single view
- Global Search — Search for content across all your indexers simultaneously via Prowlarr
- Library Management — Browse, filter, and manage your movies, TV shows, music, and books in one place
- Calendar View — See upcoming releases across all instances with poster art and external links
- History Tracking — Download and import history from all services with timeline and table views
- Now Playing — Real-time view of active Plex streams with user avatars, progress bars, transcode/direct play indicators, and bandwidth metrics
- Continue Watching / On Deck — See what's queued up next across your Plex libraries
- Recently Added — Latest additions to your Plex library with poster thumbnails
- Watch History — Historical watch data enriched with Tautulli analytics
- Plex Statistics — Dedicated stats tab with user analytics, device breakdown, codec distribution, bandwidth forecasting, quality scores, and daily activity charts
- Library Enrichment — Watch status, play counts, and last-watched dates shown on library items
- Request Management — View, approve, and decline media requests directly from the dashboard
- User Management — Browse users with request counts, quotas, and permissions
- Issue Tracking — View and manage reported media issues
- Notification Agents — Configure Seerr notification agents from the dashboard
- TMDB Integration — Discover trending, popular, and upcoming content
- One-Click Add — Add discovered content to any Radarr/Sonarr instance
- Seerr Availability — See request status and availability on the Discover page
- Quality Profiles — Apply TRaSH Guides quality profiles to your instances with guided wizard
- Custom Formats — Sync custom formats with recommended scores from TRaSH score sets
- Profile Cloning — Clone quality profiles from running instances with automatic TRaSH profile linking for ongoing score updates
- Templates — Create reusable configuration templates with instance-specific overrides
- Naming Schemes — Deploy TRaSH-recommended naming schemes for Radarr and Sonarr
- Auto-Sync — Keep configurations up-to-date with TRaSH Guides changes
- Deployment Preview — Preview changes before applying, with backup and rollback support
- Profile Groups — Profiles organized by category (Standard, Anime, French, German, SQP)
- 8 Channels — Discord, Telegram, Email (SMTP), Pushover, Gotify, Ntfy, Pushbullet, and Browser Push (Web Push API)
- Event Subscriptions — Per-channel subscription grid for 12+ event types
- Rich Metadata — Contextual details in every notification (instance names, affected items, durations)
- Delivery Logs — Searchable history of all dispatched notifications with delivery status
- Rule-Based Engine — Define cleanup rules using 20+ condition types: age, size, rating, genre, tag, quality, watched status (Plex/Tautulli), request status (Seerr), and more
- Approval Queue — Dry-run evaluation presents candidates for human review before deletion
- Scheduled Execution — Automated runs with configurable intervals
- Audit Logging — Complete history of cleanup actions with item details and rule matches
- Missing Content Search — Automatically search for missing movies, episodes, albums, and books
- Quality Upgrades — Find better quality versions of existing content
- Per-Instance Config — Enable/disable and configure search intervals, batch sizes, and filters per instance
- Rate Limiting — Configurable hourly API caps to prevent abuse
- Activity Logging — Track all automated search activity with detailed history
- Automated Queue Management — Remove stalled, slow, or problematic downloads based on configurable rules
- Strike System — Warn items before removal with configurable strike thresholds
- Dry Run Mode — Preview what would be cleaned without making changes
- Auto-Import — Automatically import completed downloads that are stuck in queue
- Multi-Auth Support — Password, OIDC (Authelia/Authentik/Keycloak), or Passkeys (WebAuthn)
- Encrypted Storage — All API keys encrypted at rest (AES-256-GCM)
- Session Management — Secure HTTP-only cookie sessions with multi-device support
- Incognito Mode — Hide sensitive data (media titles, usernames, server names, URLs) across the entire UI — disguises everything as Linux ISO downloads for safe screenshotting
- Zero-Config Security — Auto-generated encryption keys on first run
- Backup & Restore — Automated encrypted backups with configurable retention and scheduling
- Tag Organization — Organize instances with custom tags and storage groups
- Multi-Instance — Manage unlimited instances across all supported services
- System Settings — Configurable ports, listen address, and application restart from the UI
docker run -d \
--name arr-dashboard \
-p 3000:3000 \
-v /path/to/config:/config \
-e PUID=1000 \
-e PGID=1000 \
--restart unless-stopped \
khak1s/arr-dashboard:latestservices:
arr-dashboard:
image: khak1s/arr-dashboard:latest
container_name: arr-dashboard
environment:
- PUID=1000 # Set to your user ID (run `id -u` on host)
- PGID=1000 # Set to your group ID (run `id -g` on host)
volumes:
- ./config:/config
ports:
- 3000:3000
restart: unless-stoppedThen start:
docker-compose up -d- Open
http://your-server-ip:3000 - Create your admin account on first run
- Add your Sonarr/Radarr/Prowlarr instances in Settings
- Optionally connect Plex, Tautulli, and Seerr
- Start managing your media!
| Service | Support | Features |
|---|---|---|
| Sonarr | Full | Queue, calendar, library, history, statistics, hunting, cleanup |
| Radarr | Full | Queue, calendar, library, history, statistics, hunting, cleanup |
| Prowlarr | Full | Indexer management, global search |
| Lidarr | Full | Queue, calendar, library, history, statistics, hunting |
| Readarr | Full | Queue, calendar, library, history, statistics, hunting |
| Plex | Full | Now playing, on deck, recently added, watch history, library enrichment |
| Tautulli | Full | Activity monitoring, watch statistics, bandwidth analytics |
| Seerr | Full | Requests, users, issues, notification agents |
| Tag | Description |
|---|---|
latest |
Latest stable release |
2.11.0 |
System Pulse — unified health attention feed across all services |
2.10.1 |
Quality filter fix |
2.10.0 |
Library Intelligence, TRaSH scheduled sync, quality upgrades, grab detection |
2.9.3 |
Lidarr stats fix (#209 follow-up), Claude Code tooling, GitHub templates |
2.9.2 |
Bug fixes (#207 #208 #209), architecture improvements, 28 dependency updates |
2.9.1 |
Security patches, complete incognito mode, TRaSH cloning improvements |
2.9.0 |
Plex/Tautulli/Seerr integration, notifications, library cleanup, naming deployment |
2.8.5 |
Bug fixes: queue cleaner, statistics, dropdowns, logging, Docker PostgreSQL |
2.8.4 |
Harden quality definition reset with multi-strategy fallback |
2.8.3 |
TRaSH Guides PR #2590 compatibility (include semantics + quality ordering) |
2.8.2 |
Hotfix for Docker startup crash in v2.8.1 |
2.8.1 |
Security hardening, quality size presets & deep refactoring |
2.8.0 |
Full Lidarr & Readarr support + Queue Cleaner auto-import |
2.7.4 |
Configurable password policy for passphrase support |
2.7.3 |
Queue Cleaner, Prefer Season Packs & improved error handling |
2.7.2 |
Custom upstream repos, user custom formats & bug fixes |
2.7.1 |
TRaSH template persistence fix + Next.js security patch |
2.7.0 |
Major stack upgrade (Node 22, Next.js 16, Prisma 7, Tailwind 4) |
2.5.0 |
Breaking: Volume path changed to /config (LinuxServer.io convention) |
Upgrading from 2.4.x? See RELEASE_NOTES.md for migration instructions. The volume mount path changed from
/app/datato/config.
The application auto-generates all necessary security keys on first run. No environment variables needed for basic operation.
The /config volume contains critical data that must be preserved:
| File | Purpose |
|---|---|
prod.db |
SQLite database with all your settings, users, and configurations |
secrets.json |
Auto-generated encryption keys for API credentials |
backups/ |
Automated database backups (when enabled) |
Important: If
secrets.jsonis lost, encrypted API keys cannot be decrypted. You would need to re-enter all service API keys. Always preserve your entire/configvolume when upgrading or migrating.
| Variable | Default | Description |
|---|---|---|
PUID |
911 |
User ID for file permissions (LinuxServer.io style) |
PGID |
911 |
Group ID for file permissions (LinuxServer.io style) |
DATABASE_URL |
file:/config/prod.db |
Database connection string (SQLite or PostgreSQL) |
SESSION_TTL_HOURS |
24 |
Session expiration time in hours |
SESSION_COOKIE_NAME |
arr_session |
Name of the session cookie |
PASSWORD_POLICY |
strict |
strict (uppercase, lowercase, number, special char) or relaxed (8+ chars, passphrase-friendly) |
API_RATE_LIMIT_MAX |
200 |
Max requests per minute |
API_CORS_ORIGIN |
localhost:3000,3001 |
Allowed CORS origins (comma-separated) |
BACKUP_PASSWORD |
- | Password for encrypted backups (optional) |
WEBAUTHN_RP_NAME |
Arr Dashboard |
Passkey display name |
WEBAUTHN_RP_ID |
localhost |
Passkey relying party ID (your domain, no protocol) |
WEBAUTHN_ORIGIN |
http://localhost:3000 |
Passkey origin URL (full URL with protocol) |
LOG_LEVEL |
info |
Logging level (debug, info, warn, error) |
GITHUB_TOKEN |
- | Optional GitHub token for TRaSH Guides (higher rate limits) |
Note: Set
PUIDandPGIDto match the owner of your config directory. Runid -uandid -gon your host to find your user/group IDs. This follows the LinuxServer.io convention.
Community Applications template available. See the wiki for detailed instructions.
Use Docker Compose method with appropriate volume paths.
By default, Arr Dashboard uses SQLite stored at /config/prod.db. For larger deployments:
docker run -d \
--name arr-dashboard \
-p 3000:3000 \
-v /path/to/config:/config \
-e DATABASE_URL="postgresql://user:password@hostname:5432/arr_dashboard" \
khak1s/arr-dashboard:latestThe schema is automatically synchronized on startup. You can switch between SQLite and PostgreSQL at any time — create a backup first (Settings → Backup).
arr-dashboard/
├── apps/
│ ├── api/ # Fastify 4 API server (port 3001)
│ └── web/ # Next.js 16 frontend (port 3000)
├── packages/
│ └── shared/ # Shared Zod schemas & TypeScript types
└── docker/
└── start-combined.sh # Single-container startup
| Layer | Technology |
|---|---|
| Frontend | Next.js 16 (App Router), React 18, TailwindCSS 4, Tanstack Query |
| Backend | Fastify 4, Prisma 7 |
| Database | SQLite (default), PostgreSQL |
| Auth | Session-based with Argon2id password hashing |
| Encryption | AES-256-GCM for secrets at rest |
| Validation | Zod schemas (shared between frontend/backend) |
| Build | Turbo, pnpm 10+ workspaces |
| Runtime | Node.js 22+ |
- Node.js 22+
- pnpm 10+
git clone https://github.com/Kha-kis/arr-dashboard.git
cd arr-dashboard
pnpm install
pnpm run devThe API runs at http://localhost:3001 and the web app at http://localhost:3000.
pnpm run build
docker build -t arr-dashboard:local .cd apps/api
pnpm run db:push # Sync schema to database
pnpm run db:generate # Regenerate Prisma client- Use HTTPS — Set up a reverse proxy (nginx, Caddy, Traefik) with TLS
- Keep Private — Don't expose *arr instances directly to the internet
- Regular Backups — Use the built-in encrypted backup feature
- Strong Passwords — Use unique, strong passwords for all services
- Keep Updated — Pull latest Docker images regularly
docker run -d \
--name arr-dashboard \
--security-opt=no-new-privileges:true \
--cap-drop=ALL \
-p 3000:3000 \
-v /path/to/config:/config \
-e PUID=1000 \
-e PGID=1000 \
khak1s/arr-dashboard:latestserver {
listen 443 ssl http2;
server_name dashboard.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}docker-compose pull
docker-compose up -d| Issue | Solution |
|---|---|
| Port in use | Change port mapping: -p 8080:3000 |
| Database locked | Ensure only one instance is running |
| Connection refused | Check container logs: docker logs arr-dashboard |
| Login issues | Reset password: pnpm run reset-admin-password |
| Blank page after update | Clear browser cache or hard refresh |
- Check container logs:
docker logs arr-dashboard - Review existing issues
- Open a new issue with your version number, deployment method, and error messages
| Guide | Description |
|---|---|
| Quick Start | 5-minute installation guide |
| Dashboard | Queue, statistics, Plex widgets, activity |
| Library & Search | Browse library, search indexers, manage content |
| Calendar & History | Upcoming releases and download history |
| Statistics | Aggregated health and library metrics |
| Discover | TMDB trending, popular, and upcoming content |
| Plex & Tautulli | Now playing, analytics, watch history |
| Seerr | Request management and approval |
| Notifications | Discord, Telegram, Email, and 5 more channels |
| Library Cleanup | Rule-based cleanup with approval workflow |
| Queue Cleaner | Automated queue management |
| TRaSH Guides | Quality profiles, custom formats, naming schemes |
| Naming Schemes | TRaSH naming convention deployment |
| Hunting | Automated content search |
| Lidarr & Readarr | Music and book management |
| Settings | Services, auth, appearance, system config |
| Authentication | Password, OIDC, and Passkey setup |
| Security Best Practices | Hardening and deployment recommendations |
| Incognito Mode | Hide sensitive data for screenshots |
| Environment Variables | Complete configuration reference |
| Backup & Restore | Encrypted backup system |
| Unraid Deployment | Unraid-specific instructions |
| Troubleshooting | Common issues and solutions |
| FAQ | Frequently asked questions |
For Contributors: See CLAUDE.md for technical architecture and development guide.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - see LICENSE for details.
- Sonarr / Radarr / Prowlarr / Lidarr / Readarr — The *arr stack
- Plex / Tautulli — Media server analytics
- Seerr — Media request management
- TRaSH Guides — Quality profile recommendations
- TMDB — Movie and TV show metadata
Made with love for the self-hosted community














