项目仍处于 beta 阶段,可能出现破坏性变更或数据丢失;安装步骤需查阅官方文档,README 未给出完整命令;CBR/RAR 支持可能依赖额外组件,README 未说明

自托管的漫画、日漫与电子书服务器,支持 OPDS,用 Rust 和 React 构建
自托管的漫画、日漫和电子书服务器,支持 OPDS 协议,可集中管理书库并推送到各类阅读器。
核心能力
- 支持 OPDS v1.2(含 PSE)与 v2.0 协议
- 支持 EPUB、PDF、CBZ/ZIP、CBR/RAR 格式
- 内置所有支持格式的阅读器
- EPUB 支持注释与高亮
- 支持 OIDC 认证与多用户权限管理
容易踩的坑
- v0.1.12最新正式版2026-11-01 · 2026-11-01 15:46 UTC
I want to get a few security-related fixes out soon so am releasing this version a little early (copied from the changelog):
- 🔒 Validate image uploads by content and enforce valid image responses [1fa47aa]
- 🔒 Fix upload path traversal in book/series upload mutations [398c911]
- Thank you Nikhil Agrawal for reporting this one
This release is mostly fixes but has two sweeping changes which blows up the diff a bit:
- Upgrade sea-orm a major version
- Refresh some of the design language throughout the web app
I haven't heard any problems in
nightlyyet but ofc please reach out if you encounter anything after upgradeWhat's Changed
- :arrow_up: Upgrade sea orm to v2 by @aaronleopold in https://github.com/stumpapp/stump/pull/1475
- :bug: Set user on KOReader reading device upsert by @pedropombeiro in https://github.com/stumpapp/stump/pull/1481
- :sparkles: (expo): Basic reading stats by @aaronleopold in https://github.com/stumpapp/stump/pull/1483
- :bug: (expo): Fix small collection of timeline bugs by @aaronleopold in https://github.com/stumpapp/stump/pull/1485
- :bug: Hide unusable cover options in thumbnail selectors by @ajselzilic in https://github.com/stumpapp/stump/pull/1491
- :globe_with_meridians: Complete Simplified Chinese translations by @brushax in https://github.com/stumpapp/stump/pull/1488
- Fix path normalization for EPUB resources on Windows by @dyphire in https://github.com/stumpapp/stump/pull/1437
- :technologist: Monorepo cleanup and consolidation by @aaronleopold in https://github.com/stumpapp/stump/pull/1494
- :bookmark: Release v0.1.12 by @aaronleopold in https://github.com/stumpapp/stump/pull/1507
New Contributors
- @brushax made their first contribution in https://github.com/stumpapp/stump/pull/1488
- @dyphire made their first contribution in https://github.com/stumpapp/stump/pull/1437
Full Changelog: https://github.com/stumpapp/stump/compare/v0.1.11...v0.1.12
- v0.1.112026-10-20 · 2026-10-20 17:55 UTC
查看更新说明
What's Changed
- 🐛 Fix importing files shared via content:// URIs by @Gibson431 in https://github.com/stumpapp/stump/pull/1416
- :recycle: (expo) Add
Alertstub with prettier jetpack compose dialog for Android by @aaronleopold in https://github.com/stumpapp/stump/pull/1439 - :bug: Respect spine page-progression-direction in Readium manifests by @omegaatt36 in https://github.com/stumpapp/stump/pull/1438
- ⬆️ Bump react-native-web from 0.21.2 to 0.21.3 by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1445
- ⬆️ Bump actions/checkout from 3 to 7 by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1452
- ⬆️ Bump @tanstack/react-virtual from 3.10.8 to 3.14.13 by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1450
- ⬆️ Bump actions/download-artifact from 4 to 8 by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1451
- :globe_with_meridians: Update translations by @hosted-weblate[bot] in https://github.com/stumpapp/stump/pull/1433
- 🐛 Fix incomplete OPDS 2.0 catalog pagination by @eduardojvieira in https://github.com/stumpapp/stump/pull/1444
- :globe_with_meridians: Update Korean translations by @devy1540 in https://github.com/stumpapp/stump/pull/1456
- :recycle: Upgrade to OPDS v2 stable progression API by @aaronleopold in https://github.com/stumpapp/stump/pull/1440
- :sparkles: Reading timeline foundations by @aaronleopold in https://github.com/stumpapp/stump/pull/1460
- :sparkles: (expo) Add a persistent System theme option by @devy1540 in https://github.com/stumpapp/stump/pull/1458
- :globe_with_meridians: Update translations by @hosted-weblate[bot] in https://github.com/stumpapp/stump/pull/1459
- :recycle: Reorganize localization by @aaronleopold in https://github.com/stumpapp/stump/pull/1469
- :bug: Delete stored mtimes after library deletion by @aaronleopold in https://github.com/stumpapp/stump/pull/1467
- :adhesive_bandage: Print more meaningful message for config parse failures by @aaronleopold in https://github.com/stumpapp/stump/pull/1468
- :bug: Return 404 for EPUBs without a cover image by @pedropombeiro in https://github.com/stumpapp/stump/pull/1471
- :sparkles: Reading timeline improvements and basic journal support by @aaronleopold in https://github.com/stumpapp/stump/pull/1472
- :recycle: Improve series position ordering of books by @aaronleopold in https://github.com/stumpapp/stump/pull/1473
- :bug: Detect and delete duplicate media during oneshot conversion by @aaronleopold in https://github.com/stumpapp/stump/pull/1477
- 🔖 Release v0.1.11 by @aaronleopold in https://github.com/stumpapp/stump/pull/1474
New Contributors
- @eduardojvieira made their first contribution in https://github.com/stumpapp/stump/pull/1444
- @pedropombeiro made their first contribution in https://github.com/stumpapp/stump/pull/1471
Full Changelog: https://github.com/stumpapp/stump/compare/v0.1.10...v0.1.11
- v0.1.102026-09-21 · 2026-09-21 16:28 UTC
查看更新说明
🚨 PLEASE READ 🚨
This release contains a fix for a privately-reported security issue. The details of this are outlined in GHSA-v4g4-xqjg-59p6. A TLDR; for folks:
- A hypothetical attacker would need a server owner to explicitly create an API key for them, or have the means to steal their key (at which point, you may have larger problems)
- A non-owner user cannot create API keys without the corresponding permission, and even if permitted they wouldn't be able to create a key with server-owner-level permissions
- The actions that could be performed with the API key are only relevant to a multi-user Stump instance, and don't leak beyond the server itself (e.g., it only affects Stump and not the host machine)
If you are a server owner and have an API key that you have shared to another user, or suspect your key might have been exposed by some means, you should delete the key until
0.1.10is released. If you trust your users or otherwise know your key is safe, or have no managed user accounts in your system, then proceed as you'd like.
What's Changed
- 🐛 Fix metadata editor delete squeezed against next tag by @balazs-szucs in https://github.com/stumpapp/stump/pull/1431
- :bookmark: Release v0.1.10 by @aaronleopold in https://github.com/stumpapp/stump/pull/1435
Full Changelog: https://github.com/stumpapp/stump/compare/v0.1.9...v0.1.10
- v0.1.92026-09-19 · 2026-09-19 23:39 UTC
查看更新说明
🚨 PLEASE READ 🚨
This release contains a few important security fixes reported privately to me (thank you). Please update as soon as possible if you have a Stump server instance with managed accounts. If you do not have managed accounts, you are largely not affected by these issues.
The fixed issues are:
- An authenticated user could previously grant themselves arbitrary permissions, remove their age restriction, and change their
maxSessionsAllowedby manually crafting an appropriate API call - The
libraryMissingEntitiesquery exposed minimal information (filesystem paths of missing books and series) without filtering out libraries that the user does not have access to - The
previousBookClubDiscussionsquery could be used to list discussions of a private book club by a non-member. This one is incredibly low risk, as the book club feature is not even officially released nor has any official client support. It was reported and corrected, nonetheless, so is outlined here. - The
mediaMetadataOverviewquery computed genre, writer, publisher, and other metadata aggregates across all books in the database, ignoring library exclusions and age restrictions. This could be used to infer the existence of books that a user does not have access to. It did not expose the actual books themselves.
What's Changed
- support A/D turn page by @qinghon in https://github.com/stumpapp/stump/pull/1425
- :bug: (expo,android) Use sheet store and fix preferences lifecycle in native module by @aaronleopold in https://github.com/stumpapp/stump/pull/1426
- 🐛 Fix ReadMore description flicker/re-render on expand by @balazs-szucs in https://github.com/stumpapp/stump/pull/1419
- 🔖 Release v0.1.9 by @aaronleopold in https://github.com/stumpapp/stump/pull/1428
Full Changelog: https://github.com/stumpapp/stump/compare/v0.1.8...v0.1.9
- An authenticated user could previously grant themselves arbitrary permissions, remove their age restriction, and change their
- v0.1.82026-09-19 · 2026-09-19 20:13 UTC
查看更新说明
🚨 PLEASE READ 🚨
This release is coming out a bit early because there are some dependency upgrades (vulnerability fixes) I want to get into the
latesttag. Please be aware of the following:-
You can see all the fixed vulnerabilities here: https://github.com/stumpapp/stump/pull/1400
- 3 could not be patched
-
react-routerwas upgraded two major versions, I have already caught a few routing bugs that went missed in testing the upgrade but please let me know if you find any others -
The config system was refactored https://github.com/stumpapp/stump/pull/1424, the original warning still applies:
🚨 WARNING: This PR includes changes to some environment variables. While in the area, I went ahead and normalized them all so they are consistently prefixed with
STUMP_. This may also break existingStump.tomlfiles, and so you should back up your existing file and let Stump re-create it.For my own toml, I just had to remove the
profilekey and make the[oidc].scopeskey an array (instead of a comma-deliminated string). -
There was also a larger refactor of the
corecrate, while it was mostly moving files around into new homes I still want to highlight it
What's Changed
- :globe_with_meridians: Update translations by @hosted-weblate[bot] in https://github.com/stumpapp/stump/pull/1354
- :globe_with_meridians: Update translations by @hosted-weblate[bot] in https://github.com/stumpapp/stump/pull/1361
- :globe_with_meridians: Update translations by @hosted-weblate[bot] in https://github.com/stumpapp/stump/pull/1374
- feat(i18n): localize image reader settings by @devy1540 in https://github.com/stumpapp/stump/pull/1383
- :sparkles: Proper oneshots support by @aaronleopold in https://github.com/stumpapp/stump/pull/1375
- :sparkles: (expo): Local URL fallback and auto-switching by @aaronleopold in https://github.com/stumpapp/stump/pull/1355
- ✨ Highlight current library while browsing series and books by @ajselzilic in https://github.com/stumpapp/stump/pull/1379
- ⬆️ Bump dorny/paths-filter from 4.0.2 to 4.0.3 by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1371
- ⬆️ Bump eslint-plugin-react-hooks from 7.0.1 to 7.1.1 by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1364
- ⬆️ Bump qs and @types/qs by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1362
- ⬆️ Bump tsx from 4.21.0 to 4.23.12 by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1367
- ⬆️ Bump cachix/install-nix-action from 31.11.0 to 31.11.1 by @dependabot[bot] in https://github.com/stumpapp/stump/pull/1372
- ✨ Persist browser ordering preferences by @ajselzilic in https://github.com/stumpapp/stump/pull/1376
- :bug: (expo) Fix local URL auto-switching by @aaronleopold in https://github.com/stumpapp/stump/pull/1389
- feat(i18n): localize image reader header controls by @devy1540 in https://github.com/stumpapp/stump/pull/1384
- :globe_with_meridians: Update translations by @hosted-weblate[bot] in https://github.com/stumpapp/stump/pull/1387
- :globe_with_meridians: Add Bosnian locale as option by @aaronleopold in https://github.com/stumpapp/stump/pull/1390
- :adhesive_bandage: Fix repeated EPUB font size and line height adjustments by @ajselzilic in https://github.com/stumpapp/stump/pull/1393
- feat(i18n): localize image reader footer navigation by @devy1540 in https://github.com/stumpapp/stump/pull/1385
- 🌐 Update Hungarian locale to use native name by @balazs-szucs in https://github.com/stumpapp/stump/pull/1395
- ✨ Make three-dot book menu match Download button height by @balazs-szucs in https://github.com/stumpapp/stump/pull/1396
- 💚 Fix CVE workflow file by @aaronleopold in https://github.com/stumpapp/stump/pull/1398
- :arrow_up: Fix vulnerabilities and upgrade
react-routerby @aaronleopold in https://github.com/stumpapp/stump/pull/1400 - :adhesive_bandage: Fix a few different oneshot issues by @aaronleopold in https://github.com/stumpapp/stump/pull
-
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Stump is a free and open source comics, manga, and digital book server with OPDS support, created with Rust, Axum, SeaORM and React.
- Disclaimer
- Features
- Roadmap
- Getting Started
- Developer Guide
- Repository Structure
- Similar Projects
- License
- Attribution
Disclaimer
Stump is under active development and should be treated as beta software until it reaches a stable 1.0 release. I do my best to avoid breaking changes, or changes which might cause data loss, but there are no guarantees.
I develop and maintain Stump in my free time. In other words, this is not my job and there is no guarantee of any timeline for features or bug fixes.
Features
- OPDS v1.2 (including OPDS PSE) and v2.0 support
- EPUB, PDF, CBZ/ZIP, and CBR/RAR support
- Built-in readers for all supported formats
- Annotations and highlights for EPUB books
- OIDC authentication
- Translations with Weblate
- Multi-user account management with permissions, age restrictions, and other access control features
- Theming support with a handful of built-in themes
- Kobo and KoReader sync integrations
- Multiple different installation methods, including Docker and pre-built binaries
And more not mentioned. The documentation will provide additional details about features, installation, and usage guides.
Roadmap
You can track the project boards to see what efforts are currently being worked on or planned.
Feel free to create an issue or discussion if you have anything else you'd like to see!
Getting Started
The installation guides are available in the documentation (or the markdown, if you prefer).
Developer Guide
The developer guide is available in the documentation (or the markdown, if you prefer). To not have to maintain two copies of the same information, please refer to those links for the most up-to-date information.
Contributing
Contributions are very welcome! Please review the CONTRIBUTING.md before getting started.
I recommend taking a look at open issues. You can also check out the project boards to see what efforts are active or planned.
In general, the following areas could always use help:
- Translations via Weblate, so Stump is accessible to as many people as possible
- Writing comprehensive tests
- Improving the UI/UX, even small changes can go a long way
- CI pipelines, automated release processes, and other devops-related efforts
- Addressing
TODOorFIXMEcomments in the codebase
Repository Structure
The repository is managed via yarn workspaces and cargo workspaces:
# The primary applications all grouped together
apps/
desktop/ # Tauri wrapping the web UI
expo/ # React Native app
server/ # Axum server
web/ # UI served by the server
# The primary internals, like file processing etc
core/
# Supporting Rust crates (cli, graphql, integrations, etc)
crates/
migrations/ # Database migrations
models/ # Database models
docs/
# Shared TypeScript packages
packages/
Translations
Similar Projects
There are a number of other projects that are similar to Stump, it certainly isn't the first or only digital book media server out there. If Stump isn't for you, or you want to check out similar projects in this space, here are some other projects you might be interested in:
- audiobookshelf (Audiobooks, Podcasts)
- Codex
- Kavita
- Komga
- Storyteller
License
If a package or subfolder has its own license file, that license takes precedence over the repository-level license and will be listed below.
- The expo application is licensed under GPL-3.0 (summary)
- The
wifi-ssidnative module was sourced from Streamyfin and licensed under MPL-2.0 (summary) - All other code in the repository is licensed under MIT License (summary)
Attribution
- Some of the icons used in the web and mobile applications are from the Spacedrive repository, and are licensed under the FSL-1.1-ALv2 license.
- The native Readium expo modules were adapted from Storyteller