I Built a Manga Reader That Works on Every Platform — Here's How
Nyora is a free, open-source manga/manhwa/manhua reader for Android, iOS, macOS, Windows, Linux, Web, and even Docker — with AI-powered on-device translation and cross-platform sync.
The Problem
Every manga reader makes you choose:
- Free but ad-riddled (most Android readers)
- Polished but paywalled (commercial apps)
- Powerful but single-platform (Tachiyomi, Aidoku)
I wanted one library — same titles, same progress, same bookmarks — on my phone, laptop, and browser. No ads. No account required. So I built it.
What Nyora Does
Every Platform, One App
| Platform | Distribution |
|---|---|
| Android | APK (sideload) |
| iOS/iPadOS | IPA via AltStore/SideStore |
| macOS |
.dmg or brew install --cask nyora
|
| Windows |
.exe (x64 + ARM64) |
| Linux |
.deb, .rpm, or curl installer |
| Web | web.nyora.xyz — zero install |
| Docker | Single container, self-hosted |
No account needed to read. Cloud sync is opt-in.
AI Translation That Understands Manga
This is the flagship feature. Instead of dumping translated text over the artwork:
- Detects text baked into speech bubbles and captions
- Translates using on-device ML
- Typesets the result back over the original artwork
Each platform uses the best local engine:
- Android: Google ML Kit + ONNX Runtime
- iOS: Apple Intelligence + Google Translate
- macOS: Apple Vision + MangaOCR CoreML
- Windows: Windows OCR
- Linux: Tesseract
There's also an Ensemble AI Narrative Engine that tracks character names and speaking styles across chapters so translations stay consistent.
1,100+ Sources
The Android app pulls from 1,100+ manga sources via 35 generic engine templates (Madara, FoolSlide, MMRCMS, etc.). Web has ~390 live, health-checked sources. Desktop ports are growing toward parity.
Free Cloud Sync
Sync library, categories, reading history, bookmarks, and exact page progress across all six platforms. Two sign-in methods:
- Google OAuth
- Nyora Cloud (email + password, free)
Self-hostable — the backend is just Supabase/PostgreSQL with row-level security. The server stores only reading state, never page images.
Reader Features
- Paged and webtoon (continuous vertical) modes
- LTR / RTL / vertical layout
- Pinch zoom, double-page spreads
- Per-title settings (direction, layout, fit remembered per series)
- Dynamic color correction
- AMOLED true-black theme
- Material You theming
- Home screen widgets (iOS)
- App-lock with PIN or fingerprint
- Incognito mode
- Tracker integrations: AniList, MAL, Shikimori, Kitsu
Tech Stack
| Component | Stack |
|---|---|
| Android | Kotlin 2.2, Jetpack Compose, Hilt, Room, Coil 3, ML Kit |
| iOS | Swift, SwiftUI (fork of Aidoku) |
| macOS | SwiftUI + Compose Multiplatform |
| Windows/Linux | Compose Multiplatform (Kotlin) |
| Web | TypeScript SPA (100% client-side, no framework) |
| Python SDK |
pip install nyora — bundled engine + TUI |
| JS SDK |
npm install nyora-sdk — cloud-powered |
| Sync backend | PostgreSQL, RLS, last-write-wins |
| Marketing site | Astro |
How It Started
Nyora began as a fork of Kotatsu on Android. I loved the data-driven source engine approach but wanted it on every platform. I forked Aidoku for iOS and started porting the source engine to Swift. Desktop came next via Compose Multiplatform. Web was a clean-room TypeScript rebuild.
The hardest part: cross-platform manga ID hashing. Every platform needed to resolve the same manga to the same UUID for sync to work. I built a stable nyoraId hash that works identically across Kotlin, Swift, TypeScript, and Python.
Try It
Web (no install): web.nyora.xyz
Native apps: GitHub Releases
Self-hosted: docker run -d -p 8080:8080 -v nyora-data:/data hasan72341/nyora
Python: pip install nyora
Discord: Join the community
What's Next
- TestFlight builds for iOS
- Source parity across all platforms
- Refined translation quality and language coverage
- The iOS NyoraEngine port — ~1,300 source parsers to port from Kotlin to Swift
Contributing
Nyora is GPLv3 (mobile apps) and Apache-2.0 (everything else). The source engine templates are beginner-friendly and highly parallelizable. If you've ever wanted to contribute to open source, porting a parser is a great first PR.
Check the GitHub and Discord to get started.
Built with Kotlin, Swift, TypeScript, and the stubborn belief that manga readers shouldn't require compromises.
Top comments (0)