Your books and comics, looked after.

Shelvarr is a self-hosted library in the *arr mould. It scans in the ebooks and comics you already have, matches their metadata, shows you what's missing — and for comics, goes and gets it.

The Shelvarr home screen, with books and comics in progress

Everything in one place

One server for the whole household's reading: books, comics, and where each of you is up to.

Books

  • Scans epub, pdf, mobi, azw and azw3.
  • Hardcover metadata, matched automatically and fixable by hand.
  • Series and authors, with bibliographies from OpenLibrary showing what you're missing.
  • Tidy files: rename to a template, find duplicates.

Comics

  • ComicVine metadata for every volume and issue.
  • Downloads from GetComics that resume, retry and fall back to other mirrors.
  • Adopts an existing library, folder by folder.
  • Recurring jobs to refresh metadata and fetch what's new.

Reading

  • An EPUB reader in the browser.
  • Your own place in every book and issue, even on a shared server.
  • Stackarr for Android, with offline downloads.

Running it

  • One Docker container and a SQLite database.
  • No passwords: people sign in with an emailed code.
  • Diagnostics over MCP, so an AI assistant can read the logs with you.

A quick tour

Shown with a demo library of public-domain novels and Golden Age comics.

Your library, with covers

Every book Shelvarr has scanned, with its metadata matched from Hardcover. Search it, filter by library, and fix a bad match in two clicks.

The book library

Read in the browser

Open an EPUB and pick up where you left off. Your place is yours: two people can be halfway through the same book without moving each other's bookmark.

Reading an EPUB in the browser

Know what you're missing

Series line up in order, and every author's bibliography shows what's on your shelf, what isn't, and what you've asked Shelvarr to look out for.

An author's bibliography, marked owned, missing or wanted

Comics, end to end

Add a volume from ComicVine and Shelvarr creates its folder, lists every issue, and adopts the files already there. The count on each cover is how many issues you have.

The comic library

Downloads that don't give up

Search for missing issues and Shelvarr queues the releases that cover them. A dead link falls through to the next mirror, a rate-limited host is retried later, and a restart picks up where the download left off.

The comic download queue

Stackarr, for your phone

The companion Android app for Shelvarr. Sign in the same way — an emailed code — and your whole library is in your pocket.

  • Download anything and read it with no signal at all.
  • EPUB, PDF and comic readers, built in.
  • Your place follows you between the app and the browser.
  • Keeps itself up to date from GitHub Releases — no Play Store needed.
Download the APK
Stackarr's home screen, with comics in progress
Reading a comic in Stackarr
Reading an EPUB in Stackarr
Stackarr's book library

Install

Shelvarr runs as a single Docker container.

# docker-compose.yml
services:
  shelvarr:
    image: ghcr.io/markcipolla/shelvarr-web:latest
    container_name: shelvarr
    ports:
      - "3000:3000"
    volumes:
      - shelvarr_data:/app/data
      - /path/to/ebooks:/libraries/ebooks:rw
      - /path/to/comics:/libraries/comics:rw
    environment:
      # The owner of your library folders: `id -u` and `id -g`
      - PUID=1000
      - PGID=1000
      - TZ=Australia/Melbourne
    restart: unless-stopped

volumes:
  shelvarr_data:
  1. docker compose up -d, then open http://localhost:3000. The first visit creates your admin account.
  2. Settings → Metadata Sources: add a Hardcover token for books and a ComicVine key for comics.
  3. Libraries: add /libraries/ebooks and scan it.
  4. Settings → Comics: add /libraries/comics as a root folder, then add volumes or adopt the ones already there.
  5. Everything else is in the README.