Open-source project
LegadoTeam/legado avatar
LegadoTeam/legado

Legado 3.0 Android Reader and Rule-Based Sources

Legado 3.0 Book Reader with powerful controls

1,642 stars382 forksKotlinGPL-3.0

At a glance

What is it?
Legado is a GPL-3.0 Android book reader built primarily in Kotlin, with modules, an API document, and libraries for parsing, scripting, networking, EPUB handling, and rich text. Its controls point to readers who need configurable content sources, but the README leaves installation and first-use steps undocumented.
Who is it for?
Legado fits Android users and developers who need a configurable reader rather than a fixed catalog. It is less suitable for buyers of offline EPUB files or people who require a documented setup process.
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 1 day ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Legado Solves for Android Readers

Legado addresses a specific kind of book reader: an Android application whose content can be assembled from configurable sources rather than confined to one publisher or one fixed catalog. The repository description calls it "Legado 3.0 Book Reader with powerful controls," while the README identifies it as a free, open source Android novel reader. That combination points to readers who want direct control over where books come from and how content is presented.

The project is relevant to two audiences. Readers may want an application built around their own collection or source definitions. Developers may want to inspect or extend a Kotlin Android reader with parsing, scripting, local text processing, HTTP networking, and EPUB components represented in its dependency list. The README does not define those controls as a formal plugin API, so it would be inaccurate to promise arbitrary third-party functionality.

The exact import formats exposed by the application interface are not documented in the README. The presence of `org.positiondev.epublib:epublib-core` confirms an EPUB-related library in the project, but it does not enumerate every supported format or import path. The repository also contains `api.md`, which indicates that an interface is documented separately, but the README does not summarize its endpoints or authentication requirements. Prospective users should treat Legado as an extensible reader system, not as proof that every source format or automation workflow is supported.

How Legado Processes Books and Source Data

The repository layout separates the Android application from supporting code. Its top level contains `app/`, `modules/`, `third_party/`, Gradle wrapper files, and root build configuration. This is a multi-module Android structure, but the README does not describe the purpose or dependency direction of individual modules. Their exact responsibilities cannot be inferred safely from directory names alone.

Legado's dependency list provides stronger clues about its content pipeline. `org.jsoup:jsoup` and `cn.wanghaomiao:JsoupXpath` cover HTML parsing and XPath-based extraction. `com.jayway.jsonpath:json-path` handles JSONPath queries, which is relevant to reading structured data. Networking is associated with `com.squareup.okhttp3:okhttp`. Markdown rendering is represented by `io.noties.markwon:core` and `io.noties.markwon:image-glide`.

Scripting and language processing are also represented. The project lists `com.github.gedoor:rhino-android`, a JavaScript runtime, and `cn.hankcs:hanlp`, a natural-language-processing library. Glide appears in the image-loading and Markdown dependencies. The inclusion of NanoHTTPD and its WebSocket component indicates local HTTP or WebSocket functionality somewhere in the codebase, although the README does not document its endpoints, bind addresses, or security model.

EPUB processing is connected to `epublib-core`, while `LyricViewX` suggests a component for displaying lyrics. Together, these entries point toward source parsing, text extraction, scripting, and presentation. They do not establish the full runtime flow. A precise account of how a source declaration becomes rendered chapter text would require source files or API documentation beyond the README.

Installing Legado and Reaching the First Chapter

The README links to a Google Play application under the package identifier `io.legado.play.release`. That link offers a distribution route, but the README does not document device requirements, permissions, Play Store installation steps, or first-launch configuration. Repository-based users have Gradle Wrapper files named `gradlew` and `gradlew.bat`, together with `settings.gradle` and `build.gradle` at the root.

The README does not publish a supported build command, JDK version, Android SDK level, signing procedure, or module selection flag. This review will not invent one. A developer should inspect the root Gradle files and the module build files before attempting a source build. The wrapper filenames show which entry points exist, not which invocation is guaranteed to succeed. A release build may also require signing information that is not described in the public README.

For the first real use, neither distribution route is fully documented. The README does not explain how to import a local book, create a remote source, define parsing rules, grant storage or network access, or open the first chapter. It also does not document what happens when a remote source changes its HTML, returns malformed data, or blocks a request. Users who need these workflows documented before installation may find a conventional fixed-catalog reader easier to assess.

GPL-3.0, Dependencies, and Distribution Checks

