jack lets you and your friends share media libraries with each other through the *arr stack you already run. You point Radarr/Sonarr at jack, search like you would on any indexer, and when a friend has the movie or episode you want, jack pulls it straight from their server into your library — no public trackers, no BitTorrent swarm, just a private peer-to-peer bridge between your media servers.
Full documentation lives at jack.roz.ninja.
Two images are published to GitHub Container Registry on every push to main —
the backend (ghcr.io/roziscoding/jack:main) and the management UI
(ghcr.io/roziscoding/jack-ui:main) — so you don't need to clone the repo. Grab
examples/docker-compose.yml and
examples/config.jsonc, drop them in a folder, then:
# 1. Create your config from the template
mkdir -p config
cp config.jsonc config/config.jsonc # the template you downloaded
$EDITOR config/config.jsonc # fill in your servers and peers
# 2. Set a management key (gates the management API + the UI's access to it)
echo "JACK_MANAGEMENT_KEY=$(openssl rand -base64 32)" > .env
# 3. Pull and run
docker compose up -dThe management UI comes up at http://localhost:3000. For volume mounts, networking, and the path gotchas that make grabs import correctly, follow the getting started guide.
- What is jack? — concepts and roles
- Getting started — full setup walkthrough
- How it works — search, download, and serving flows
- Peering — sharing with friends and API keys
- Management UI — the web console
- Troubleshooting — common failures and fixes
- Configuration and environment variables — full reference
- Peer API and management API — API reference
See CONTRIBUTING.md for the development setup, project layout, and how to run tests and lint. Found a vulnerability? Report it privately as described in SECURITY.md.
jack costs nothing to run and takes no donations — if it's been useful to you, FUNDING.md tells you what I'd love instead.