# Stump: a self-hosted comics, manga and digital book server with OPDS

> Stump is an MIT-licensed media server written in Rust and TypeScript that serves EPUB, PDF, CBZ and CBR libraries to its own readers and to OPDS clients. It is beta software maintained in one developer's spare time, and the README says so plainly.

**stumpapp/stump** — A free and open source comics, manga and digital book server with OPDS support

- Repository: https://github.com/stumpapp/stump
- Website: https://stumpapp.dev
- Stars: 2,725 · Forks: 167
- Language: TypeScript
- License: MIT
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/stumpapp-stump

## What Stump solves for people with a folder of CBZ and EPUB files

Most comic and manga collections start as a directory tree of archives with inconsistent naming. That works until you want to read on a phone, resume where you stopped on a tablet, or hand a filtered subset to a family member. Stump is a server that indexes those files and exposes them through a web UI, built-in readers, and OPDS feeds. The README lists EPUB, PDF, CBZ/ZIP and CBR/RAR as supported formats, with a built-in reader for each.

The intended audience is self-hosters. The project carries an awesome-selfhosted badge, ships a Docker image under aaronleopold/stump, and the README points at multiple installation methods including Docker and pre-built binaries. If you want a hosted reading service, this is not it. If you want your library to stay on your own disk and be reachable over your own network, the shape of the project fits.

The feature list also covers ground beyond bare file serving: multi-user accounts with permissions and age restrictions, OIDC authentication, annotations and highlights for EPUB, theming, and sync integrations for Kobo and KoReader. Those are the features that turn a file index into something a household can share.

## Rust server, React client, and a GraphQL boundary between them

The repository is a monorepo managed with both cargo workspaces and yarn workspaces, and the README lays out the layout. The Axum server lives in apps/server. The web UI served by that server is in apps/web. A Tauri desktop wrapper is in apps/desktop, and a React Native app is in apps/expo. Shared internals such as file processing sit in core/, with supporting Rust crates under crates/ for migrations, models, GraphQL and integrations.

The technology choices are visible in the manifests. The root Cargo.toml pins axum 0.8.6, async-graphql 7.2.1 with the axum integration, SeaORM for database access, apalis with apalis-cron for background jobs, and lettre for SMTP. The workspace sets rust-version to 1.97.1. On the TypeScript side, package.json declares a private monorepo named @stump/monorepo at version 0.1.7, with lerna scripts per app.

That split matters when you evaluate the project. The API surface is GraphQL rather than a hand-rolled REST layer, which is what the async-graphql and graphql.config.ts entries suggest. Background work is a first-class concern, not an afterthought, because job scheduling and cron crates are declared at the workspace level. Both are reasonable choices for a library server that has to scan files, extract metadata and run scheduled syncs.

## Running Stump with Docker and adding a first library

The README does not inline the install commands. It states that installation guides live in the documentation at stumpapp.dev, or in the markdown file docs/content/docs/getting-started/installation/index.mdx for readers who prefer the repository copy. The README also notes a Docker image published on Docker Hub as aaronleopold/stump, so the container path is the one the project advertises most visibly.

The repository has a docker/ directory at the top level, which is where the container definitions live. If you prefer to read the exact flags, ports and volume paths before running anything, read that directory and the installation page rather than guessing from a blog post. The README gives no port number and no environment variable names, so treat any you see elsewhere as unverified.

For a source checkout, the root package.json exposes a setup script that installs dependencies and builds the web client:

```bash
yarn setup
```

After that, the same file defines a development entry point that starts the Rust server headlessly alongside the web dev server:

```bash
dev:web
```

The script is defined as `concurrently -n server,web -c green.bold,blue.bold "bacon run-server --headless" "yarn web dev"`, so it expects bacon and a Rust toolchain at the pinned version. Once the server is up, the first real use is pointing it at a directory of CBZ or EPUB files and letting it scan. The README does not document the scan command or the UI path for adding a library, so follow the getting-started page for that step.

## Beta software with no promised timeline

The disclaimer is the most important paragraph in the README. It states that Stump is under active development and should be treated as beta software until it reaches a stable 1.0 release. It adds that the maintainer does their best to avoid breaking changes or changes that might cause data loss, but that there are no guarantees. It also states that the project is developed in the maintainer's free time, that it is not their job, and that there is no guarantee of any timeline for features or bug fixes.

That is an honest statement, and it should shape how you deploy it. A media server that indexes a large library and stores reading progress, annotations and user accounts in a database has state worth losing. The repository includes crates/migrations, which indicates schema evolution is handled deliberately, but the disclaimer explicitly declines to promise data safety. Back up the database and the library before upgrading between releases.