The repository declares `LICENSE` as GPL-3.0. That matters to anyone planning to redistribute modified Legado binaries, combine its code with another application, or package it under different terms. This review does not provide legal advice or determine whether a particular deployment complies. The applicable obligations depend on distribution, linking, and licensing decisions that require separate review.

There is a metadata inconsistency. The repository-level license is GPL-3.0, while `package.json` declares `"license": "ISC"`. The `package.json` describes a Commitizen setup using `cz-conventional-changelog`, and its test script only prints an error before exiting. It should not be treated as evidence that the Android application is licensed under ISC. The root `LICENSE` is the more relevant license source for the repository.

The README lists third-party libraries including Jsoup, OkHttp, Glide, HanLP, Rhino Android, Markwon, and epublib-core. The repository has a `third_party/` directory, but the README does not enumerate its contents. An auditable software bill of materials and exact redistribution notices therefore require inspection of that directory and the applicable license for every dependency. The dependency names do not establish those obligations by themselves.

Legado Against a Fixed-Catalog Android Reader

The clearest alternative is a fixed-catalog Android reader that ships with one publisher catalog or one bundled library. Such a reader makes content discovery predictable because the application controls its source. Legado takes a more configurable direction, with HTML parsing, XPath, JSONPath, JavaScript execution, networking, and Markdown dependencies indicating that content can be processed through rules and external data.

That difference favors readers who need to accommodate different content structures. It also increases evaluation work. A fixed-catalog reader may reduce configuration decisions, while Legado appears to require users to deal with source behavior, selectors, scripts, and network dependencies. The README does not publish a rule schema, describe error reporting, or provide a troubleshooting guide, so the usability benefit of these controls cannot be measured from the documentation.

Legado is the wrong choice when the priority is a zero-configuration catalog with a documented guarantee for every supported source. It also does not fit users seeking desktop or iOS support, because the README identifies it specifically as an Android application. A technical reviewer should compare source-build requirements and rule-management overhead, not merely count parsing features.

Legado Releases, Upgrades, and Repository Activity

The repository is not archived, and its last push was on 2026-10-16. Recorded releases include `beta (legado_app_3.26101520)` dated 2026-08-11, `cronet153-phone-v2-20260910 (阅读·153测试 v2(开关即时生效))` dated 2026-09-09, and `cronet153-phone-20260910 (Cronet 153 手机独立测试包)` dated 2026-09-09. These records confirm recent repository and release activity, but they do not establish a stable release policy or a long-term support commitment.

The names `beta`, `测试 v2`, and `测试包` indicate that at least some listed builds have test-oriented status. Readers should not assume that every package receives the same update path or support level. The repository contains `CHANGELOG.md`, but the README does not summarize individual upgrade notes, migration steps, or breaking changes.

Source-build owners also face upgrade work beyond an app-store update. Android toolchain configuration, Gradle changes, dependency updates, signing, and source-rule compatibility may all matter. The README does not estimate those costs. The last push date confirms repository activity, while undocumented migration instructions remain the clearer adoption risk.

Editorial conclusion

Legado fits Android users and developers who need a configurable reader rather than a fixed catalog. It is less suitable for buyers of offline EPUB files or people who require a documented setup process. Before adoption, inspect `api.md`, the app configuration, module boundaries, release notes, and GPL-3.0 obligations, because the README does not explain book-source creation, API authentication, or a complete first-use workflow.

Frequently asked questions

What platforms does Legado support?

The README describes Legado as an Android application and links to its Google Play listing. It does not document desktop, iOS, or browser support.

What programming language is Legado written in?

The repository identifies Kotlin as its primary language. Its README also lists JVM and Android libraries used by the project.

How do I build Legado from source?

The repository contains `gradlew` and `gradlew.bat`, but the README does not give a build command or required JDK and Android SDK versions. Those details must be obtained from the repository's build files or documentation.

Does Legado include an API?

The repository contains `api.md`, so an API is documented separately from the README. The README does not summarize its endpoints, authentication rules, or usage examples.

Which content formats can Legado import?

The dependency list includes `org.positiondev.epublib:epublib-core`, which confirms EPUB-related code. The README does not provide a complete format list or document the import workflow.

Under which license is Legado distributed?

The repository declares GPL-3.0. The `package.json` metadata separately says ISC, but that file is associated with Commitizen tooling and is not identified as the application's primary license declaration.

Official sources

  1. Issues
  2. LegadoTeam/legado on GitHub
  3. License: GPL-3.0
  4. README
  5. Releases
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/legadoteam-legado.svg)](https://hysenlabs.com/projects/legadoteam-legado)

Was this useful?