Text-to-speech for EPUB on iPhone: the speech service you choose, every word highlighted as it is spoken.
If you like OpenReader, give it a ⭐ on GitHub — it helps others find it.
OpenReader is an iPhone app that reads EPUB documents aloud with the speech service you choose, using your own account with that service.
- 🗣️ The voice you choose: Fish Audio, Azure, Speechify, OpenAI, any OpenAI-compatible server, or a Kokoro-FastAPI server of your own.
- ✨ Every word highlighted as it is spoken, over its sentence, in your own colours.
- 📥 Offline narration: save a book's audio chapter by chapter, then listen without a connection.
- 🔄 Sync with Zotero-OpenReader: your reading position moves between the phone and Zotero on your computer, through your own WebDAV folder.
- 📖 Word Lookup and translation: long-press a word for its meanings, or translate a passage.
- 🎨 Themes, fonts, font size, margins and text alignment.
- 🎧 Lock Screen and Dynamic Island controls while it reads.
- 🔒 No account, no server of its own, no analytics. Text goes to a service only after you allow it.
OpenReader comes three ways. Reading, Word Lookup, translation and sync are free in all of them. Only reading aloud is paid for, and only on the App Store, where the purchase supports OpenReader's development.
| Where | Reading aloud |
|---|---|
| TestFlight beta | Free |
| Built from source | Free |
| App Store (coming soon) | Free for 30 days, then a one-time in-app purchase |
Apple charges nothing for in-app purchases in a TestFlight beta, so reading aloud stays free there.
- On an iPhone with iOS 17.2 or later, open the TestFlight link, install Apple's TestFlight app, then install OpenReader from it.
- In OpenReader, open Settings → Providers, choose a service, paste your API key and turn Enabled on.
- Add an EPUB with ⋯ → Import file in the Library, or share one to OpenReader from Files. Open it and press Play.
- Support: https://xujialiu.github.io/OpenReader/
- Privacy policy: https://xujialiu.github.io/OpenReader/privacy.html
- Author: Xujia Liu · xujialiuphd@gmail.com
Its desktop counterpart is Zotero-OpenReader, a plugin for Zotero. The two carry a reading position between them through the owner's own WebDAV storage.
OpenReader is an Expo SDK 57 app with native modules of its own, so it runs as a development build rather than in Expo Go. docs/install-on-simulator.md and docs/install-on-iphone.md describe both builds.
A build from source reads aloud for free once the App Store's purchase is turned off. Set EXPO_PUBLIC_OPENREADER_UNLOCKED=1 in the environment of the build, for example EXPO_PUBLIC_OPENREADER_UNLOCKED=1 npx expo run:ios. Without it, the build asks for the same purchase as the App Store, and under your own bundle ID there is nothing to buy.
Copyright (C) 2026 Xujia Liu.
OpenReader is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. See LICENSE.
Contributions are accepted on the terms in CONTRIBUTING.md, which also let the author ship them in the App Store copy.
