An Android ebook reader built for momentum, focus, and high-speed reading.
Kairo is an RSVP-first ebook reader for Android. It lets you import DRM-free EPUB and MOBI books, read them in a comfortable scrollable reader, and jump into a tuned RSVP playback experience the moment you want to accelerate.
This project is for readers who want less friction between opening a book and actually moving through it. It is also for people who enjoy experimenting with reading speed, pacing, typography, and focus-friendly interfaces.
Most reading apps treat rapid serial visual presentation as a side feature. Kairo starts from the opposite direction.
Kairo is designed around a simple idea: reading should feel intentional. Sometimes that means a clean, traditional reader with chapter navigation, bookmarks, and progress tracking. Sometimes it means a minimal RSVP mode that surfaces one word or short phrase at a time with pacing that respects punctuation, sentence flow, long words, and readability.
The result is an Android reader that sits somewhere between an ebook app, a speed-reading tool, and a focused reading environment.
- Imports DRM-free
.epuband.mobifiles from device storage - Builds a local library with covers, progress, and resume state
- Opens books in a scrollable reader with chapter and page-aware navigation
- Launches RSVP reading from your current reading position
- Persists reading position, bookmarks, and reader preferences
- Gives fine-grained control over RSVP timing, display, rhythm, and readability
- Supports focus mode options for a quieter reading experience
- Includes language-aware tokenization foundations for Latin, CJK, and RTL text flows
- Import books directly from Android's document picker
- Browse your collection with extracted cover art and metadata
- Track completion progress and estimated time remaining
- Manage bookmarks from a dedicated library tab
- Scrollable reading view optimized for long-form text
- Chapter navigation and table of contents access
- Page-aware progress indicators and ETA
- Inline image handling for illustrated books
- Quick handoff into RSVP mode from the current reading position
- Clean full-screen RSVP playback with minimal chrome
- ORP highlighting support
- Adaptive pacing based on word length, syllables, punctuation, clause boundaries, and difficulty
- Phrase chunking, blink modes, readability floors, and punctuation tuning
- Built-in reading profiles such as Balanced, Flow, Sprint, Narrative, and Study
- Live quick-tuning for tempo, typography, and layout bias
- Reader font size and text brightness controls
- Multiple reader themes including Light, Sepia, Dark, Nord, Cyberpunk, and Forest
- RSVP font family, font weight, brightness, and positioning controls
- Focus mode settings, including optional status bar hiding and Do Not Disturb integration
- Persistent preferences powered by DataStore
- Readers who want to move through books faster without sacrificing control
- Students and knowledge workers reading dense material on mobile
- People who like tuning interfaces to match how they think and read
- Readers who want a calmer, more stripped-back Android reading experience
- Developers interested in ebook parsing, tokenization, and RSVP engine design
Kairo is not trying to be a generic bookstore app or a shelf full of features for their own sake. It is a reading tool built around flow.
The reader, tokenizer, persistence layer, and RSVP engine all work toward the same goal: make it easy to import a book, find your place, adjust the experience, and keep going.
- Kotlin 2.1
- Jetpack Compose
- AndroidX Navigation
- Room
- DataStore
- Coil
- KSP
- Detekt and Ktlint
- Gradle Wrapper 8.13
To build and run Kairo locally you will need:
- Android Studio with Android SDK 34 installed
- JDK 17
- An Android emulator or device running Android 7.0 (API 24) or newer
- Internet access the first time Gradle dependencies are resolved
The project uses the checked-in Gradle wrapper, so you do not need to install Gradle separately.
- Clone the repository.
- Open the project root in Android Studio.
- Let Android Studio sync the Gradle project and install any missing SDK components.
- Select an emulator or connected Android device running API 24+.
- Run the
appconfiguration.
Build a debug APK:
./gradlew assembleDebugInstall the debug build on a connected device or running emulator:
./gradlew installDebugRun unit tests:
./gradlew testDebugUnitTestRun static analysis:
./gradlew ktlintCheck detektFullIf you want the Android lint pass as well:
./gradlew lintDebugThe app currently ships as a single Android module, with the code organized by responsibility:
app/src/main/java/com/kairo/reader/corefor domain models, tokenization, linguistics, and RSVP logicapp/src/main/java/com/kairo/reader/datafor parsing, persistence, repositories, and import flowsapp/src/main/java/com/kairo/reader/uifor library, reader, RSVP, settings, and themingapp/src/main/resfor Android resources, strings, and image assets
- EPUB
- MOBI
Kairo is intended for personal reading of DRM-free files. Support for locked or vendor-protected ebooks is outside the scope of the current parser pipeline.
Kairo already includes the core reading loop:
- import a book
- browse it in your library
- read in the standard reader
- switch into RSVP playback
- save progress, bookmarks, and preferences locally
The project is still evolving, especially around polish, performance, and the more experimental RSVP tuning surfaces.
Contributions are welcome. If you want to improve Kairo, strong areas to contribute include:
- ebook parsing robustness across real-world EPUB and MOBI files
- reader and RSVP UX refinements
- tokenization and multilingual text handling
- performance work for large books
- tests for parsing, pacing, and reading-state persistence
Before opening a change, it is a good idea to run:
./gradlew testDebugUnitTest ktlintCheck detektFullKairo is aimed at readers who want speed without chaos, focus without clutter, and a reading app that feels like it was built for deliberate forward motion.
If that sounds like your kind of reader, you are in the right place.
