any-reader: A Rule Driven Reader for Novels, Manga and Video
📘开源的多平台自定义源资源聚合工具。支持小说、漫画阅读、视频播放、聚合搜索、分类排行等, 也支持本地资源TXT、EPUB
At a glance
- What is it?
- any-reader is an open source aggregator that renders custom sources through rules you write yourself, covering novels, manga, video, aggregated search and local TXT and EPUB files. It ships as desktop, web, Docker and VSCode builds, and it comes with a GPL-3.0 licence and an explicit warning that untrusted rules can run JavaScript.
- Who is it for?
- any-reader suits a reader who wants one interface over several sources and is willing to write or import rules, and it does not suit anyone looking for a bundled content library, since the project states plainly that it provides neither content nor rules. Before installing, read the rule execution warning, because rules can exploit JavaScript to exceed their intended scope, and decide whether the GPL-3.0 licence fits your distribution plans.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A Reader That Ships Without Content
any-reader describes itself as an open source, multi-platform tool for aggregating custom sources. The content types it can present are novels, manga, video, audio, RSS and games, and it also reads local TXT and EPUB files. What it does not do is supply material. The README is explicit on this point: the software provides no content and no rules, and what you see is entirely a function of the rules you write or import.
The target user is therefore not a casual reader looking for a packaged catalogue. It is the person who already knows which sites they want to reach, or who wants to write a rule that describes how one site structures its pages. The same sentence covers the person who imports an existing rule set from someone else, which is the common path in practice.
The project also states its own terms of use plainly. The software is presented for personal study and technical exchange, not for commercial use, and the disclaimer asks users to uninstall within 24 hours. It carries a QQ group number for support and asks for funding through a donation page, with the note that the project is developed independently.
Rules Are the Core Abstraction, Built From Five Primitives
The mechanism is a rule format. By writing a rule, you describe how a source's data is retrieved and reshaped into a uniform output that the application knows how to display, which is what makes aggregation across unrelated sites possible.
The README draws the comparison with RSSHub directly: RSSHub pushes data out as a standard RSS format, while AnyReader writes the format out as chapter lists, content, search and categories. The rules themselves are assembled from XPath, JSONPath, CSS selectors, regular expressions and JavaScript scripts. The first four keep a rule concise, and JavaScript is there for the cases where selectors are not enough.
Because the output format is fixed, the reading interface is shared. The content type decides which viewer you get, and the source is only responsible for producing data in the agreed shape. That separation is what lets a single app render a novel chapter list and a manga page list without the rule author implementing any UI.
The parsing code is also published on its own. The rule parsing library is separated from the application and documented separately, and the README says you can use that library to build your own program. The repository reflects this as a pnpm workspace with packages for core, shared, epub, rule-utils, web, and a legado package.
Untrusted Rules Can Run JavaScript, and the Project Warns About It
The most important thing in the README is a warning, and it deserves to be repeated rather than summarised. Running untrusted rules carries a security risk, because a rule can exploit JavaScript to exceed its intended permissions. The project asks you to be careful with unknown rules.
This is a structural property of the design, not an oversight in it. The rule language includes JavaScript by choice, because the README says that is what lets rule writing be freer, and a rule that can run JavaScript in the application process is a rule that can do more than fetch a page. Any importer of rules is therefore a code import, and it deserves the same scrutiny as running a script from an unknown repository.
The legal disclaimer reinforces the point from a different direction. The project states that it cannot control the legality, accuracy, completeness or availability of the resources its users point it at, that all data resources are made and provided by the user, and that video or comment content may carry third-party advertising inserted by those sources. It also states that video content is embedded with iframes from several platforms, and that no comment posting service is provided.
Desktop, Web, Docker and VSCode Are Four Shells for One Feature Set
The distribution strategy is breadth of form factor rather than depth of function. The README lists Windows win10 and later, Mac and Linux as the supported platforms, and desktop, web, Docker and a VSCode plugin as the four applications. The web version is described as having essentially the same features as the desktop one.
The feature list itself covers the usual reader surface. Both the desktop and VSCode builds offer local novel reading in txt and epub formats with chapter detection, online novel reading, custom book source rules, custom hotkeys, manga, video, aggregated search, a discovery page with category rankings, favourites, history, read aloud, reading progress saving, and caching of online novels.
The VSCode build adds two things that make sense in an editor. It offers a sidebar reading mode, and it can open epub files directly from the editor. The desktop list, by contrast, does not mention games, while the VSCode list does, so the two front ends are not strictly identical in coverage.
The VSCode extension is published on the Visual Studio Marketplace under the identifier aooiu.any-reader, and each build has its own documentation page on the project site, with separate pages for desktop, browser and VSCode.
The Docker Image and the pnpm Workspace Are the Build Path
The repository is a TypeScript pnpm monorepo. The root package.json declares the packageManager as [email protected], sets the project version to 1.11.12, and marks the package private. Build and run tasks are per-package, and the ones that matter for a self-hosted deployment are the web build and the server entry point.
The Dockerfile gives the container recipe. It starts from node:20-bookworm-slim, installs a long list of system libraries for headless Chromium and font support, activates pnpm through corepack, copies the lockfile and workspace definition, fetches dependencies, installs them offline, and then runs the build:
RUN pnpm run build && pnpm run web:build-bThe finished image exposes a single port and starts the server as its default command:
EXPOSE 8899
CMD ["pnpm", "run", "server"]So a container deployment gives you the web build served on port 8899. The local development path in the root package.json uses the same pnpm filters, with scripts such as run:core for the core package, web:server for the web package, and web:dev running the web server and the API server together. Testing is handled by vitest, and the repository has husky hooks configured through the prepare script.
Source Compatibility: eso Sources, Apple CMS and ZyPlayer Imports
Writing every rule from scratch is not the only route. The feature list states that the project is compatible with eso sources, and that resource sites can be connected by importing Apple CMS and ZyPlayer data. That means an existing rule written for another ecosystem, or a site already described by a format the importer understands, can be brought in without rewriting it.
This is what separates any-reader from a single-purpose reader app. The value is in the rule ecosystem and the uniform output format rather than in any particular source. The cost of that choice is that the quality of the experience depends entirely on the rules you have, and the project does not ship any, so a fresh install shows you an empty rule list until you add something.
The rule list and rule editor are both shown in the interface screenshots, which suggests rules are treated as first class objects that you manage inside the app, not as static configuration files. The documentation for writing rules lives on the project site under a dedicated rule page, and the full documentation is published separately from the repository.
Local TXT and EPUB Files Are First Class Citizens
Local files are not an afterthought in this reader. txt and epub formats are both supported for local novel reading, with automatic chapter recognition, and the epub reading path has its own package in the workspace, built through the epub:build script. Reading progress is saved, and read aloud is listed as a feature of both the desktop and VSCode builds.
The epub handling is worth separating from the online path, because the online path depends on a source you do not control. A local file works offline, has a structure the app already understands, and does not need a rule. For anyone who owns their EPUB library and wants one reading interface for both owned files and followed sources, that is a meaningful part of the value.
The feature lists for desktop and VSCode also mention caching of online novels, which suggests that fetched chapters are kept locally once retrieved, although the documentation does not describe cache eviction, size limits or an offline guarantee.
GPL-3.0, a Separate Parsing Library, and a Moving Version Number
The licence is GPL-3.0, declared both in the LICENSE file and as GPL3 in the root package.json. The rule parsing library is distributed separately and documented on its own site, which makes it possible to use the parsing core in another program, though any program linking that code inherits the obligations of the licence it carries. Nothing here is legal advice, and the practical point is simply to know the licence before you embed the library in a closed source product.
Version handling is where the project looks least settled. The package.json says 1.11.12, and the most recent release tags are v1.11.12 from 2025-08-14, v1.11.11 from 2025-04-28 and v1.11.10 from 2025-04-18. The repository is not archived and the last push was on 2026-10-15, so work continues on the tree well after the last tagged release. The release script is bumpp with the no-push flag, and dependency updates are handled by renovate, which suggests a fairly automated update path on top of an occasional tagged build.
Editorial conclusion
any-reader suits a reader who wants one interface over several sources and is willing to write or import rules, and it does not suit anyone looking for a bundled content library, since the project states plainly that it provides neither content nor rules. Before installing, read the rule execution warning, because rules can exploit JavaScript to exceed their intended scope, and decide whether the GPL-3.0 licence fits your distribution plans. The Docker build exposes port 8899, the root package.json declares version 1.11.12, the newest release tag is v1.11.12 from 2025-08-14, and the last push was on 2026-10-15.
Frequently asked questions
Does any-reader include books, manga or video content?
No. The project states that the software provides no content and no rules. What you see depends entirely on the rules you write yourself or import from elsewhere, and the software is meant for personal study and technical exchange rather than commercial use.
What is the security risk of using an any-reader rule from someone else?
The README warns that running untrusted rules carries a security risk, because rules can exploit JavaScript to exceed their intended permissions. Since JavaScript is one of the primitives a rule can use, treat an imported rule as code you are running, not as data you are reading.
How do I run any-reader on my own server?
The repository ships a Dockerfile that builds from node:20-bookworm-slim and starts the server with CMD ["pnpm", "run", "server"], exposing port 8899. The build step in the image runs pnpm run build and pnpm run web:build-b, and the root package.json uses [email protected] as its package manager.
Can any-reader read local EPUB and TXT files?
Yes. Both the desktop and VSCode builds list local novel reading in txt and epub formats with automatic chapter recognition, and the VSCode plugin can also open epub files directly from the editor.
Which platforms and application forms does any-reader support?
The README lists Windows win10 and later, Mac and Linux, and describes desktop, web, Docker and a VSCode plugin as the four application forms. The web version is described as having essentially the same features as the desktop version.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/aooiuu-any-reader)Was this useful?