Library / SDK
maxwai/NClientV3 avatar
maxwai/NClientV3

NClientV3: an unofficial Android client for NHentai built on a new API

An unofficial NHentai android client

777 stars29 forksJavaApache-2.0

At a glance

What is it?
NClientV3 is a fork of the original NClientV2 project that replaces the scraped HTML flow with a new API implementation, adding tag include and exclude controls, gallery downloads, favourites and a PIN lock. It targets Android 8 and above, and a separate build exists for the two API 26 and 27 devices that the main one no longer supports.
Who is it for?
NClientV3 is worth trying if you browse this particular site from Android and want tag filtering, offline reading and a PIN lock that the web version cannot give you, since the new API implementation is the substantive change over the original project.
Can I use it commercially?
Yes. Apache-2.0 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 3 days ago.
What is it written in?
Mainly Java, 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

The fork replaced the page scraping path with a new API implementation

NClientV3 describes itself as an unofficial NHentai Android client, and it is a fork of the original project by Dar9586, known as NClientV2. Forking a client means inheriting the interface and the reading experience while changing how the data underneath is obtained, and that is exactly what happened here.

The contributor list names the people behind that change. Inori333 is credited for the initial implementation of the new API, which is the single most important line in the list. Around it sit bug fixes from shirokun20 and zhongshen6, plus a long tail of translation work, and a separate section lists the contributors of the original project, including the person credited with Cloudflare bypass and the maintainers who did code cleanup and Gradle cleanup.

The fact that the original project and the fork keep separate contributor lists is a useful signal about how much was rewritten. The fork inherited a working reader and replaced the network layer underneath it.

For the user, the visible effect of a new API is speed and stability. HTML scraping breaks whenever the site changes a page layout, which is a routine event, and an API-backed client keeps working through those changes. The flip side is that an unofficial client depends on a service that does not owe it anything, so behaviour can change without notice and without a changelog entry for the app.

Tag include and exclude with blur or hide is the feature that sets it apart

The API features listed for the app cover browsing and searching: browse the main page, search by query or tags, and include or exclude tags. The exclusion controls come with a presentation choice, since excluded tags can be blurred or hidden, and there is a separate set of custom features covering sharing galleries, opening a gallery in the browser and bookmarking.

Then there are the things that make it a daily driver rather than a viewer. You can download manga, favorite galleries, and enable a PIN to access the app.

The tag exclusion system is the part with the most engineering behind it. Most clients give you a search box and leave filtering to the site. Here you build a persistent inclusion or exclusion list, and the app applies it while browsing, so a set of tags you do not want to see is filtered once and then applies everywhere you go, including on the main page and in random browsing, not only in a search you typed.

Blurring rather than hiding is the notable design decision. A blurred tag is still rendered, so the layout does not shift when a gallery is filtered, which matters on a phone screen where a hidden tag changes the height of every card. The difference between the two modes is a preference rather than a limitation, and the app exposes both.

The PIN lock is a local gate on the app itself. It does not encrypt anything and it does not change how content is stored, but it stops someone picking up your unlocked phone from opening the app.

Android 8 is the floor, and devices on API 26 and 27 get a reduced build

The app works for devices from API 26, which is Android 8, and above. For devices running Android 8 specifically, meaning SDK 26 and 27, there is a separate APK with pre28 in its name, and the README states plainly that support for that version of the app will be reduced.

That is an unusual arrangement and a sensible one. API 28 is Android 9, and most of the current user base is well past it, so the older build exists for the tail rather than as a first-class target. The warning is the important part: it tells you that the pre28 variant receives fewer fixes, so an issue you hit there may simply not be getting addressed.

The practical consequence for installation is that you have to know which build you need. The releases are published on GitHub, and the naming convention in the release assets is the signal. Choosing the wrong one produces an install failure or an unstable experience rather than a clear error message, so matching the variant to your device version is the first thing to check.

The repository is a modern Android project built with Gradle, with build.gradle.kts and settings.gradle.kts in Kotlin DSL, a gradlew wrapper and gradlew.bat for Windows, an app/ module, a data/ module, a docs/ directory, scripts/ and a crowdin.yml. The gradle.properties and .editorconfig files suggest a project with an opinion about formatting, and the presence of a DCO file at the root says commits are expected to carry a Developer Certificate of Origin sign-off.

Building from source follows the standard Gradle wrapper layout

The README does not document a build procedure, so the practical guidance comes from the repository layout rather than from a documented command. The project ships the Gradle wrapper, which means the wrapper scripts in the repository root are the entry point rather than a system-wide Gradle installation.

The build files are in the Kotlin DSL, with build.gradle.kts and settings.gradle.kts at the root, an app/ module for the Android application, a separate data/ module, and a gradle/ directory holding the wrapper configuration. The gradle.properties file holds project-wide settings. The scripts/ directory and the .github/ directory sit alongside them, with the latter holding the workflows and templates for the repository.

