Open-source project
lnreader/lnreader avatar
lnreader/lnreader

LNReader: an Android light novel reader built around community plugins

Light novel reader for Android. LNReader LNReader is a free and open source light novel reader for Android, inspired by Tachiyomi.

2,858 stars434 forksTypeScriptMIT

At a glance

What is it?
LNReader is an MIT-licensed light novel reader for Android 7.0 and up, inspired by Tachiyomi, where sources live in a separate plugin repository. This article covers what it does, how to install the APK, and where the model breaks down.
Who is it for?
Adopt LNReader if you read light novels on Android and accept that source quality is the community's responsibility, since the README states the app has no affiliation with content providers and plugin requests go to a separate repository. Skip it if you need iOS, since the README documents Android 7.0 or higher and the repository's iOS script is a development entry point, not a shipped build.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 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 September 27, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What LNReader solves, and who it is actually for

Reading serialized light novels on a phone usually means juggling browser tabs for each translation group, losing your place every time a site redesigns, and re-finding the chapter you were on. LNReader puts that reading in one Android app. The README describes it plainly: a free and open source light novel reader for Android, inspired by Tachiyomi. That comparison is the whole design brief. Tachiyomi established the pattern of a reader shell plus installable source extensions, and LNReader applies it to prose rather than manga.

The audience is narrow and specific. You need an Android device running 7.0 or higher, and you need to be comfortable with the idea that the app ships without content. LNReader does not host novels and does not bundle sources. The README is explicit that LNReader has no affiliation with the content providers available, and it directs plugin requests to the lnreader-plugins repository rather than this one. If you want an app that opens to a working library out of the box, this is not that. If you want a reader you configure once and then use for years, the separation is the point: the reader updates on its own schedule while sources are fixed independently.

The project is written in TypeScript, licensed MIT, and the repository was last pushed on 2026-08-23, which is also the date of the v2.1.3 release. Earlier releases in the same cycle were v2.1.2 on 2026-07-29 and v2.1.1 on 2026-07-28.

The plugin split: how sources reach the reader

The architecture visible in the repository is a React Native application with a plugin layer. The top level holds App.tsx, index.js, app.json, metro.config.js and babel.config.js, which is the standard Expo and React Native toolchain, alongside a plugins/ directory. The package.json scripts confirm the build path: expo prebuild, then Gradle assembleRelease for Android. There is no web target and no server component.

Sources are the interesting part. Because plugins live outside the main app, a broken source does not require a new LNReader release. That is a real advantage for a project whose content targets change markup without warning. It also means the app's usefulness is bounded by the plugin repository, not by the app's own code quality. The README points plugin requests at lnreader-plugins, so the catalogue is maintained by whoever shows up, not by a paid team.

Data handling is local. The repository contains a drizzle/ directory and a drizzle.config.ts, with scripts named generate:db-migration and upgrade:migration-format, which indicates a SQLite-backed local store for library, chapters and reading progress, with schema migrations versioned in the repo. The testing setup is split accordingly: test:db selects the db project and test:rn selects the rn project, so database logic and React Native components are tested separately. If you care whether your reading history survives an upgrade, that migration directory is the thing to watch, not the release notes.

One consequence of the split deserves stating. The app can be perfectly healthy while the sources you want are stale, and the reverse is also true. Judging LNReader by the app repository alone will mislead you.

Installing LNReader from the releases page

The README gives one distribution channel: get the app from the releases page. There is no Play Store listing mentioned, and no F-Droid entry. The requirement stated is Android 7.0 or higher. The related searches for lnreader apk and lnreader download both point at this same flow, so here is what it looks like in practice.

Open the releases page in a browser on the device or on a desktop, and take the newest release, which is v2.1.3 at the time of writing. Download the APK asset attached to that release. Because it does not come from a store, Android will ask you to allow installation from the browser or file manager you used. After installation you get an empty library. That is expected, not a failure.

The next step is adding a source. LNReader does not ship with content, so the plugins screen is where the app becomes useful. The README routes plugin requests to the lnreader-plugins repository rather than describing an in-app catalogue, so the exact entry point is something to confirm on your own build rather than something this article can assert. What is certain from the repository is that plugins/ exists at the top level and that the plugin system is the intended extension mechanism.

If you want to build from source instead of using a release APK, the repository expects pnpm and Expo. The debug path is the shorter one:

bash
pnpm install
pnpm run dev:android

That runs generate:env:debug and then expo run:android against the debug application id com.rajarsheechatterjee.LNReader.debug, which installs alongside a release build rather than replacing it. The release path is heavier: build:release:android runs expo prebuild with --clean and then Gradle assembleRelease with ABI splits enabled. CONTRIBUTING.md is where the project says to look for the full setup.

Where LNReader is the wrong tool

The README's own framing sets the first limit. LNReader has no affiliation with the content providers available. Nothing in the app guarantees that a given novel is readable, that a translation is complete, or that a source will still work next month. If your reading list depends on one specific site, you are depending on a plugin you did not write and cannot file a bug against in this repository.

