@ashdev/codex-plugin-release-mangaupdates
v1.21.5
Published
MangaUpdates RSS release-source plugin for Codex - announces new chapter releases for tracked series in user-configured languages
Maintainers
Readme
@ashdev/codex-plugin-release-mangaupdates
A Codex plugin that announces new chapter and volume releases for tracked manga series via MangaUpdates per-series RSS feeds. Notification-only: Codex never downloads anything.
Features
- Per-series RSS polling via the MangaUpdates feed for each tracked series
- Filters releases by per-series language preferences (with a server-wide default)
- Server-wide scanlation group blocklist
- Conditional GET (ETag) support to keep upstream load low
- Auto-registers itself as a single source row in Settings → Release tracking on first start
- No credentials required — MangaUpdates RSS feeds are public
Authentication
None. The plugin only reads public per-series RSS feeds.
Admin Setup
Adding the Plugin to Codex
- Log in to Codex as an administrator
- Navigate to Settings > Plugins
- Click Add Plugin
- Fill in the form:
- Name:
release-mangaupdates - Display Name:
MangaUpdates Releases - Command:
npx - Arguments:
-y @ashdev/[email protected]
- Name:
- Click Save
- Click Test Connection to verify the plugin works
On first start the plugin auto-registers a single source row (MangaUpdates Releases) in Settings → Release tracking, where you can disable it, change the poll interval, or hit Poll now.
Linking Series to MangaUpdates
For a tracked series to receive announcements, it needs a mangaupdates external ID. Either:
- Let a metadata-provider plugin populate it (for example, MangaBaka cross-references), or
- Paste the ID manually into the series' tracking panel
npx Options
| Configuration | Arguments | Description |
|--------------|-----------|-------------|
| Latest version | -y @ashdev/codex-plugin-release-mangaupdates | Always uses latest |
| Pinned version | -y @ashdev/[email protected] | Recommended for production |
| Fast startup | -y --prefer-offline @ashdev/[email protected] | Skips version check if cached |
Configuration
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| blockedGroups | string (CSV) | "" | Comma-separated scanlation group names to exclude from announcements (case-insensitive, exact match). Per-series overrides may further extend this list. |
| requestTimeoutMs | number | 10000 | How long to wait for a single RSS fetch before giving up, in milliseconds. |
Per-series language preferences live on each series' tracking config and override the server default (release_tracking.default_languages).
How It Works
On every releases/poll:
- The plugin pulls the tracked-series scope from the host (filtered server-side to series with a
mangaupdatesexternal ID). - For each series, it conditionally GETs the RSS feed using the stored ETag.
- Items are filtered by per-series language list and the admin-configured group blocklist.
- Surviving items are streamed back to the host via
releases/record. The host's matcher applies the threshold and ledger dedup. - The new ETag is passed back so the host updates the source row.
Development
# Install dependencies
npm install
# Build the plugin
npm run build
# Type check
npm run typecheck
# Run tests
npm test
# Lint
npm run lintProject Structure
plugins/release-mangaupdates/
├── src/
│ ├── index.ts # Plugin entry point & poll loop
│ ├── manifest.ts # Plugin manifest
│ ├── fetcher.ts # Conditional GET against MangaUpdates RSS
│ ├── parser.ts # RSS item parser
│ ├── filter.ts # Language + blocklist filtering
│ └── *.test.ts # Unit tests
├── dist/
│ └── index.js # Built bundle (excluded from git)
├── package.json
├── tsconfig.json
└── README.mdLicense
MIT
