Skip to content

v2.1.0

Latest

Choose a tag to compare

@joshdev8 joshdev8 released this 07 Aug 20:59

Feature release. Adds the AutoPlexx Command Center — a single dashboard over the whole stack, and the first application this repo ships itself — plus optional Jellyfin as a drop-in alternative to Plex. No breaking changes; existing deployments upgrade with docker compose pull && docker compose up -d.

One thing to check before you upgrade: the dashboard publishes port 8090 on all interfaces by default and ships no authentication. If you front this stack with an authenticating reverse proxy, set DASHBOARD_BIND=127.0.0.1 in .env — otherwise the published port lets anyone on your LAN reach the dashboard and skip that proxy. Everything else is safe by default.

AutoPlexx Command Center

A unified dashboard at http://localhost:8090 (DASHBOARD_PORT to change it), in three views:

  • Command Center — what's streaming now, active downloads with progress and ETA, pending Seerr requests, the next episodes due, and a merged activity feed of recent grabs and imports. Above them, CPU / memory / storage / network gauges from Prometheus and an N / M up health tile.
  • Launcher — every service in the stack as a tile with live status, linking to its own UI.
  • Setup — where each integration stands, and the one concrete step for anything that isn't connected.

No API keys to paste. Each service already writes its own key to a config file — config.xml for Sonarr/Radarr/Prowlarr, config.ini for Tautulli, settings.json for Seerr, config/config.yaml for Bazarr — and the dashboard reads those through read-only /discover mounts. Discovery re-runs while the dashboard is running, so on a clean install each panel lights up by itself within a minute of the service behind it starting. No restart, no wizard.

It does not mount the Docker socket. Container status comes from a docker-socket-proxy sidecar running with CONTAINERS=1 and everything else off, which permits GET /containers/json and denies the rest. :ro on a socket only affects the file node — it does not make the Docker API read-only — so a direct mount would have been a second root-equivalent exposure alongside Portainer's.

The dashboard is read-only: it issues no mutating calls to any service. The Request button deep-links to Seerr rather than posting, so requests go through Seerr's own accounts and approval rules.

Images are published multi-arch (amd64 + arm64) to ghcr.io/joshdev8/autoplexx-dashboard, now pinnable at :v2.1.0. docker-compose.yml declares both image: and build:, so you pull by default and can build from source if you'd rather.

Jellyfin as an optional Plex alternative

docker-compose.yml now carries a fully-formed but commented-out jellyfin: service directly under plex: (host network, :8096, no claim token). To switch, per the new README section:

  1. docker compose rm -sf plexfirst, before editing the file. A commented-out service is invisible to compose, so up -d would leave the old container running and you'd have both media servers indexing one library.
  2. Comment out plex:, uncomment jellyfin:.
  3. docker compose up -d.

Not everything follows you across. Tautulli, Watchlistarr, Kometa and Maintainerr are Plex-API-specific and won't work against Jellyfin — and since the dashboard's now-playing and poster panels read through Tautulli, those are Plex-bound too. Seerr does support a Jellyfin backend, but only after you re-point it in Settings → Media Server; the compose swap alone doesn't move it. Radarr, Sonarr, Prowlarr, Bazarr and Transmission are unaffected. The README carries the full compatibility table.

Fixes

  • depends_on: plex removed from Tautulli — compose rejects a project whose depends_on names an undefined service, so commenting out plex: made every compose command fail for all 25 services, down included. It bought nothing anyway: Plex is host-network and Tautulli is on a bridge network, so compose could neither link nor order them.
  • Bazarr's API key is read from the file Bazarr actually writes — it's Python, not .NET, and never writes a config.xml. Treating it as an *arr left the integration permanently waiting while advising you to start a Bazarr that was already running. Its own key is auth.apikey specifically; Bazarr stores an apikey under a dozen sections including radarr: and sonarr:.
  • A YAML comment is no longer parsed as part of that keyapikey: abc123 # generated key previously authenticated with the comment attached.
  • Service tiles no longer link to services that aren't installed, and a temporary polling blip no longer briefly re-links them.
  • A failed refresh keeps the last good data on screen instead of blanking the panel.
  • Every failing integration names its actual fix rather than a generic error — a rejected credential and an unreachable host give different advice.
  • LinuxServer images pull from lscr.io instead of Docker Hub, avoiding Docker Hub's anonymous rate limits.
  • Dependency bumps: brace-expansion, fast-uri.

New environment variables

Both optional, both defaulted in compose — existing .env files keep working untouched.

  • DASHBOARD_PORT — host port for the dashboard (default 8090).
  • DASHBOARD_BIND — host interface to publish on (default 0.0.0.0). See the note at the top.

Full Changelog: v2.0.1...v2.1.0