Skip to content

CHANG-JUI-LIN/Yuedu-reader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

636 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yuedu Reader

Yuedu Reader icon

A native iOS reader powered by CoreText.
EPUB / TXT / Markdown / RSS / Manga / OPDS / WebDAV / TTS / CJK vertical writing.

简体中文 · 繁體中文 · English

Download on the App Store Join the TestFlight beta Join the Telegram group Featured in iOS Dev Weekly #751

Features · Screenshots · Downloads · Getting Started · Troubleshooting · Contributing · License

Yuedu Reader CJK vertical reading demo

Yuedu Reader is an iOS-first reading app for serious long-form reading. It focuses on native typography, CJK vertical writing, local libraries, manga, RSS, web article normalization, TTS, OPDS and WebDAV import/sync, and user-provided book-source workflows.

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

Why Yuedu

  • Native iOS reader UI built with SwiftUI and CoreText, not a WebView-first reading surface.
  • CoreText pagination for stable reading positions, highlights, and TTS progress.
  • CJK vertical writing with right-to-left reading flow and vertical table of contents.
  • Local-first library for EPUB, TXT, Markdown, and local manga archives.
  • Online reading workflows through user-provided RSS, OPDS, WebDAV, web pages, and compatible source rules.
  • Clear project boundary: Yuedu does not bundle, recommend, or distribute copyrighted content sources.

Features

Area Capability Status
Local books EPUB reflowable reading with chapter navigation, images, links, bookmarks, highlights, annotations, and TTS Available
EPUB3 features MathML, SVG, embedded fonts, media overlays, fixed-layout, BIDI/RTL, canvas, CSS multi-column, PLS/SSML, CFI, bindings, epub:switch, indexes, multiple renditions Available
Local books TXT and Markdown reading Available
Manga Local .cbz / .zip manga archives and compatible source-based manga reading Available
Audiobooks Book-source audiobook streaming and player Available
Reader modes Paged and scroll reading modes Available
CJK typography Vertical writing, right-to-left flow, CJK punctuation handling, and vertical table of contents Available
Library import OPDS catalog import Available
Sync/import WebDAV import and sync Available
Online reading RSS / Atom feeds and native article reading Available
Online reading Web article normalization into clean long-form reading content Available
Book sources Legado-compatible source rules for user-provided online reading workflows Available
Rendering quality IDPF EPUB3 sample suite validated (up to Linear Algebra), MathML rendering, EPUB regression samples and compatibility checklist Available
EPUB layout Fixed-layout EPUB Available
Accessibility Broader VoiceOver, Dynamic Type, and touch target work Planned

Supported Formats

Category Supported Notes
Local books EPUB, TXT, Markdown EPUB support focuses on reflowable books and native CoreText rendering.
Manga archives CBZ, ZIP Opened in a dedicated image reader.
Online feeds RSS, Atom Articles are extracted and read inside the native reader.
Catalogs and sync OPDS, WebDAV Import books from catalogs and WebDAV servers; sync through WebDAV.
Source rules Legado-compatible rules Format compatibility only; no third-party source rules are bundled.
Not the current focus PDF, MOBI, AZW3, FB2, DOCX Yuedu is intentionally iOS-native and CoreText-focused rather than a broad cross-platform format suite.

Screenshots

Library and Reader

Yuedu presents a local-first bookshelf, native reader controls, CJK vertical reading, annotations, TTS, manga, RSS, and import workflows.

Yuedu library bookshelf Yuedu reader controls Yuedu dark mode reader

Reading Experience

CJK vertical writing, highlights, annotations, and TTS are part of the native reading surface.

CJK vertical writing Yuedu highlights and annotations Yuedu TTS playback

Workflows

Yuedu also covers manga reading, RSS reading, OPDS/WebDAV import, and compatible user-provided book-source workflows.

Yuedu manga reader Yuedu RSS reader Yuedu OPDS and WebDAV import

Online book-source web-novel reading demo

Downloads

Yuedu Reader currently targets iOS 18.0+.

Roadmap

Now

  • Polish audiobook streaming experience.

Next

  • Better web article normalization.
  • Richer manga sources and reader gestures.

