One interface for your entire self-hosted media library — movies, shows, music, books, games, and videos, across all your existing services. Nexus doesn't replace Jellyfin / Plex / Calibre / whatever you already run — it sits on top and gives you one homepage, one search, one player, one set of stats.
Status: public beta. The playback path for Jellyfin + Plex + Invidious works, and the core browse/search/discovery surface is solid. Expect rough edges around Calibre UI polish, some settings pages, and the Collections/Watchlist feature which isn't merged yet. File a bug with
Cmd+Alt+Bfrom any page — it opens a prefilled GitHub issue. See What's not ready yet below.
Nexus connects to your existing media services and brings them together into a single interface. It doesn't replace your media server, download manager, or library tools — it sits on top of them and gives you one place to browse, play, discover, and manage everything.
You configure your services. Nexus handles the rest.
Self-hosters running multiple media services who want:
Unified media experience — Browse and play movies, shows, music, books, games (via in-browser emulation), live TV, and privacy-respecting video all from the same interface.
Smart discovery — Personalized recommendations, trending content, upcoming releases calendar, genre/network browsing, and cross-media franchise pages. Discover content you didn't know was in your library.
Cross-service intelligence — Continue watching across all media types. Quality dashboards. Subtitle management. Annual wrapped stats. Features that only work because Nexus sees everything.
Per-user accounts — Each user links their own service credentials. Your library, your recommendations, your stats. Admin controls for provisioning and management.
Adapter architecture — Adding support for a new service is one file and one line of code. The adapter handles all service-specific logic; Nexus handles everything else.
| Service | Status | What it provides |
|---|---|---|
| Jellyfin | ✅ stable | Media server — movies, shows, music, live TV |
| Plex | ✅ beta | Media server — movies, shows, music (playback path stabilized in v0.1.0-beta.2) |
| Invidious | ✅ stable | Privacy-respecting YouTube alternative (transcode pipe via Rust stream-proxy) |
| Calibre-Web | ✅ beta | Book library — OPDS browse, search, formats, in-browser reader. UI polish ongoing |
| RomM | ✅ stable | Retro game ROM management with in-browser emulation |
| Overseerr / Seerr | ✅ stable | Media requests and TMDB-powered discovery |
| Radarr / Sonarr / Lidarr | ✅ stable | Calendar, queue, quality profiles |
| Bazarr | ✅ stable | Subtitle management, sync, translation |
| Prowlarr | ✅ stable | Indexer management and stats |
| StreamyStats | ✅ stable | ML-powered recommendations and analytics |
New adapters can be added by contributors without modifying any existing code. See CONTRIBUTING.md for the adapter development guide.
mkdir nexus && cd nexus
wget https://raw.githubusercontent.com/PetalCat/Nexus/main/docker-compose.yml
wget https://raw.githubusercontent.com/PetalCat/Nexus/main/.env.example -O .env
docker compose up -d
Visit http://localhost:8585, create your admin account on the /welcome wizard, and add your services through Settings → Services.
On first boot Nexus auto-generates an AES-256 key at /app/data/.nexus-encryption-key (inside the volume) to encrypt stored service passwords. Back up the nexus-data volume — losing the key invalidates every linked credential. For env-var-managed key rotation set NEXUS_ENCRYPTION_KEY explicitly in .env (run openssl rand -hex 32).
git clone https://github.com/PetalCat/Nexus.git && cd nexus
cp .env.example .env
pnpm install
pnpm build
PORT=8585 node build/index.js
All service connections are configured through the web UI after first-run setup.
| Variable | Default | Description |
|---|---|---|
DATABASE_URL |
./data/nexus.db |
Path to SQLite database |
PORT |
8585 |
HTTP port |
ORIGIN |
http://localhost:8585 |
Public URL (required behind a reverse proxy) |
NEXUS_ENCRYPTION_KEY |
auto-generated | 32-byte key (64 hex or base64) for service credential encryption |
NEXUS_TRUST_PROXY |
0 |
Set to 1 behind a reverse proxy to honor X-Forwarded-For |
NEXUS_TELEMETRY_DISABLED |
unset | Set to 1 to disable server-side storage of client crash reports |
See .env.example for the full list including rate-limiting, subtitle size caps, and cache tuning.
Honest list so you know what to expect before installing:
/books UI is getting a rewrite. Books render and open, detail pages work; layout will improve./welcome wizard plus the adapter walkthroughs in CONTRIBUTING.md are it for now.NEXUS_TELEMETRY_DISABLED=1). No Sentry/Glitchtip wiring yet; planned for post-beta.From any page in Nexus: Cmd+Alt+B (or Ctrl+Alt+B) opens a bug report dialog. It auto-fills the URL, your browser, the build version, and any JS errors caught in the last minute, then opens a prefilled GitHub issue in a new tab — you review + click Submit.
You can also file issues directly: https://github.com/PetalCat/Nexus/issues/new. For open-ended questions or feature ideas, use Discussions instead.
Active development, public beta. Current release: see the badge above. Releases are tagged vX.Y.Z-beta.N and published to ghcr.io/petalcat/nexus for both linux/amd64 and linux/arm64.
See ROADMAP.md for milestone tracking.
This project is built with heavy AI assistance (Claude Code). All code is reviewed, tested, and maintained by humans. See CONTRIBUTING.md for AI usage policy and contribution guidelines.
See CONTRIBUTING.md for development setup, adapter guide, and contribution guidelines.
AGPL-3.0 — see LICENSE.
This project is built with AI assistance (Claude Code, Codex). Copyright applies to human-authored and human-directed portions under current law. See CONTRIBUTING.md for details.