This project is not maintained.
A comprehensive, automated, deduplicated master registry and architectural reference for KOReader plugins, user patches, and companion ecosystem tools.
- ๐ Full Categorized Plugin Directory (PLUGINS.md) โ All 1,126 plugins & tools with stars, authors, descriptions, and source tags.
- ๐พ Machine-Readable Database (plugins.json) โ Complete JSON dataset for scripts, parsers, and custom in-app stores.
- โ๏ธ How This Catalog Was Created โ Automated discovery, scraping, and crawling pipeline.
- ๐ KOReader Discovery Architecture โ Deep dive into how in-app plugin stores (
storify.koplugin) discover, parse, match, and update plugins. - ๐ Credits & Attribution โ Honoring the original
awesome-koreaderproject and upstream contributors.
Total Tracked Entries: 1,126
โโโ ๐ Plugins (Official, Community, Contrib): 1,011
โโโ ๐งฉ User Patch Collections & Tweaks: 111
โโโ ๐ฅ๏ธ Companion Tools & Sync Servers: 4
| Category | Count | Highlight Examples |
|---|---|---|
| ๐ ๏ธ Utilities & Workflow Tools | 552 |
Terminal emulators, text/code editors, QR clipboards, HTTP inspectors, folder locks |
| ๐งฉ User Patch Collections | 111 |
User patch scripts and visual mod suites for KOReader's patch loader |
| ๐ Sync, Cloud & File Transfer | 77 |
Syncthing, Nextcloud, WebDAV, LocalSend, Tailscale, Dropbox, WireGuard, Calibre sync |
| โ๏ธ Notes, Highlights & Flashcards | 66 |
Highlights export to Obsidian, Anki, Notion, Readwise, Joplin, Flomo, Telegram |
| ๐ฎ Games & Entertainment | 65 |
Chess, Sudoku, Solitaire, Sokoban, 2048, Crosswords, Frotz interactive fiction |
| ๐ผ๏ธ UI, Themes & Customization | 43 |
Custom home screens (ProjectTitle, SimpleUI, Zen UI), custom menus, screensavers |
| ๐ค AI & Intelligent Assistants | 38 |
LLM reading assistants (Claude, GPT, Ollama, DeepSeek, Gemini, X-Ray) |
| ๐ Book Discovery & Library Catalogs | 37 |
OPDS catalogs, Z-Library, Zotero, Calibre content server, automated book downloaders |
| ๐จ Comics, Manga & Graphic Novels | 32 |
Panels+, Rakuyomi manga fetcher, dual-page mode, CBZ/CBR enhancers |
| โก Hardware, Device & Controls | 30 |
Bluetooth gamepads/remotes, frontlight automation, battery monitors, hardware keys |
| ๐ Dictionaries & Translation | 25 |
Offline neural translation, StarDict pre-loaders, multilingual lookup, Japanese furigana |
| ๐ฐ RSS & Read-It-Later | 20 |
QuickRSS, Wallabag, Instapaper, Readeck, Omnivore |
| ๐ Reading Stats, Tracking & Goals | 18 |
Reading timers, streaks, gamification (ReadMastery), speed analytics |
| ๐ Reading & Typography | 8 |
Vertical text rendering (Tategumi), reading rulers, speed reading, autoturn |
| ๐ฅ๏ธ Companion Tools & Sync Servers | 4 |
Desktop dashboards (KoInsight, KoHighlights), self-hosted sync backends |
๐ Browse the full catalog with links and star counts in PLUGINS.md.
This master catalog was created by analyzing the decentralized discovery engine implemented in storify.koplugin (KOReader AppStore) and executing an automated, multi-tier crawler across GitHub and curated community indexes:
flowchart LR
A["jannick-holm/awesome-koreader"] --> D["Merge & Deduplication Engine"]
B["Storify Discovery Engine<br>(topic:koreader-plugin, in:name .koplugin)"] --> D
C["Extended GitHub Search<br>(gh cli, desc search, _meta.lua code search)"] --> D
E["Official Built-in & koreader/contrib"] --> D
D --> F["Intelligent Categorizer"]
F --> G["plugins.json (Machine-Readable)"]
F --> H["PLUGINS.md (Markdown Tables)"]
| Discovery Channel | Total Matches | Exclusive Matches | Method Description |
|---|---|---|---|
| ๐ Storify Native Methods | 790 |
442 |
Native queries implemented in storify.koplugin (.koplugin suffix, koreader-plugin topic, and user-patch queries). |
๐ Extended GitHub Search (gh / API) |
482 |
185 |
Full-text description searches, hyphenated repo names (koreader-plugin-*), and _meta.lua code searches. |
| ๐ฆ Official KOReader Repositories | 123 |
38 |
Core plugins shipped inside koreader/koreader (36) + koreader/contrib catalog (87). |
| โญ Awesome-KOReader Curated List | 52 |
11 |
Manually curated list from jannick-holm/awesome-koreader. |
The catalog was designed to refresh itself with no server or maintainer in the loop: .github/workflows/update.yml runs .github/scripts/crawl.py and commits plugins.json/PLUGINS.md back to main only when the crawl actually produces a diff (git diff --staged --quiet guards the commit/push step so a no-op run doesn't create empty commits). This is a reusable pattern for any repo that wants to stay current against an external data source without external infrastructure โ checkout, run your generator, commit-if-changed, push, all inside the Action's own GITHUB_TOKEN permissions.
The workflow is kept in the repo as a reference for that technique, but is not scheduled โ this project is unmaintained, so it only runs if someone triggers it manually from the Actions tab (workflow_dispatch).
Understanding how KOReader in-app package managers (storify.koplugin / appstore.koplugin) discover, parse, match, install, and update plugins is essential for plugin authors:
storify.koplugin runs on-device without a centralized backend server. It queries the GitHub REST API v3 using targeted search patterns:
- Plugins:
topic:koreader-plugin fork:false,in:name ".koplugin" fork:false, and fork queries withstars:>=1. - User Patches:
topic:koreader-user-patchandin:name "KOReader.patches". - Git Tree Scanning: For multi-plugin or patch repositories, queries
/repos/{owner}/{repo}/git/trees/{branch}?recursive=1to index individual.luapatch files and nested.kopluginfolders.
Every standard KOReader plugin resides in a folder ending in .koplugin (e.g. plugins/syncthing.koplugin/) and includes a sandboxed _meta.lua manifest:
local _ = require("gettext") -- or appstore_gettext
return {
name = "syncthing", -- Internal folder identifier
fullname = _("Syncthing Client"), -- Human-readable name (supports l10n)
description = _([[Sync books and notes over Syncthing.]]),
version = "1.2.0", -- Semver (X.Y.Z) or Date-based (YYYY.MM.DD)
}The matching engine (core/appstore_matcher.lua) matches on-disk plugins against GitHub repositories through a 4-tier waterfall:
- Direct Record Match: Saved
owner/repofrom previous install record. - Exact Directory Match:
dirname == repo.nameordirname == repo.name .. '.koplugin'. - Display Name Match:
manifest.name == repo.name(case-insensitive). - Canonical Slug Match: Strips common prefixes (
koreader-plugin-,koreader-,plugin-) and suffixes (.koplugin).
- SemVer & Date Parsing:
core/appstore_version.luastrips prefixes (v,release-), handles both SemVer (1.2.3-beta.1) and Calendar date versions (2026.08.18or20260818), and compares pre-release ranks (alpha < beta < rc < release). - Timestamp Fallback: If versions cannot be parsed, release publication timestamps vs local file mtime (
latest_mtime) determine update eligibility.
Package extraction (core/appstore_installer.lua) enforces strict security and data safety:
- Zip Slip Traversal Defense: Canonicalizes all entry paths and enforces
isSubPath(target_dir, dest_target)before extraction. - Staging Directory: Extracts into
.newstaging folder. - User Config Preservation: Scans existing install directory and copies user config/setting files into
.newwith size verification before swapping. - Atomic Rename Rollback: Renames
target -> .bak,staging -> target, and rolls back on failure.
- Install the
storify.koplugininto your KOReaderplugins/directory. - Restart KOReader.
- Open the top menu -> Tools -> AppStore to browse, search, install, and update plugins with one tap directly on your e-reader.
- Download or clone the plugin repository.
- Copy the
.kopluginfolder (e.g.assistant.koplugin) into theplugins/directory of your KOReader installation:- Kindle:
/mnt/us/koreader/plugins/ - Kobo:
/.kobo/koreader/plugins/ - PocketBook:
/mnt/ext1/system/koreader/plugins/ - Android:
/sdcard/koreader/plugins/ - Linux / Desktop:
~/.config/koreader/plugins/
- Kindle:
- Restart KOReader to load the new plugin.
- Jannick Holm (
jannick-holm/awesome-koreader) โ Sincere thanks to Jannick Holm for creating the original, hand-curatedawesome-koreaderrepository that served as the foundational inspiration for community plugin curation. - Omer Faruq (
omer-faruq/appstore.koplugin) โ Special thanks to Omer Faruq for creating the original KOReader AppStore project, pioneering the in-app plugin repository concept, manifest format, and decentralized discovery architecture for KOReader. - Storify (
fusuyfusuy/storify.koplugin) โ A modern fork and complete rewrite of the original AppStore concept, introducing multi-source recursive tree crawling, sandboxed manifest parsing, 4-tier local matching, and atomic swap installation. - KOReader Team & Contributors โ The creators and maintainers of the best open-source e-book reader software in the world.
- KOReader Contrib Index โ Upstream repository of official and community-contributed plugins.
Want to add your plugin to this list?
- Make sure your repository has:
- The GitHub topic
koreader-plugin(orkoreader-user-patchfor patches). - A valid
_meta.luamanifest in the root or.kopluginfolder.
- The GitHub topic
- Submit a Pull Request or open an Issue, or simply tag your repository on GitHub with
koreader-pluginโ the automated crawler will automatically pick it up during the next catalog build!
This repository and catalog are released under the MIT License. Individual KOReader plugins listed in this catalog belong to their respective authors and are licensed under their respective terms.