This release includes 3 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
ReleasePort's take
Light signalVersion v0.1.13 adds four trending content lanes and several UI fixes, but removes the MangaFire source plugin and the single /api/discover/trending endpoint.
Why it matters: Removal of `MangaFire` (severity 70) eliminates that integration; clients must migrate to lane‑specific `/api/discover/trending/*` endpoints before they can fetch trending data, otherwise requests will fail.
Summary
AI summaryUpdates What's new, Highlights, and MangaUpdates across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | High |
Removes `MangaFire` source entirely, including plugin and related code. Removes `MangaFire` source entirely, including plugin and related code. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Breaking | High |
Removes the single `/api/discover/trending` endpoint; clients must use lane‑specific endpoints. Removes the single `/api/discover/trending` endpoint; clients must use lane‑specific endpoints. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Feature | Medium |
Adds four independent trending lanes: Manga, Manhwa, Manhua, Adult Manhwa. Adds four independent trending lanes: Manga, Manhwa, Manhua, Adult Manhwa. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Feature | Medium |
Shows 18+ pill on MangaCard in library view for explicit titles. Shows 18+ pill on MangaCard in library view for explicit titles. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Feature | Medium |
Stores all AniList title synonyms as `TitleAliases` on add for better fuzzy matching. Stores all AniList title synonyms as `TitleAliases` on add for better fuzzy matching. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Dependency | Low |
Sets `Cache-Control: no-cache, no-store, must-revalidate` on `/index.html` to avoid stale JS/CSS after deploys. Sets `Cache-Control: no-cache, no-store, must-revalidate` on `/index.html` to avoid stale JS/CSS after deploys. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Bugfix | Medium |
Correctly saves `is_explicit` flag when adding titles from Discover/Trending. Correctly saves `is_explicit` flag when adding titles from Discover/Trending. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Bugfix | Medium |
NoChaptersMessage component handles all “no chapters” states with appropriate messages and actions. NoChaptersMessage component handles all “no chapters” states with appropriate messages and actions. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Bugfix | Medium |
Lazy‑load `data-src` placeholder GIFs now return correct CDN URLs for manga18fx pages. Lazy‑load `data-src` placeholder GIFs now return correct CDN URLs for manga18fx pages. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Bugfix | Medium |
Sync warning badge now fires only when zero sources are linked after a full sync. Sync warning badge now fires only when zero sources are linked after a full sync. Source: llm_adapter@2026-05-31 Confidence: high |
— |
Full changelog
*ARRgh v0.1.3 — Trending Lane Fan-Out, 18+ Badges, Explicit Fixes
Released: 2026-05-31
Highlights
- Trending lane fan-out — Home shows 4 independent horizontal rows: Manga (MangaUpdates), Manhwa (AniList KR), Manhua (AniList CN), Adult Manhwa (AniList KR adult). Each lane caches independently, serves stale on failure, returns
[](not 502) when down. - 18+ badge fix —
is_explicitnow correctly saved when adding titles from Discover/Trending.AddMangaBodynow acceptsis_explicitfield; client sends it. - 18+ badge in library — MangaCard shows 18+ pill for explicit titles in library view
- NoChaptersMessage — extracted component handles all "no chapters" states in title detail (syncing, sync warning, local-only, no source linked)
- manga18fx lazy-load — pages using
data-srcplaceholder GIF pattern now return correct CDN URLs - MangaFire removed — CF-protected source removed entirely
- Sync warning accuracy — warning badge only fires when zero sources linked after full sync
- AniList synonym storage — AniList titles store all synonyms as
TitleAliaseson add - nginx no-cache for index.html — prevents stale JS bundle references after deploys
What's new
Trending lane fan-out (ADR 0032)
Replaces the single "Trending Now" row with 4 independent horizontal lanes:
| Lane | Heading | Source | Auth |
|------|---------|--------|------|
| /api/discover/trending/manga | Trending Manga | MangaUpdates latest releases | any |
| /api/discover/trending/manhwa | Trending Manhwa | AniList countryOfOrigin:KR | any |
| /api/discover/trending/manhua | Trending Manhua | AniList countryOfOrigin:CN | any |
| /api/discover/trending/adult-manhwa | Trending Adult Manhwa | AniList countryOfOrigin:KR isAdult:true | allow_explicit only — 403 otherwise |
Each lane:
- Independently cached with 1-hour TTL (
TrendingCacheServicekeyed by lane name) - Serves stale cache on source failure (graceful degradation)
- Returns
[]on failure with no stale (never 502) - Capped at 6 cards
- Renders on empty library (discovery use case)
GET /api/discover/trending (old single endpoint) removed.
is_explicit fix for Discover/Trending adds
AddMangaBody now accepts is_explicit: bool?. Client sends is_explicit: result.is_explicit in addTitle. Server sets IsExplicit from the field OR hentai content_type/tag detection — whichever is true.
Previously, explicit manhwa titles added via Discover/Trending were saved with is_explicit=false regardless of source metadata.
18+ badge in library
MangaCard in the library grid now shows an 18+ pill for titles with is_explicit=true. Consistent with the 18+ pill already shown in Discover search results.
NoChaptersMessage component
Extracted from manga-detail/index.tsx. Handles all "no chapters yet" states:
- Syncing / pending → spinner + "Fetching chapters…"
- Has sync warnings → amber message + Re-sync button
- Local-only (no sources) → informational
- Remote source, no chapters yet → Re-sync button
nginx cache-control for index.html
location = /index.html {
add_header Cache-Control "no-cache, no-store, must-revalidate";
try_files $uri =404;
}
Prevents browsers from serving a cached index.html that references stale JS/CSS bundles after a Docker image update.
manga18fx lazy-load
Chapters using data-src placeholder GIF pattern now return correct CDN URLs. data-src takes precedence over src.
MangaFire removed
CF-protected source removed entirely — plugin, seeded row, plugin-index entry, all tests.
Sync warning accuracy
Warnings only fire when zero TitleSources rows exist after full sync. Previously fired per-source miss, creating spurious amber badges on successfully-linked titles.
AniList synonym storage
Adding an AniList title stores all synonyms (title.romaji, title.english, and synonyms[]) as TitleAliases for improved fuzzy matching across plugins.
New API endpoints
| Method | Path | Notes |
|--------|------|-------|
| GET | /api/discover/trending/manga | MU latest releases → DiscoverResult[], max 6, 1h cache |
| GET | /api/discover/trending/manhwa | AniList KR trending, max 6, 1h cache |
| GET | /api/discover/trending/manhua | AniList CN trending, max 6, 1h cache |
| GET | /api/discover/trending/adult-manhwa | AniList KR adult — 403 without allow_explicit |
Removed:
| Method | Path |
|--------|------|
| GET | /api/discover/trending |
Upgrading
docker compose pull
docker compose up -d
No DB migrations required. If you query /api/discover/trending directly, update to /api/discover/trending/manga.
Breaking Changes
- Removed API endpoint `/api/discover/trending` (single row) – must use new lane endpoints (`/manga`, `/manhwa`, `/manhua`, `/adult-manhwa`).
- MangaFire source removed entirely.
- Minimum Node.js version bumped to 20.12 for CDN URL handling.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About t2vi/arrgh](https:
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]