ImmersiveReader is an iOS/iPadOS EPUB reader built with SwiftUI, SwiftData, and Readium.
It focuses on EPUB3 reading with synced read-aloud playback, active text highlighting, upload/import workflows, custom font support, reading progress restore, chapter navigation, reader appearance controls, and resume-aware playback.
| Reader | Library | Upload | Settings |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Local network upload server for
.epub,.ttf, and.otffiles - Read-aloud playback with active text highlighting
- Tap-to-play on spoken text
- Auto scroll with continuous reading
- Custom font import and family-based font management
The app has three tabs:
Books: browse, import, refresh, delete, and open booksUpload: run a local upload server and upload EPUB or custom font filesSettings: reader typography, custom fonts, theme, and highlight color settings
- Reader opens in scroll mode by default
- Playback bar appears only for books with parsed media overlays
- Active spoken text is highlighted in the EPUB view
- The highlight color can be customized from Settings
- Custom fonts can be imported from Settings and selected as one font-family choice even when they include multiple files such as regular and italic
- Imported custom font families are available after reopening the current book
- Chapter selection can jump playback to the first matching clip
- Manual scroll-and-stop can retarget playback to the first visible playable fragment
- Reopening a book with a saved last-played segment navigates to that segment and highlights it without autoplay
- Reopening a book with no saved played segment does not pre-highlight any text
- Imported EPUB files are stored in
Documents/Books/ - Covers are stored in
Documents/Cache/Covers/ - Media overlay manifests are stored in
Documents/Cache/MediaOverlays/ - Audio cache files are stored in
Documents/Cache/AudioCache/ - Upload staging files are stored in
Documents/Cache/Uploads/ - Imported custom fonts are stored in
Documents/Cache/Fonts/ - App state, settings, and reading progress are stored in
Documents/Cache/state.json
Imported EPUBs are intended to appear in the Files app under On My iPhone/ImmersiveReader/Books.
Deleting the app Documents folder resets the library, settings, reading progress, custom fonts, and caches.
- SwiftUI
- SwiftData
- Readium Swift Toolkit
- AVFoundation
- Network.framework
Open the Xcode project:
Immersive Reader.xcodeproj
Or build from the command line:
xcodebuild -project "Immersive Reader.xcodeproj" -scheme "Immersive Reader" -destination 'generic/platform=iOS Simulator' build- The upload server is intended for devices on the same local network.
- HTTP upload accepts
.epub,.ttf, and.otffiles. - Uploaded
.ttfand.otffiles are auto-imported intoSettings > Reader > Custom Fontsusing the same code path as the in-app custom font importer. - Read-aloud features depend on EPUB media overlays being present and parsed successfully.
- Readium scroll mode in this setup is per-resource rather than a fully stitched whole-book vertical scroll.



