Installation

JellyPass runs as one container, published on GitHub Container Registry as ghcr.io/nicklongmore86/jellypass.

Docker Compose quick start

  1. Make a folder and download the Compose file and the example settings:

    mkdir jellypass && cd jellypass
    curl -LO https://raw.githubusercontent.com/nicklongmore86/jellypass/main/compose.yaml
    curl -Lo .env https://raw.githubusercontent.com/nicklongmore86/jellypass/main/.env.example
  2. Create the data folder. The container runs as user node (UID 1000), which must own it:

    mkdir -m 700 data
    sudo chown 1000:1000 data
  3. Edit .env and replace every placeholder. At least JELLYFIN_URL, JELLYFIN_API_KEY, WEBHOOK_TOKEN and ADMIN_TOKEN; see Settings reference. Make the two tokens different long random values:

    openssl rand -hex 32
    openssl rand -hex 32
  4. Pin a release instead of latest, which is rebuilt from the main branch and may hold unreleased changes. In .env, using the newest version from the releases page:

    JELLYPASS_IMAGE=ghcr.io/nicklongmore86/jellypass:X.Y.Z
  5. Start it and check it is up:

    docker compose up -d
    docker compose ps
    curl http://127.0.0.1:8787/health

    /health answers {"status":"ok"} once the process is running. It does not check Jellyfin or Seerr.

The Compose file publishes JellyPass on 127.0.0.1:8787 only, which suits a reverse proxy on the same machine. Change the published address deliberately if Seerr or the proxy must reach it over your network. JellyPass listens on one port, 8787, for everything: the admin site, the webhook and every household address.

First sign-in

  1. Open http://127.0.0.1:8787/admin/ (or the admin address your proxy serves) and sign in with an enabled Jellyfin administrator account. JellyPass checks the password with Jellyfin and keeps only its own session, in memory, for 12 hours.
  2. Run Sync library so the Library tab lists your titles. A sync does not make anything private.
  3. Connect Seerr's webhook.
  4. Create your households, then publish their addresses.

Build from source

Clone the repository and run every command below inside it. The container runs as user 1000, so create the state directory first and give it to that user:

git clone https://github.com/nicklongmore86/jellypass.git
cd jellypass
mkdir -m 700 data
sudo chown 1000:1000 data
cp .env.example .env
# Edit .env.
docker compose -f compose.example.yaml up --build -d

Without Docker: Node.js 22 or later, then, inside the clone, mkdir -m 700 data (owned by the user that runs JellyPass), corepack enable, pnpm install --frozen-lockfile, pnpm build and pnpm start, with the settings in the environment.