Skip to content

Extensions & Repositories ​

Otaku Reader gets its content from sources you install yourself. There are two kinds, and they sit side by side in the same list — you install, browse, and read from them the same way.

Where it comes fromWhat it is
APK extensionsThe Tachiyomi/Mihon/Komikku ecosystem (Keiyoushi, Komikku, and any repo you add)Signed Android packages, loaded in an isolated classloader
JavaScript sourcesThe Mangayomi ecosystemPlain .js files, run in a sandboxed engine in a separate process

APK extensions carry the overwhelming majority of the catalogue — several hundred sources — and are what most people will use. JavaScript sources are a smaller, newer set that needs no APK install at all.

Repositories ​

A repository is a URL serving an extension index. Add as many as you like under Browse → Extensions → Repositories.

  • Repos used in Komikku/Mihon work unchanged.
  • The same screen handles both kinds. When you add a repo, the app asks it for both an APK index (index.min.json) and a JavaScript index (index.json); a repo that only serves one is normal and is not reported as an error.
  • Each repo is fetched independently — one broken or unreachable repo never blocks the others, and the failure message names the repo at fault.
  • Removing a repo removes its available extensions from the list; already-installed extensions keep working.

JavaScript sources ​

These come from the Mangayomi ecosystem and are ordinary JavaScript files rather than installable packages.

  • They run in a separate process, in a sandboxed engine with no access to your library, your files, or the app's own memory. Everything a source can do — HTTP requests, HTML parsing — goes through a narrow, checked bridge.
  • Requests are held to the same rules as everywhere else: HTTPS only, private and loopback addresses refused, and every redirect hop checked before it is followed rather than after.
  • Published sources run unmodified. If one misbehaves, that's the app's runtime to fix, not the source.
  • Per-source preferences (mirrors, base-URL overrides) work as the source's author intended, including when they later change a default you never touched.

Be aware of the size difference: the JavaScript half of the Mangayomi ecosystem is around 16 working sources, roughly ten of them English-facing. It is a useful addition, not a replacement for the APK catalogue — which is exactly why both ship.

Trust & provenance ​

Extensions execute code, so the app treats signers carefully:

  • Trust prompts — the first APK install from an unknown signing certificate shows its SHA-256 hash and asks for confirmation. Trusted signers are remembered (in encrypted storage) and can be revoked.
  • Provenance tracking — the app records which repository each extension came from. If an update is offered from a different repo than the one it was installed from, you get a warning before anything changes.
  • Signer-change detection — if an installed extension's signing certificate changes, it's flagged in the list with a warning.
  • Blocklist — known-bad extensions are filtered out automatically via a daily-refreshed blocklist.

JavaScript sources have no signing certificate to check, which is why they are sandboxed and process-isolated instead. Different mechanism, same goal.

Updates ​

Extension updates are checked in the background (WorkManager) and surfaced in the extensions list. Updating preserves your trust decisions and source settings.

NSFW content ​

Sources flagged 18+ are hidden until you enable NSFW content in settings. The toggle also gates features that depend on adult sources, such as E-Hentai favorites sync.

When a source misbehaves ​

  • Source health diagnostics — Browse tracks per-source failures and shows a warning badge with a diagnostic sheet explaining what went wrong. Both kinds of source route through it.
  • WebView fallback — sources behind Cloudflare can open a WebView challenge; the solved session cookies are shared back to the app's network stack automatically.
  • Most failures are the site, not the app — a moved domain, an outage, or a Cloudflare interstitial. The diagnostic sheet says which.

Advanced network settings ​

Settings → Advanced has the knobs for the cases the above doesn't cover. All three network settings take effect on the next request — there's no need to restart the app.

  • User agent — the identity sent to sources. Leave it blank for the built-in one. A source that sets its own user agent (usually because the site demands that exact string) keeps it.
  • DNS over HTTPS — resolve source addresses through Cloudflare, Google, AdGuard or Quad9 instead of your network's resolver. Worth trying when a source is unreachable but the site is up: a resolver in the path may simply be refusing to answer for it. It also stops every source's hostname travelling in the clear.
  • Verbose network logging — logs request and response headers for troubleshooting. Tokens and cookies are redacted, but leave it off unless you need it.
  • Clear cookies — discards stored cookies, Cloudflare clearance included. This is the fix when a source keeps asking you to solve the same challenge: the clearance you're holding is one the site no longer accepts. It also signs you out of anything you logged into through a source, so the app asks first.

The same screen carries the background-restriction shortcuts — the battery-optimisation exemption and the Don't kill my app guide — which decide whether library updates and downloads actually run when the app is closed.

Open source. Your library stays on your device.