Later

  • TestFlight feedback loop.
  • More accessibility work.
  • More automated rendering regression tests.

See open issues labeled help wanted or good first issue if you want to contribute.

Getting Started

Requirements for development:

  • iOS 18.0+
  • Xcode 16+
  • Swift 5 language mode in the Xcode project
git clone https://github.com/CHANG-JUI-LIN/Yuedu-reader.git
cd Yuedu-reader
open Yuedu-Reader.xcodeproj

Select the Yuedu-Reader scheme and build for a simulator or device. Or run:

./scripts/build.sh

Troubleshooting

  • App Store vs TestFlight: App Store is the stable release. TestFlight receives newer builds first and may include unfinished behavior.
  • EPUB rendering bugs: Please use the EPUB rendering bug template. Include screenshots from Yuedu, screenshots from Apple Books if possible, EPUB type/version, chapter/page location, expected behavior, and actual behavior.
  • WebDAV, OPDS, RSS, or source-rule issues: Include the URL or server type, the visible error message, the action that failed, and confirmation that the content source is legal and user-provided.
  • Copyrighted content: Do not upload copyrighted books publicly. A minimal synthetic EPUB or redacted sample is preferred.

Project Boundary

Yuedu Reader is a reader engine and app shell. It does not include, host, recommend, or distribute copyrighted content sources.

Users are responsible for making sure imported files, RSS feeds, websites, custom rules, cookies, accounts, and generated content comply with applicable laws, copyright requirements, and website terms.

The project will not accept contributions for built-in piracy sources, DRM circumvention, paywall bypassing, private-token sharing, cookie harvesting, or anti-bot bypass logic.

Legado compatibility is a source-rule format compatibility target only. Yuedu Reader does not bundle third-party source rules and is not affiliated with the Legado project.

Architecture Notes

Most EPUB readers use WebView. Yuedu uses CoreText for the main reader so it can control pagination, text ranges, highlights, TTS synchronization, and CJK vertical rendering more precisely.

Yuedu currently has two EPUB rendering paths that share the same CSS resolution and CoreText drawing layer:

  • Legacy HTML attributed-string builder
  • RenderableNode IR pipeline

Most contributors do not need to understand the full engine before working on UI, docs, localization, EPUB testing, WebDAV, RSS, or source-rule features.

For details, see:

Contributing

Yuedu welcomes focused contributions in documentation, screenshots, EPUB testing, localization, accessibility, WebDAV/OPDS testing, reader UI polish, and rendering compatibility.

Start here:

Repository Layout

Modules/
├── Core/                 # EPUB/TXT/MD parsers, CoreText engine, BookSource, RuleEngine, TTS, Comic
├── Features/             # SwiftUI screens: Bookshelf, Reader, RSS, BookSource, Search, Settings...
├── Services/             # LibraryStore, Online, WebDAV, iCloud, OPDS, Network, Account...
└── SharedUI/             # DesignSystem, Components, Extensions, Adaptive layout
Resources/                # Assets.xcassets, Assets/, en.lproj, zh-Hans.lproj, zh-Hant.lproj
Targets/Yuedu/            # SharedApp, iPhone/, iPad/ entry points

Development Notes

  • Use localized() for user-facing strings; update all three .lproj files.
  • Keep reading position based on content coordinates, not page indexes.
  • Style UI with design-token APIs: DSColor, DSFont, DSSpacing.
  • Add a compiling SwiftUI preview (#Preview or PreviewProvider) when creating or changing view code wherever practical.
  • CSS properties added to ResolvedStyle must mirror in RenderStyle, update RenderStyle.from, and handle both rendering paths.
  • Nested block CSS margins accumulate through inheritedBlockMarginLeft.
  • Keep source/rule-engine work limited to legal, user-provided content workflows.

AI-Assisted Development

This repository is developed with heavy AI-assisted collaboration, including code generation, refactoring, documentation, and review support. Human review and project ownership remain part of the workflow.

If you strongly prefer strictly human-authored code or are uncomfortable with AI-assisted development, please review the project with that expectation in mind.

License

MIT. See LICENSE. This project links against Readium components, which are BSD-licensed.

About

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

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages