Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jellydash

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.madebymartz.com


What is Jellydash?

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.

Screenshots

Now Playing

History Jellyseerr requests
History Jellyseerr
Trending and Most Watched Statistics
Trending Statistics

Jellydash installed as a PWA on Android

Installed as an app on Android

More screenshots

Clients

Features

  • 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.

Quick start

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 -d

Open 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

Updating

docker compose pull && docker compose up -d

Building from source

Prefer 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 --build

Updating then means git pull and running the same command again.

Notifications

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.com if 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

Telegram

  1. Message @BotFather, send /newbot and answer its two questions. It gives you a bot token.
  2. Open a chat with your new bot and send it any message (bots cannot message you first).
  3. Visit https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates in 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-id

Pushover

Your 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-key

Discord

Server Settings > Integrations > Webhooks > New Webhook, pick a channel, copy the webhook URL. No bot needed.

DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...

Web Push (browser and the installed app)

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:vapid

Paste 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.

Optional login

Set this in .env:

AUTH_ENABLED=true
AUTH_ADMIN_USER=admin
AUTH_ADMIN_PASSWORD=pick-a-strong-one

The 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.

Good to know

  • 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.

Credits

The Jellydash mascot is based on a jellyfish icon by Magnific from Flaticon, modified for this project.

License

The code is licensed under MIT. The mascot original icon is covered by the Flaticon license above, not MIT.

About

A self-hosted dashboard for Jellyfin. Live sessions, play history, statistics and push notifications, installable as an app.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages