What Is JellyStat?
JellyStat is a free, open source statistics and analytics dashboard built specifically for Jellyfin. It tracks playback history, watch time, and library growth, then presents everything through a web dashboard with charts and per-user breakdowns.
If you have ever wanted to know which shows your users actually finish, how much bandwidth your server uses over time, or who is streaming right now without opening the Jellyfin dashboard itself, JellyStat is built for exactly that.
Key Features
| Feature | Description |
|---|---|
| Watch history | Per-user playback history across your entire library |
| Live sessions | Real-time view of who is currently streaming |
| Library statistics | Growth over time, total size, item counts by type |
| Playback analytics | Most watched titles, watch time by day, device breakdown |
| User activity | Individual user statistics and viewing patterns |
| Backup and restore | Built in backup of JellyStat own database |
Unlike a general purpose monitoring tool, JellyStat is purpose built around Jellyfin playback data specifically, which is why its dashboards read closer to a personal analytics service than a generic server monitor.
Requirements Before You Start
- A running Jellyfin server (version 10.8 or later recommended)
- Docker and Docker Compose installed on your host
- Administrator access to your Jellyfin server to generate an API key
- A reverse proxy if you plan to access JellyStat remotely
Step 1: Deploy JellyStat with Docker Compose
services:
jellystat-db:
image: postgres:15
container_name: jellystat-db
environment:
POSTGRES_USER: jellystat
POSTGRES_PASSWORD: change-this-password
POSTGRES_DB: jellystat
volumes:
- ./jellystat-db:/var/lib/postgresql/data
restart: unless-stopped
jellystat:
image: cyfershepard/jellystat:latest
container_name: jellystat
environment:
POSTGRES_USER: jellystat
POSTGRES_PASSWORD: change-this-password
POSTGRES_IP: jellystat-db
POSTGRES_PORT: 5432
JWT_SECRET: change-this-to-a-random-string
ports:
- 3000:3000
volumes:
- ./jellystat/backup-data:/app/backend/backup-data
depends_on:
- jellystat-db
restart: unless-stopped
Replace both placeholder passwords and the JWT secret with strong, unique values before deploying. Then run:
docker compose up -d
Step 2: Connect JellyStat to Your Jellyfin Server
- Open JellyStat at
http://your-server-ip:3000and complete the first run setup wizard. - In Jellyfin, go to Dashboard > API Keys and generate a new key for JellyStat.
- In JellyStat settings, enter your Jellyfin server URL and paste the API key.
- Trigger an initial sync. Depending on the size of your library and existing playback history, the first sync can take a while.
Step 3: Understanding the Dashboard
Once the initial sync finishes, the main dashboard gives you an overview of:
- Total plays and total watch time across your server
- Most watched movies and shows over a selectable time range
- A breakdown of plays by device and by user
- Library size and growth trends
Drilling into an individual user shows their personal watch history and viewing patterns, which is useful both for curiosity and for spotting unusual activity, such as a shared account being used far more heavily than expected.
Step 4: Configure Data Sync
JellyStat syncs data on a schedule rather than fully real time. Check the sync interval in settings and adjust it based on how current you need the dashboard to be. A shorter interval gives fresher data at the cost of slightly more load on your Jellyfin API.
Step 5: Expose JellyStat via Reverse Proxy
If you want to check your statistics away from home, put JellyStat behind the same reverse proxy you already use for Jellyfin, with its own subdomain and valid SSL certificate. Never expose port 3000 directly to the internet without a reverse proxy in front of it.
JellyStat vs Tautulli vs JellyWatch
| JellyStat | Tautulli | JellyWatch | |
|---|---|---|---|
| Platform | Web dashboard | Web dashboard | Android app |
| Built for | Jellyfin | Plex (Jellyfin via fork) | Jellyfin |
| Deployment | Docker container | Docker container | Install from Play Store |
| Best for | Deep playback analytics | Plex admins, detailed graphs | Mobile monitoring on the go |
These tools are not mutually exclusive. A common setup pairs JellyStat for deep desktop analytics with JellyWatch for real-time mobile alerts and session monitoring, since each tool is optimized for a different context.
Backup Considerations
JellyStat stores its data in the PostgreSQL container defined in your Compose file. Back up the jellystat-db volume regularly, the same way you would back up any other database driven service. Losing that volume means losing your entire playback history inside JellyStat, even though your actual Jellyfin library and playback capability are unaffected.
Frequently Asked Questions
Is JellyStat free? Yes, it is free and open source.
Does JellyStat slow down Jellyfin? No. JellyStat reads data through the Jellyfin API on a schedule and does not sit in the playback path, so it has no impact on streaming performance.
Can I run JellyStat on the same machine as Jellyfin? Yes, this is the most common setup. Just make sure the host has enough spare resources for a small PostgreSQL instance alongside Jellyfin.
Does JellyStat support multiple Jellyfin servers? Check the current release notes for multi-server support, as this capability has evolved across versions. Single server setups are fully supported in every version.
Final Thoughts
JellyStat fills a real gap in the Jellyfin ecosystem: detailed, purpose-built playback analytics with almost no configuration overhead once the initial Docker Compose deployment is running. If you want to understand how your library is actually being used, not just whether the server is online, JellyStat is worth the fifteen minutes it takes to set up.
Pair your JellyStat dashboard with real-time mobile monitoring. Download JellyWatch on Google Play - active sessions, push notifications, and server health directly on your Android phone.




Comments
No comments yet. Be the first to share your thoughts.
Leave a comment