A lightweight, modern, cross-platform client for nhentai.net.
NH Reader is not a web wrapper. It is a native desktop and mobile application with its own custom UI and a materially better search & filter and global blacklist experience than the site provides. It imports as much data as the site's API makes available — galleries, tags, languages, categories, artists, characters, parodies — and lets you slice it locally, instantly.
18+ only. This application is intended for adults only. By using it you confirm that you are of legal age in your jurisdiction to view adult content.
- 🔍 Search that actually works. A filter drawer covers text, language, category, per-type tag
include/exclude (artist, character, parody, group, …), page-count ranges, and six sort modes —
compiled into native nhentai query syntax (
language:english,-tag:...,pages:>50). - A blacklist you can trust. Global, persistent, applied server-side (query
-tag:excludes) and client-side (hide/blur in grids), with a master toggle. It never silently breaks the grid or the reader. - Native and fast. Tauri 2 (Rust
reqwest) backend, native OS window decorations with an in-app top bar, SvelteKit SPA frontend with Svelte 5 runes. Everything runs locally; images load lazily with a Rust image-proxy fallback (backed by a disk cache) when the CDN 404s. - Official archive downloads. Adopts nhentai API v2's dedicated archive endpoint (
POST /api/v2/galleries/{id}/download) to fetch pre-built zip/cbz archives directly instead of walking CDN page URLs. - Background jobs built in. Gallery downloads, image prefetch, cache/account maintenance, and an optional Popular auto-refresh run in a throttled background service with live progress. Launching the app again on desktop focuses the running window (single instance).
- Private & versatile account sync. Favorites, history, blacklist, and settings live locally on your device in SQLite (
database.sqlite). An optional account sign-in modal supports both official API Keys (bypasses Cloudflare CAPTCHAs) and direct credentials, powering live profile display and synchronized blacklists. - Mihon-inspired floating navigation. Modern thumb-friendly floating navigation bar with a 4px corner radius, backdrop blur elevation, and responsive full-width page-fitting settings layouts.
- Speaks your language. Interface defaults to your system locale and can be chosen in Settings. English is shipped out of the box with simple 100% drop-in JSON files for community-contributed translations.
- Native installers & mobile packaging. Native NSIS (both per-user and per-machine) and WiX MSI on Windows, DMG on macOS, deb/AppImage on Linux, APK on Android.
| Platform | Support |
|---|---|
| Windows 10+ | ✅ Supported (NSIS installer, WiX MSI, portable zip) |
| macOS 10.13+ | |
| Linux (x86_64) | ✅ Supported (deb, AppImage) |
| Android | |
| iOS |
Warning
Platform Testing Notice (Android, macOS & iOS): These targets are community-supported and untested by the maintainer. iOS builds require macOS, Xcode, and Apple signing credentials.
The project does not publish release assets. Build and sign packages locally using the
commands in package.json and the installation guide:
- 🪟 Windows:
NH Reader_<version>_x64-setup.exe(NSIS) orNH Reader_<version>_x64_en-US.msi(WiX). - macOS:
NH Reader_<version>_x64.dmg(oraarch64for Apple Silicon). - Linux:
nh-reader_<version>_amd64.debornh-reader_<version>_amd64.AppImage. - Android:
nh-reader_<version>_universal.apk. - iOS: Xcode archive or IPA, built on macOS with Xcode and Apple signing credentials.
- Portable: Standalone zip package with
.portableruntime isolation mode.
Build packages locally with npm run tauri:build:release; use npm run tauri:android:* or
npm run tauri:ios:* for mobile targets. When you want signed packages, run the opt-in
npm run sign command — signing is never part of the build. Windows' generated self-signed certificate is not a trusted publisher identity.
Requires Node.js 20+, Rust stable, and the per-platform Tauri prerequisites (docs).
npm install
npm run check # svelte-kit sync + svelte-check (frontend type/lint)
cargo check # run inside src-tauri/ (backend)
npm run tauri:dev # run in dev mode (fixed Vite port 14440)Full release bundle + installer:
npm run tauri:build:release # runs tauri build (native NSIS/MSI/DMG/deb bundles)
npm run tauri:build:debug # debug bundle buildHere is the app's high-level architecture: the SvelteKit SPA talks to Tauri commands in Rust, which wrap the throttled nhentai API client, local SQLite persistence, background worker, and disk image cache.
flowchart TD
A[SvelteKit SPA] -->|"invoke"| B[commands.rs]
B --> C[nh_desktop.rs API client]
B --> D[db.rs SQLite]
B --> S[service.rs background worker]
S --> K[image_cache.rs disk cache]
C -->|"throttled reqwest"| F[nhentai.net API]
F --> G[nhentai image CDNs]
A -->|"direct image load"| G
A -.->|"proxy fallback"| K
src/ # SvelteKit SPA frontend (static, adapter-static)
lib/ # flat modules: api, client, types, query, cache, image, format
lib/i18n/ # LocaleCatalog class, en.json default, drop-in packs
lib/stores/ # settings, library, blacklist, account, service, locale (runes + SQLite cache)
lib/components/ # GalleryCard, GalleryGrid, FilterPanel, BlacklistView, ...
routes/ # latest, popular, search, favorites, history, blacklist, settings, gallery, reader
src-tauri/ # Rust backend (Tauri 2)
src/nh_desktop.rs # nhentai.net API client (reqwest, throttled)
src/commands.rs # Tauri commands
src/db.rs # local SQLite persistence with poison-recovered locks
src/service.rs # background worker queue (downloads, prefetch, maintenance, sync, auto-refresh)
src/image_cache.rs # disk image cache (cache-first proxy fallback)
Full documentation lives in the docs/ folder:
- Project page — GitHub Pages site with the landing page and documentation pages.
- Documentation Home · Getting Started · Search & Filters
- Blacklist · Reader & Galleries · Settings & API Key
- Installation & Maintenance · Localization · Architecture
- Security · Privacy · Troubleshooting
- FAQ · Development & Contributing
Also see CHANGELOG.md, PRIVACY.md, TOS.md, SECURITY.md, and CONTRIBUTING.md in this repository.
The site at https://helix-origin.github.io/NH-Reader/ is published from the docs/ folder through repository Settings → Pages. Pages uses docs/translate.js for in-page Google Translate; GitHub-rendered Markdown cannot run that script and does not offer translation controls. The old .github/workflows/pages.yml builds a staged site for a GitHub Actions Pages source, but it cannot deploy to the currently selected docs/ source. The Tauri application is never deployed as a website.
See CONTRIBUTING.md and the Development & Contributing guide for building, testing, and translation instructions. Be respectful, keep changes scoped, and match the existing conventions.
⚖️ BSD-3-Clause License — see LICENSE file for details. NH Reader is an independent client by HELIX Origin
and is not affiliated with, endorsed by, or sponsored by nhentai.net. Please respect the site's
terms of service and rate limits.