Skip to content
Running your server

Plugins

Plugins ​

BackIssue's core stays lean; extra download sources and whole features ship as plugins. Install them with one click from the in-app catalog — the first-run wizard offers them too — or drop a plugin folder into the plugins/ directory by hand.

The catalog ​

PluginWhat it adds
ReaderFull in-browser comic reader, reading shelves, reading lists, and per-user reading stats
BooksA Books library for EPUB/PDF — scanned, enriched, and read in the browser with bookmarks and progress
AudiobooksAn Audiobooks library with an in-browser player — chapters, sleep timer, bookmarks and resume
ShelvesFaceted browsing for large book and audiobook libraries — author, decade, format, status
OPDSServe your library to native reader apps (Panels, Chunky, …)
RequestsA request-and-approve workflow for adding volumes
DiscoverA browsable feed of new & notable comics to add
AirDC++Direct Connect (DC++) as a download source, with announce-bot watching
Notifications HubSend alerts to Discord, Telegram, Pushover, ntfy, or any webhook — with per-channel category filters
GamifyReading as a quest — XP, levels, streaks, achievements, and a household leaderboard
Migration AssistantImport an existing Mylar3 or Kapowarr collection, matched by ComicVine volume id
ProwlarrFeed your Prowlarr indexers to the built-in Usenet and torrent sources
SSO (OpenID Connect)Sign in through an identity provider — Authentik, Keycloak, Auth0, Google, Microsoft Entra, …

Download sites are listed separately — see Download sites below.

Managing plugins ​

Sidebar → Plugins (admins) shows the catalog (install, update when a new version is out, remove) and lists everything installed, what each registered (sources, routes, jobs, UI, permissions), and a per-plugin enable/disable toggle. Install/toggle changes apply after a restart — the page has a "Restart now" button that restarts the app and waits for it to come back. Disabling a plugin keeps its settings; they're back when you re-enable it.

Plugins can register their own settings (they appear in Settings automatically) and their own permissions (grantable to roles on the Users page).

Download sites ​

Sites the app downloads from are maintained together in one repository and installed individually, rather than one plugin per site. They appear in their own Download sites section on the Plugins page, where each one links to its settings. Switch a site on in Settings → Sources.

SiteWhat it carriesNeeds
MangaDexManga chapters, with language and scanlation-group preferencesNothing
WeebCentralManga chaptersFlareSolverr
MangaTaroManga chaptersNothing
AtsumaruManga chaptersNothing
Anna's ArchiveBooks (EPUB and PDF) for a Books libraryThe browser build; a member key is optional

Each one is described in full on the Download sources page.

Adding a download site ​

A plugin that adds a download site is mostly a description of the site: where to search, and where a result's file or page images are. The app supplies the rest — HTTP with Cloudflare handling, polite request pacing, matching, building the file, and the settings card with its Test button. A straightforward site is a few dozen lines, and one plugin can carry several sites. See the plugin API reference.

How it works ​

BackIssue loads external plugins from its plugins directory at startup — /data/plugins in Docker, so an installed plugin survives an image update. A plugin is a folder with an index.js whose default export receives the plugin API:

js
export default function register(api) {
  api.registerSource(mySource);        // a download source
  api.registerSettings({ ... });       // settings fields (auto-wired in the UI)
  api.registerClientAsset({ js: 'client/ui.js' }); // frontend UI
  api.registerRoute('post', '/api/mysource/test', handler);
  api.registerJob({ ... });            // schedulable background job
  api.registerStartup(fn);             // runs at boot
}

Sources implement { id, label, kind, isEnabled(config), find(ctx), … }, where an immediate source downloads in-app with fetch() and a deferred one hands off to a download client with grab(). The full contract is in the Plugin API reference.

Where the code lives. The app image ships with no plugins installed — you choose them, and they're kept in your data directory rather than baked into the image. Each feature plugin has its own repository; the download sites are the exception, maintained together in one repository and installed individually.

What a normal install ends up with. First-run setup pre-ticks the Reader, so most servers have the in-browser reader from day one. Everything else is opt-in.

Writing a plugin? The complete hook, source-contract, client-bridge, and slot documentation lives in the Plugin API reference.