Real-time monitoring for Plex, Jellyfin, and Emby. One dashboard for all your servers.
Tracearr is a monitoring platform for Plex, Jellyfin, and Emby. Track streams in real-time, dig into playback analytics, and spot account sharing before it gets out of hand.
Multi-Server Dashboard — Connect Plex, Jellyfin, and Emby to a single interface. No more switching between apps.
Session Tracking — Complete session history: who watched what, when, where, and on what device. Every stream includes geolocation data.
Stream Analytics — See what's transcoding vs direct playing, track bandwidth usage, and see what people actually watch. Codec breakdowns, resolution stats, device compatibility scores. Enhanced IP geolocation includes ASN data, continent, and postal codes.
Library Analytics — Four dedicated pages to understand your media collection:
- Overview — Item counts, storage usage, growth charts over time.
- Quality — Resolution and codec distribution. Track how your 4K vs 1080p ratio changes.
- Storage — Usage predictions, duplicate detection across servers, stale content identification, and ROI analysis (watch hours per GB).
- Watch — Engagement metrics, completion rates, viewing patterns by hour and month, binge detection.
Live TV & Music — Not just movies and shows. Track live TV sessions and music playback across all your servers.
Stream Map — Visualize where your streams originate on a world map. Filter by user, server, or time period.
Sharing Detection — Six rule types flag suspicious activity:
- Impossible Travel — NYC then London 30 minutes later? That's not one person.
- Simultaneous Locations — Same account streaming from two cities at once.
- Device Velocity — Too many unique IPs in a short window signals shared credentials.
- Concurrent Streams — Set limits per user.
- Geo Restrictions — Block streaming from specific countries.
- Account Inactivity — Get notified when accounts go dormant for a configurable period.
Trust Scores — Users earn (or lose) trust based on behavior. Violations drop scores automatically.
Real-Time Alerts — Discord webhooks and custom notifications fire instantly when rules trigger.
Public API — Read-only REST API for third-party integrations. Generate an API key in Settings, then explore endpoints at /api-docs (Swagger UI). Works with Homarr, Home Assistant, or anything that speaks HTTP.
Bulk Actions — Multi-select operations across tables. Acknowledge or dismiss violations in bulk, reset trust scores, enable/disable rules, delete session history.
Data Import — Already using Tautulli or Jellystat? Import your watch history so you don't start from scratch.
Tautulli only works with Plex. Jellystat only works with Jellyfin and Emby. If you run multiple servers, you're stuck with multiple dashboards.
Tracearr handles all three. One install, one interface.
| Tautulli | Jellystat | Tracearr | |
|---|---|---|---|
| Watch history | ✅ | ✅ | ✅ |
| Statistics & graphs | ✅ | ✅ | ✅ |
| Session monitoring | ✅ | ✅ | ✅ |
| Transcode analytics | ✅ | ✅ | ✅ |
| Live TV & Music | ✅ | ✅ | ✅ |
| Account sharing detection | ❌ | ❌ | ✅ |
| Impossible travel alerts | ❌ | ❌ | ✅ |
| Trust scoring | ❌ | ❌ | ✅ |
| Plex support | ✅ | ❌ | ✅ |
| Jellyfin support | ❌ | ✅ | ✅ |
| Emby support | ❌ | ✅ | ✅ |
| Multi-server dashboard | ❌ | ❌ | ✅ |
| IP geolocation | ✅ | ✅ | ✅ |
| Library analytics | ✅ | ✅ | ✅ |
| Public API | ✅ | ✅ | ✅ |
| Import from Tautulli | — | ❌ | ✅ |
| Import from Jellystat | ❌ | — | ✅ |
The supervised image bundles TimescaleDB, Redis, and Tracearr in a single container. Designed for Unraid and intended for bare metal hosts only (not recommended for VMs or nested containers). Requires 2GB+ RAM. Secrets are auto-generated on first run.
docker compose -f docker/examples/docker-compose.supervised-example.yml up -dOpen http://localhost:3000 and connect your Plex, Jellyfin, or Emby server.
For separate services, Portainer deployment, or detailed requirements, see the Docker deployment guide. For full documentation, visit docs.tracearr.com.
| Tag | Description |
|---|---|
latest |
Stable release (requires external DB/Redis) |
supervised |
All-in-one stable release |
next |
Latest prerelease (requires external DB/Redis) |
supervised-next |
All-in-one prerelease |
nightly |
Bleeding edge nightly (requires external DB/Redis) |
supervised-nightly |
All-in-one nightly build |
# All-in-one (easiest)
docker pull ghcr.io/connorgallopo/tracearr:supervised
# Stable (requires external services)
docker pull ghcr.io/connorgallopo/tracearr:latest
# Living on the edge
docker pull ghcr.io/connorgallopo/tracearr:nightlyStandard Docker — Each service runs in its own container:
docker logs tracearr # Application logs
docker logs tracearr-postgres # Database logs
docker logs tracearr-redis # Cache logsSupervised Docker — All services run in one container. View logs in the web UI at /debug (Log Explorer section), or via CLI:
docker exec tracearr cat /var/log/supervisor/tracearr-error.logAvailable log files: tracearr.log, tracearr-error.log, postgres.log, postgres-error.log, redis.log, redis-error.log, supervisord.log
Set LOG_LEVEL=debug for verbose output.
# Install dependencies (requires pnpm 10+, Node.js 22+)
pnpm install
# Start database services
docker compose -f docker/docker-compose.dev.yml up -d
# Copy and configure environment
cp .env.example .env
# Run migrations
pnpm --filter @tracearr/server db:migrate
# Start dev servers
pnpm devFrontend runs at localhost:5173, API at localhost:3000.
| Layer | Tech |
|---|---|
| Frontend | React 19, TypeScript, Tailwind, shadcn/ui |
| Charts | Highcharts |
| Maps | Leaflet |
| Backend | Node.js, Fastify |
| Database | TimescaleDB (PostgreSQL extension) |
| Cache | Redis |
| Real-time | Socket.io |
| Monorepo | pnpm + Turborepo |
TimescaleDB handles session history. Regular Postgres works for a few months, but long query histories kill performance. TimescaleDB is built for time-series data—dashboard stats stay fast because they're pre-computed, not recalculated every page load.
Fastify over Express because it's measurably faster and schema validation catches bad requests before they hit handlers.
Plex SSE — Plex servers stream session updates in real-time via Server-Sent Events. No polling delay, instant detection. Jellyfin and Emby still use polling (they don't support SSE), but Plex sessions appear the moment they start.
tracearr/
├── apps/
│ ├── web/ # React frontend
│ ├── server/ # Fastify backend
│ └── mobile/ # React Native app (coming soon)
├── packages/
│ ├── shared/ # Types, schemas, constants
│ └── translations/ # i18n support
├── docker/ # Compose files
└── docs/ # Documentation
Got questions? Found a bug? Want to contribute?
Or open an issue on GitHub.
Contributions welcome. Please:
- Fork the repo
- Create a feature branch (
git checkout -b feature/thing) - Make your changes
- Run tests and linting (
pnpm test && pnpm lint) - Open a PR
Check the issues for things to work on.
Use the included .vscode/launch.json to debug both server and web apps directly from VS Code.
Run pnpm dev in a terminal to start both apps, then use the "Debug All" configuration to attach the debugger.
v1.5 (current)
- Multi-server Plex, Jellyfin, and Emby support
- Session tracking with full history
- Sharing detection rules
- Real-time WebSocket updates
- Plex SSE for instant session detection
- Discord + webhook notifications
- Interactive stream map
- Trust scores
- Tautulli & Jellystat history import
- Transcode analytics & device compatibility
- Live TV & music tracking
- Stream quality metrics (codec, resolution, bitrate)
- Stream termination
- Library analytics (storage, quality, duplicates, engagement)
- Public REST API with Swagger UI
- Account inactivity detection
- Bulk actions for violations, users, rules, sessions
- Enhanced IP geolocation (ASN, continent, postal code)
v1.6 (next)
- Mobile app (iOS & Android) — in beta
- Rule based automated stream termination
- Account suspension automation
- Email notifications
- Telegram notifier
v2.0 (future)
- Tiered access controls
- Multi-admin support
AGPL-3.0 — Open source with copyleft protection. If you modify Tracearr and offer it as a service, you share your changes.
For Plex, Jellyfin, and Emby admins who want to see what's actually happening.