Platform is the second limit, and it is harder. The README states Android 7.0 or higher. There is a dev:ios script in package.json, but a development script is not a distributed iOS build, and the README documents no iOS download. Anyone searching for lnreader ios should treat this as an Android project. Running it on iOS means building it yourself from a toolchain the README does not walk you through.

Third, the storage model is local. With a Drizzle-managed SQLite database and no account system described anywhere in the repository, there is no stated sync between devices. If you read on a phone and a tablet, the library you build on one does not follow you to the other through anything the README documents. That is a genuine cost for a long series read across devices, and it is not something a plugin can fix.

Finally, consider what happens when you stop maintaining it. A reader is only as good as the sources behind it, and those are community-maintained by design. That is a trade-off, not a defect, but it means the app's shelf life is a function of the plugin repository's activity rather than the app's own release cadence.

LNReader against Tachiyomi-style manga readers

The obvious alternative is the tool LNReader names as its inspiration: Tachiyomi and the readers that grew out of it. The difference is not the interface pattern, which is deliberately similar, but the content type the pipeline is built for.

Manga readers page through images. Their sources return image URLs, the reader caches and prefetches them, and reading progress is measured in pages. LNReader handles text. A chapter is a block of prose that has to be laid out, reflowed at whatever font size you pick, and scrolled rather than paged. That changes what a source plugin has to return and what the reader has to store. It is also why a manga reader with an extension that scrapes a novel site tends to feel wrong: the pagination model fights the text.

A second alternative is simply reading in a browser with a translation group's own site. That works, costs nothing to set up, and always shows the newest chapter first. What it does not give you is a unified library, offline chapters, or a progress marker that survives a site change. LNReader's value is exactly that consolidation, and it only materializes after you have configured sources.

A third option is a general-purpose ebook reader fed by downloaded files. That gives you a mature reading engine and format support, but it moves the scraping problem to you: you fetch the chapters yourself, convert them, and re-do it every time a new chapter lands. LNReader automates the fetching at the cost of depending on plugins.

Maintenance, upgrades and the MIT licence

The release cadence is visible in the version history: v2.1.1 on 2026-07-28, v2.1.2 on 2026-07-29, and v2.1.3 on 2026-08-23. The last push to the repository is the same date as v2.1.3. Two releases one day apart suggest a fix shipped quickly after a regression, which is normal for a project of this shape and tells you nothing about long-term plans.

Upgrade cost has two halves. The app half is cheap: install the new APK over the old one, and the Drizzle migrations in drizzle/ handle schema changes. The migration tooling in package.json (generate:db-migration, upgrade:migration-format) exists precisely because the local database schema does change between versions, so treating an upgrade as risk-free is optimistic. Back up before a major version jump if your library matters to you.

The plugin half is where the ongoing cost sits. Sources break when sites change, and fixing them happens in lnreader-plugins, on the maintainers' and contributors' schedule. If you adopt LNReader, you are adopting that repository too, whether or not you ever open it.

The licence is MIT, per the LICENSE file and the README. MIT permits use, modification and redistribution with the licence and copyright notice retained. It says nothing about the content you read through plugins, and the README's disclaimer that LNReader has no affiliation with content providers is the relevant statement there. What you read, and whether you are entitled to read it, is a separate question from the software licence, and this article is not legal advice on it.

Editorial conclusion

Adopt LNReader if you read light novels on Android and accept that source quality is the community's responsibility, since the README states the app has no affiliation with content providers and plugin requests go to a separate repository. Skip it if you need iOS, since the README documents Android 7.0 or higher and the repository's iOS script is a development entry point, not a shipped build. Before committing, install the APK from the releases page, open the plugins screen, and confirm the sources you actually read resolve chapters on your device.

Frequently asked questions

What is LNReader?

It is a free and open source light novel reader for Android, inspired by Tachiyomi and licensed MIT. The README states it has no affiliation with the content providers available, and sources are added through plugins rather than bundled with the app.

How to install LNReader?

The README says to get the app from the releases page, and states Android 7.0 or higher is required. The current release is v2.1.3, and you install the APK directly rather than through a store.

How to use LNReader?

Install the APK from the releases page, then add sources through the plugin system, since the app ships without content. Plugin requests go to the lnreader-plugins repository, which is separate from the app repository.

What are the best sources for LNReader?

The README does not rank or list sources, and it points plugin requests at lnreader-plugins instead. Which sources work depends on that repository's plugins rather than on anything documented in the app repository.

Is LNReader still working?

The repository was last pushed on 2026-08-23, the same date as the v2.1.3 release, and it is not archived. Whether a specific source still resolves chapters is a separate question that depends on the lnreader-plugins repository.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
For maintainers

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/lnreader-lnreader.svg)](https://hysenlabs.com/projects/lnreader-lnreader)
Community notes

Community notes