A self-hosted dashboard for your Jellyfin server. See who is watching, keep full play history, dig into statistics and get push notifications on your phone.
Jellydash is a monitoring dashboard for Jellyfin. If you know Tautulli from the Plex world, this is that idea, built for Jellyfin. It runs in Docker next to your server and answers the questions you actually care about:
- Who is watching right now, and is it transcoding?
- What did people watch this week?
- Which shows and movies are the most popular on my server?
- Did someone just request something new in Jellyseerr?
It's supposed to be lightweight, without too much bloat and (hopefully) nice looking!
It also works as a PWA, so you can install it on your phone like a real app. With notifications turned on, your phone buzzes the moment someone hits play. Alerts can go through Telegram, Pushover, Discord or Web Push, whatever you already use. I may work on open-source Android app in the future.
The project is very young and in very active development.
| History | Jellyseerr requests |
|---|---|
![]() |
![]() |
| Trending and Most Watched | Statistics |
|---|---|
![]() |
![]() |
Installed as an app on Android
-
Now Playing. Live cards for every active stream: artwork, user, quality, progress and the playback method (Direct Play, Remux or Transcode, including the reason why). Live TV channels from tuners like Tunarr show up too, with real program progress and a red on-air badge.
-
History. Every play gets recorded by a background poller, so history is complete even when nobody has the dashboard open. Search it, filter by user or library, and enjoy the poster art.
-
Statistics. Watch time trends, top users, clients, codecs and transcode reasons. There is a Trending strip for what is hot right now, and all-time Most Watched charts for both shows and movies.
-
Libraries. An overview of all your libraries with item counts and type breakdowns. New libraries are picked up automatically.
-
Jellyseerr requests (optional). The latest requests with their current status, plus a push notification when a new request comes in. The page only appears once you connect your Jellyseerr instance.
-
Notifications (optional). "Anna started watching The Office" straight to your phone or desktop, even with the app closed. Delivered through Telegram, Pushover, a Discord webhook, Web Push, or any combination of them.
-
Optional login. Off by default, because on a trusted home network it just gets in the way. One env var turns it on. Recommended if you expose Jellydash to the internet. I recommend using Tailscale for exposing.
-
Modules. Jellydash can load drop-in modules that add whole new pages to the dashboard. See docs/MODULES.md if you want to build your own.
You need Docker with the compose plugin. No cloning needed, just grab two files into an empty folder:
mkdir jellydash && cd jellydash
curl -LO https://raw.githubusercontent.com/themartz90/jellydash/main/docker-compose.yml
curl -L -o .env https://raw.githubusercontent.com/themartz90/jellydash/main/.env.example
# edit .env, at minimum: JELLYFIN_URL, JELLYFIN_API_TOKEN, DB_PASS
docker compose up -dOpen http://your-host:8080 and you are done. The database schema creates itself on first run, there is nothing to import. A MariaDB container is bundled, and if you want to use your own database server or mount modules, copy docker-compose.override.example.yml to docker-compose.override.yml and adjust it there.
For setting up notifications, check the section down below
docker compose pull && docker compose up -dPrefer building the image yourself instead of pulling it from GHCR?
git clone https://github.com/themartz90/jellydash.git
cd jellydash
cp .env.example .env
# edit .env as above
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildUpdating then means git pull and running the same command again.
Jellydash can ping you when someone starts playing and when a new Jellyseerr request comes in. There are four ways to get the alerts, pick whatever you already use. Every configured channel gets every alert, and a channel is on as soon as its values are filled in .env.
Two things that apply to all channels:
- Set
APP_URL=https://your-dashboard.example.comif you want alerts to link back to your dashboard. - You can exclude users from triggering alerts (usually yourself) in the Settings page inside the app.
Test your setup any time, it reports each channel separately:
docker compose exec app php bin/console.php push:test- Message @BotFather, send
/newbotand answer its two questions. It gives you a bot token. - Open a chat with your new bot and send it any message (bots cannot message you first).
- Visit
https://api.telegram.org/bot<YOUR_TOKEN>/getUpdatesin a browser and find"chat":{"id":...}in the response. That number is your chat id! Or you can also use IDbot for your id.
TELEGRAM_BOT_TOKEN=123456789:your-token
TELEGRAM_CHAT_ID=your-chat-idYour User Key is on the pushover.net dashboard. Then create an application there (call it Jellydash) to get an API token.
PUSHOVER_APP_TOKEN=your-app-token
PUSHOVER_USER_KEY=your-user-keyServer Settings > Integrations > Webhooks > New Webhook, pick a channel, copy the webhook URL. No bot needed.
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...The no-third-party option: notifications go straight to your browser or the installed PWA. It needs the dashboard served over HTTPS. Generate a keypair once:
docker compose exec app php bin/console.php push:vapidPaste the two keys into .env, restart, then tap the bell in the app and allow notifications. You get a test notification right away so you know it works.
Set this in .env:
AUTH_ENABLED=true
AUTH_ADMIN_USER=admin
AUTH_ADMIN_PASSWORD=pick-a-strong-oneThe password needs at least 8 characters. The admin user is created automatically on the next start. More users can be added with docker compose exec app php bin/console.php user:add.
- The CPU and RAM numbers in the sidebar come from the host the container runs on.
- iOS only supports Web Push for apps installed to the home screen, and only on iOS 16.4 or newer. That is an Apple rule, not mine 👀. Telegram and Pushover alerts work on any iPhone.
- Brave blocks Web Push by default. It works after enabling "Use Google services for push messaging" in Brave's privacy settings.
- Edge hides Web Push permission prompts behind a small bell icon in the address bar ("quiet notification requests"). If enabling notifications keeps snapping back to off, allow notifications for the site there, and check that Windows itself allows notifications from Edge.
- Trending and Most Watched can exclude libraries you pick (Settings page). Useful for libraries full of temporary stuff.
The Jellydash mascot is based on a jellyfish icon by Magnific from Flaticon, modified for this project.
The code is licensed under MIT. The mascot original icon is covered by the Flaticon license above, not MIT.