Because the README gives no build command, no exact invocation can be quoted from it, and anyone building this should follow the conventional Gradle wrapper route their own tooling expects. What the layout does tell you is that the project is a multi-module Android application with a separate data module, which is a sensible split when the data layer wraps the service API and the app layer holds the UI.

For most people the release APK is the right route. Building from source only makes sense if you want to change the API implementation, add a language the Crowdin project does not cover yet, or produce a build with different configuration.

Translations run through Crowdin, and a missing language needs an issue

Translation is handled as a workflow rather than as a pile of pull requests. The project points to a Crowdin project for NClientV3, and a crowdin.yml file in the repository root is what connects the codebase to it. The contributor list shows how active that channel is, with separate credits for Arabic, Brazilian Portuguese, Japanese, Spanish, Turkish, German, Russian, French, Ukrainian, Chinese Simplified and Traditional Chinese translations, among others.

The credit for a new language picker alongside the Chinese translations suggests the app moved to a picker interface at some point rather than relying on the system locale alone, which is a small quality of life decision that matters when a user reads in a language that is not the device language.

If a language you need is missing, the README asks you to write an issue and says the language will be added. That is a reasonable process, and it is also the point where you discover how much of the app is actually translated, since a language listed as available may still have gaps in the strings.

One contributor in the original project's list is credited for Cloudflare bypass work, and the fork inherits that history. Whether such work still functions against the current site is not something the repository states, and the app is labelled unofficial, so any protection handling is best treated as something that can break without notice.

Apache 2.0 with a DCO, and releases that stopped in May

The licence is Apache License 2.0, and the repository carries the full text in the README along with a LICENSE file and a separate DCO file at the root. Copyright is stated as 2024 maxwai.

text
Copyright 2024 maxwai

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Apache 2.0 is a permissive licence with an explicit patent grant, which is a good fit for an application whose code is distributed as an APK and whose libraries are separately licensed, as the project lists them. The bundled libraries are named with their own licences: OKHttp, PersistentCookieJar, JSoup, Glide, AmbilWarna and AndroidFastScroll. The presence of JSoup alongside Glide is worth noting, since JSoup is an HTML parser and its presence hints that parts of the app still work on parsed pages rather than on the new API alone. The DCO means contributors sign off that they have the right to submit their work, a lighter requirement than a full contributor licence agreement.

The release history shows a steady run of builds in 2026, with 4.2.7 on 2026-05-11, 4.2.6 on 2026-05-02 and 4.2.5 on 2026-04-17, and the repository is not archived with the last push on 2026-10-19. So the tree is still being worked on even though the newest tagged build is several months behind. There is also a SECURITY.md file, which tells you there is a process for reporting problems in the app.

Editorial conclusion

NClientV3 is worth trying if you browse this particular site from Android and want tag filtering, offline reading and a PIN lock that the web version cannot give you, since the new API implementation is the substantive change over the original project. It is the wrong tool if you need the two oldest Android versions, because the pre28 build is explicitly a reduced-support path, and it is the wrong tool for anything that requires an official API contract, since this is an unofficial client with no stability guarantee from the service side. Before you install it, verify three things yourself: that the APK you download matches the Android version on your device, that you are comfortable with the network requests the app makes to the service, and that the Apache 2.0 licence plus the DCO file in the repository root covers how you intend to use and build on it.

Frequently asked questions

What is NClientV3 and what is it a fork of?

NClientV3 is an unofficial NHentai Android client, forked from the original NClientV2 project by Dar9586. A contributor is credited for the initial implementation of the new API, which is the substantive change over the original project.

What Android versions does NClientV3 support?

The app works for devices from API 26, which is Android 8, and above. Devices on SDK 26 and 27 need a separate APK with pre28 in the name, and the project states that support for that version will be reduced.

Which features does NClientV3 add beyond browsing and search?

Beyond browsing the main page and searching by query or tags, you can include or exclude tags with a blur or hide presentation, download manga, favorite galleries, and enable a PIN to access the app. Custom features include sharing galleries, opening in the browser and bookmarking.

How is NClientV3 translated?

Translations are managed through a Crowdin project, connected to the codebase by a crowdin.yml file at the repository root. If your language is missing, the project asks you to open an issue and says the language will be added.

What licence does NClientV3 use?

The project is licensed under Apache License 2.0, copyright 2024 maxwai, with the full text in the README and a LICENSE file in the repository. Bundled libraries are licensed separately, including OKHttp, JSoup, Glide, PersistentCookieJar, AmbilWarna and AndroidFastScroll.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. maxwai/NClientV3 on GitHub
  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/maxwai-nclientv3.svg)](https://hysenlabs.com/projects/maxwai-nclientv3)

Was this useful?