Overview
How Grimoire extensions and repositories work, and why they're separate APKs.
A Grimoire extension is a content source — it knows how to fetch novels from one website or service. Extensions ship as separate Android APKs and are discovered at runtime via package manifest metadata, so adding sources never requires updating Grimoire itself.
Extensions consume a shared contract library, grimoire-extensions-api, and are
distributed through repositories: a JSON index Grimoire reads to list the
sources a repo offers.
The APK extension model
Each Grimoire source is packaged as its own Android APK. Grimoire discovers
installed extensions via PackageManager and a manifest flag, so the catalogue
isn't bundled into the reader. What this means in practice:
- Sources install like apps. An extension is a real Android package — you install, update, and remove it through the OS, and it's visible in your app list. Authors sign their own APKs.
- No app release needed for new sources. Adding or updating a source doesn't require a new version of the reader.
- Native tooling for authors. Sources are written in Kotlin against the
shared
grimoire-extensions-api(model types,Sourceinterfaces, HTTP/Jsoup helpers). - Bring your own repositories. Add any repository, including private GitHub repos via OAuth.
The trade-off versus a script-based plugin model is a per-source install step — in exchange for sources being first-class, OS-managed Android packages.
What's here
- Repository format — the
index.jsonschema (coming soon). - Build an extension — implement a source against the API (coming soon).
- Publish a repository — host and submit your repo (coming soon).
Under construction
This section is being filled in page by page.