I Built a Manga Reader That Works on Every Platform --Here's How A developer built Nyora, a free, open-source manga reader that works across Android, iOS, macOS, Windows, Linux, Web, and Docker, featuring AI-powered on-device translation and cross-platform sync without requiring an account. The project began as a fork of Kotatsu and Aidoku, and its key technical challenge was creating a stable cross-platform manga ID hash for sync. 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. Every manga reader makes you choose: 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. | 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 | | No account needed to read. Cloud sync is opt-in. This is the flagship feature. Instead of dumping translated text over the artwork: Each platform uses the best local engine: There's also an Ensemble AI Narrative Engine that tracks character names and speaking styles across chapters so translations stay consistent. 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. Sync library, categories, reading history, bookmarks, and exact page progress across all six platforms. Two sign-in methods: Self-hostable — the backend is just Supabase/PostgreSQL with row-level security. The server stores only reading state, never page images. | 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 | Nyora began as a fork of Kotatsu https://github.com/KotatsuApp/Kotatsu on Android. I loved the data-driven source engine approach but wanted it on every platform. I forked Aidoku https://github.com/Aidoku/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. Web no install : web.nyora.xyz https://web.nyora.xyz Native apps : GitHub Releases https://github.com/Nyora-Manga Self-hosted : docker run -d -p 8080:8080 -v nyora-data:/data hasan72341/nyora Python : pip install nyora Discord : Join the community https://discord.gg/7aZcgbgbqU 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 https://github.com/Nyora-Manga and Discord https://discord.gg/7aZcgbgbqU to get started. Built with Kotlin, Swift, TypeScript, and the stubborn belief that manga readers shouldn't require compromises.