The release cadence is visible too. v0.1.5 landed on 2026-06-20, v0.1.6 on 2026-08-02, and v0.1.7 on 2026-09-03. The last push to the repository was on 2026-09-10. Version numbers still sit in the 0.1.x range after those releases, which is consistent with the beta framing rather than contradicting it.

Where Stump is the wrong tool: if you need a server with a stability guarantee, a documented rollback procedure, or long-term support, this is not that project yet. The README does not document rollback, and the disclaimer is explicit that guarantees are absent.

## Komga, Kavita and the rest of the field

The README names its own alternatives: audiobookshelf, Codex, Kavita, Komga and Storyteller. Komga is the closest comparison for a comics-focused server, and the difference in approach is mostly about the stack and the client surface rather than the feature checklist. Stump pairs a Rust and Axum server with a React web UI, a Tauri desktop shell and a React Native mobile app, and exposes GraphQL internally. Komga is a JVM project. If your operational comfort is a Java runtime and a single jar, Komga fits that habit; if you would rather run a compiled binary or a container with no JVM, Stump's layout is the argument for itself.

Kavita sits in the same space with its own reader and metadata conventions. Codex is another option the README lists without commentary. audiobookshelf is included even though its focus is audiobooks and podcasts, which tells you the author sees overlap in the self-hosted media server category rather than direct feature parity.

The honest framing is that format support and OPDS are table stakes here, not differentiators. Stump's distinguishing choices are the Rust server, the built-in readers across web, desktop and mobile, and the sync integrations for Kobo and KoReader. If those specific integrations do not matter to you, the alternatives are worth evaluating on their own terms before you commit a library.

## Licence, the GPL-3.0 mobile app, and what upgrades cost

The repository is MIT-licensed at the top level, but the README adds a qualifier: if a package or subfolder has its own license file, that license takes precedence. It then states that the expo application under apps/expo is licensed under GPL-3.0, while all other code in the repository is MIT. The root package.json sets its license field to "SEE README.md", which points back to that split rather than restating it.

This is not legal advice, but the practical reading is that the server and web UI are permissively licensed while the React Native app is not. If you plan to redistribute a build that includes the expo app, or to modify it, the GPL-3.0 terms on that directory are the ones that apply. Attribution matters too: the README credits icons from the Spacedrive repository under FSL-1.1-ALv2 and notes native Readium expo modules.

Upgrade cost is harder to pin down because the README does not document a migration or rollback procedure. What the repository does show is crates/migrations as a dedicated crate, and the disclaimer's refusal to guarantee against breaking changes or data loss. Combined, the reasonable position is that upgrades exist and are handled through migrations, but the project does not promise they will be painless. The README does not document a supported downgrade path.

## Conclusion

Adopt Stump if you already keep a comics or manga library on disk and want OPDS, Kobo or KoReader sync without paying for a hosted service, and you accept that the README calls it beta software until 1.0 with no guaranteed timeline. Do not adopt it if you need a stability commitment, a published upgrade path, or a licence story that covers the React Native app, which is GPL-3.0 rather than MIT. Before committing a library, verify the installation page at stumpapp.dev for your platform, confirm your formats are among EPUB, PDF, CBZ/ZIP and CBR/RAR, and check the project boards for the features you depend on.

## FAQ

### What is Stump?

Stump is a free and open source comics, manga and digital book server with OPDS support, built with Rust, Axum, SeaORM and React. It supports EPUB, PDF, CBZ/ZIP and CBR/RAR with built-in readers for each format.

### How do I install Stump?

The README does not list install commands inline. It points to the installation guides in the documentation at stumpapp.dev, or to the markdown file docs/content/docs/getting-started/installation/index.mdx, and notes that Docker and pre-built binaries are among the supported methods.

### How do I use the Stump app?

The README describes a server that indexes your library and serves it through a web UI, built-in readers, and OPDS feeds, with multi-user accounts, permissions and age restrictions. Installation and usage guides live at stumpapp.dev rather than in the README.

## Sources

- [License: MIT](https://github.com/stumpapp/stump/blob/main/LICENSE)
- [Project website](https://stumpapp.dev)
- [README](https://github.com/stumpapp/stump/blob/main/README.md)
- [Releases](https://github.com/stumpapp/stump/releases)
- [stumpapp/stump on GitHub](https://github.com/stumpapp/stump)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/stumpapp-stump
