- build 2025.10
- stack · 5 components
- published 2025-10-23
Emaki
An Android reading app where the chapter summaries run on the phone instead of calling a server.
architecture flow
MainActivity ties together the reader, library, explore, deep links, and local file picking.
ContentRepository turns remote chapters, PDF, EPUB, and HTML into one reading pipeline.
SummaryService uses llmedge to load a local model and summarize chapters without sending the text anywhere.
Compose, Room, and Hilt hold it together as a normal app.
visuals

engineering notes
Emaki (formerly EasyReader) is an Android reading app: discovery, a library, and a multi-format reader, with the AI feature running on the phone. It’s also where llmedge actually ships.
The app
The main job is reading, and it covers the whole loop:
- finding content and organizing a library
- opening web chapters, PDF, EPUB, manga/manhwa, and local HTML
- keeping your position and library between sessions
- working fully offline
Every format goes through ContentRepository into one pipeline, so the reader doesn’t care where a chapter came from.
The AI part
Chapter summaries run on the device through llmedge:
SummaryServiceloads a local model and summarizes with no network call- the text never leaves the phone
- the summary sits inside the reading flow
Architecture
MainActivityruns the reader, library, explore, deep links, and file pickingContentRepositoryhandles import and normalizing formatsSummaryServicehands off to llmedge instead of putting inference in the UI- Compose, Room, and Hilt give it a normal app lifecycle