Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
CHANG-JUI-LIN/Yuedu-reader: Yuedu is a native iOS reader that supports multiple book formats, RSS subscriptions, and user-provided book sources.

CHANG-JUI-LIN/Yuedu-reader: Yuedu is a native iOS reader that supports multiple book formats, RSS subscriptions, and user-provided book sources.

21 hours ago

Yuedu

Yuedu

Apple Books-inspired open-source reader for iOS.

简体中文 · 繁體中文 · English

Download on the App Store Join the TestFlight beta Featured in iOS Dev Weekly #751 iOS 17.0+ MPL 2.0 License

Featured in iOS Dev Weekly #751 — From WebView to CoreText: Building a Native EPUB Reader for iOS.

Yuedu is an open-source reading application focused on a high-quality local and open reading experience. One app for EPUB, Kindle files, PDF, comics, audiobooks, RSS, and open catalogs — books are rendered natively with CoreText, not in a WebView.

Features

| | | |:--|:--| | Formats | EPUB3 · MOBI / AZW3 · PDF · TXT · Markdown · CBZ comics · Audiobooks | | Content | Local library · WebDAV · OPDS · Calibre · RSS · Sources (Legado format, including video) · Modules · Public-domain libraries (Project Gutenberg, Aozora Bunko) | | Discover | An Explore home you arrange yourself · One search across your shelf, sources, remote libraries and modules · A Book Details page for every work · AI Picks | | Reading | Vertical writing · Full-book search · Text-to-speech · Themes and theme packs · Highlights and notes · Bookmarks | | More | Reading statistics · iCloud sync · Widgets · iPad and iPhone landscape |

Why CoreText, not WebView

Most readers wrap content in a WebView. Yuedu renders every page with CoreText, which gives precise pagination, true CJK vertical writing, frame-accurate text-to-speech sync, and native text selection — at native performance. The full story is in From WebView to CoreText.

Architecture

UI (SwiftUI)
  ↓
Reader (CoreText)
  ↓
Parsers (EPUB / MOBI → EPUB / PDF / TXT / Markdown / CBZ / RSS / Audio)
  ↓
Content (Local · Sources · Modules · OPDS / WebDAV / Calibre)
  ↓
Storage (local-first) · Sync (iCloud / WebDAV)

Repository layout

| Folder | Contents | |:--|:--| | Modules/ | App source: Core (reader engine, parsers, rule engine), Services (library, sync, network), Features (SwiftUI screens), SharedUI (design system) | | Targets/ | App entry point, dependency setup, and the iPad shell | | Widget/, ShareExtension/ | Home Screen widget and share extension | | Resources/ | Asset catalog, localized strings (zh-Hant, zh-Hans, en, ja, ko), and the bundled official modules | | Packages/ | Local Swift packages (CLexbor, SwiftSoup) | | Tests/ | Unit tests (Tests/iOS), UI tests (Tests/iOS-UI), and their fixtures | | docs/ | User guides, CoreText docs, release notes, and the layout corpora the tests read | | Technotes/ | Design notes and post-mortems | | functions/, gateway/ | Firebase Cloud Functions and the account gateway; Firestore and Storage rules sit at the root | | scripts/ | Simulator, test, localization, and catalog tooling | | xcconfig/, Configuration/, ci_scripts/ | Build settings, the StoreKit test configuration, and the Xcode Cloud script |

Build

Requirements: Xcode 27.1 or later · iOS 17.0+ · Swift 6

git clone https://github.com/CHANG-JUI-LIN/Yuedu-reader.git
cd Yuedu-reader
open Yuedu-Reader.xcodeproj

The project expects a GoogleService-Info.plist at the repository root. It is not in the repository (it is gitignored), and the build stops without it: add an iOS app to your own Firebase project and put its plist there.

Then select a simulator (or your device) and run. Self-built versions need their own signing configuration and bundle identifier. Publicly redistributed forks must use distinct app names, icons, and branding and must not imply official endorsement.

Official App Store build

The source code is open source. The App Store version is the official build maintained, signed, reviewed, distributed, and supported by the project owner. Its purchase price supports ongoing development and release maintenance.

Documentation

User guides

  • Sources (Legado format): Guide index · 常见症状对照表 — import, five-stage validation, rule debugger, syntax cheat sheet, differences from Legado, and symptom→fix troubleshooting.
  • Modules: 模組開發文件 (Traditional Chinese) — the JSON format behind lists, search, ISBN lookup, and in-app reading. The built-in official modules use the same format, so they double as examples.
  • Battery SVG templates: English · 简体中文 · 繁體中文 — template format, dynamic markers, supported SVG subset, and import troubleshooting.
  • Release notes: 3.0.1 · 3.0.0 (Traditional Chinese).

Developer reference

Contributing

Contributions are welcome — see CONTRIBUTING.md for conventions and the PR process.

License

Source code is licensed under the Mozilla Public License 2.0. The Yuedu name, app icon, logo, screenshots, and other brand assets are not licensed under the MPL; see TRADEMARKS.md. Versions released before the license transition remain available under the license that applied when they were published; see LICENSING.md.

Chat with me