`$()` only treats the input as HTML when it starts with `<`; otherwise it
parses as a CSS selector. The novelbuddy API returns `initialManga.summary`
as plain text for many novels (e.g. "When I opened my eyes, I was inside
a novel."), and cheerio's selector parser then chokes on the first `.`
in the punctuation with `Expected name, found .` — `parseNovel` throws
and the novel page fails to load entirely.
Wrap the summary in a `<div>` before passing it to `$()` so cheerio always
takes the HTML branch. Plain text becomes `<div>plain text</div>` (parses
fine, `.text()` still returns the original string), HTML stays HTML, and
the existing `.find('br').replaceWith('\n')` / `.find('p').before/after`
behavior is preserved either way.
Bumps version 2.1.0 → 2.1.1.
Repro:
- Open the source, search/browse to "Trash of the Count's Family" (or any
novel where the API returns a plain-text summary)
- Tap the entry; details fail with `QuickJsException: Expected name, found .`
LNReader Plugins
Community-driven plugin repository for LNReader. This repository hosts plugins and manages related issues and requests.
Quick Start
Prerequisites: Node.js >= 20
npm install
npm run dev:start
Documentation
- Quick Start Guide - Create your first plugin
- Plugin Development - Complete API reference
- Testing Guide - Test plugins using the web interface
- Komga Plugin - Self-hosted server integration
Testing Methods
Web Interface
npm run dev:start
Open localhost:3000 to test plugins interactively. See the testing guide for details.
Mobile App
From GitHub (Automated):
Push your changes to the master branch. The GitHub Action automatically builds and publishes plugins to the plugins branch.
Add your repository URL to the app:
https://raw.githubusercontent.com/<username>/<repo>/plugins/<tag>/.dist/plugins.min.json
From Localhost:
npm run serve:dev
Add http://10.0.2.2/.dist/plugins.min.json (Android emulator) to the app. Requires .env configuration (see .env.template).
Disclaimer
The developers are not affiliated with any content providers. If you are a non-aggregator website owner, you may request plugin removal via Discord or by creating an issue. Removed sites are added to the blacklist.