Mark CipollaLogo

Mark Cipolla

The *arr apps do a great job of looking after a self-hosted media library, but books and comics never had a home that did it all. I wanted one place to catalogue the ebooks and comics I already have, see what's missing, and read them.

Shelvarr

TypeScriptNext.jsExpoReact NativeSQLiteDockerMCP
WebsiteGitHub

Shelvarr is a self-hosted library manager for ebooks and comics, in the *arr mould. Point it at your existing folders and it scans them in, matches their metadata, groups them into series, shows you what's missing, and files everything under a naming scheme you choose.

For books, it reads EPUB, PDF, MOBI, AZW and AZW3 files and pulls covers, descriptions, series and ISBNs from Hardcover, with a way to fix the match by hand when it's wrong. Each author's bibliography comes from OpenLibrary, so you can see what you own and what you don't, and duplicates are found by file hash.

For comics, it goes further. Volumes and issues come from ComicVine, and Shelvarr searches for missing issues itself, queues the downloads, resumes them after a restart, falls back to other mirrors when a link dies, and files what it fetches under your naming template. Nightly jobs keep the metadata fresh, and an existing comic library can be adopted folder by folder.

The Shelvarr home screen, with books and comics in progress

You can read in the browser with the built-in EPUB reader. Accounts don't have passwords (you sign in with a code sent to your email), and everyone on the server keeps their own place in what they're reading.

Stackarr is the companion Android app, built with Expo. It brings the library to your phone with offline downloads and EPUB, PDF and comic readers. It's sideloaded rather than shipped through the Play Store, so it checks GitHub Releases on launch and updates itself.

Stackarr on Android: the book library, home, the comic reader, the EPUB reader and a comic volume

There's also an optional, read-only diagnostics endpoint over MCP, which exposes the server's logs and background jobs so an AI assistant like Claude Code can help debug it.

It runs as a single Docker container backed by SQLite. Use the ghcr.io/markcipolla/shelvarr-web:latest image with docker compose up -d, mount your library folders, and add a Hardcover token and a ComicVine key in Settings.

Mark lives and works on unceded Wurundjeri land in Naarm / Melbourne, Australia, and acknowledges the traditional custodians of the land on which he lives, paying respects to elders past and present, recognising the resilience, strength and pride of the Aboriginal and Torres Strait Islander communities.