* Added print functionality to PDF viewer * feat(pdf): add interactive button support and visibility reveal heuristic * Moved search state management to MainViewModel and improved search UI interaction. * Updated `pdfiumandroid` to version 2.0.0 and handled resulting API changes, including nullable page/text page returns and revised native pointer access. increased compileSdk to 36. * Fixed Table of Contents (TOC) truncation bug and improved the TOC UI in `PdfViewerScreen`. - Implemented `getFixedTableOfContents` using reflection to bypass a library issue where sibling nodes were incorrectly truncated during traversal. - Enhanced the TOC drawer with a nested, expandable tree structure using the new `PdfTocTreeItem` component. - Added a custom `VerticalScrollbar` with draggable support for better navigation within long TOC lists. - Integrated `animateColorAsState` and `animateFloatAsState` for smoother UI transitions in the TOC and scrollbar. - Optimized TOC loading by flattening the tree structure and managing expansion states with `rememberSaveable`. * Improved zoom pivot calculation and interaction handling in PdfVerticalReader * Fixed high-res PDF tile bleeding by implementing clipRect in PdfBitmapLayer * fix(pdf): resolve zoom stuttering, in pagination mode, by removing eager scale snapping |
||
|---|---|---|
| .github | ||
| app | ||
| docs | ||
| fastlane/metadata/android/en-US | ||
| gradle | ||
| spotless | ||
| .gitignore | ||
| build.gradle.kts | ||
| CLA.md | ||
| CONTRIBUTING.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
Overview
Episteme Reader is an offline-first, privacy-focused document and e-book reader that supports PDF, EPUB, MOBI, AZW3, Markdown, HTML, and plain text.
Note: This is the Open Source (OSS) edition of Episteme Reader. The version available on the Google Play Store is built from this core but includes additional proprietary features.
Features
Supported Formats
- Documents: PDF
- E-books: EPUB, MOBI, AZW3
- Text: MD, TXT, HTML
PDF Features
- Viewing Modes: Vertical Scroll and Paginated view.
- Ink Annotations: Draw directly on pages using Pen, Highlighter, and Eraser tools.
- Text Annotations: Add text notes anywhere on the page using system or custom fonts.
E-Book Features
- Parsing: Native parsing for MOBI/AZW3 via
libmobiand EPUB viaJsoup. - Customization: Adjust font size, line spacing, and margins.
- Custom Fonts: Support for importing user-provided font files (
.ttf,.otf).
General
- Text-to-Speech (TTS): Read documents aloud using the system TTS engine.
- File Management: Built-in library organization.
Architecture
- UI: 100% Jetpack Compose (Material3).
- Architecture: MVVM with Unidirectional Data Flow.
- Database: Room (SQLite) for metadata and annotations.
- PDF Engine:
pdfium-android(Native PDFium bindings). - EPUB Engine: Utilizes standard
WebViewfor vertical scrolling mode, and a custom rendering engine for paginated mode. - Mobi Engine: Custom JNI bindings to
libmobi.
Building from Source
-
Clone the repository:
git clone https://github.com/Aryan-Raj3112/episteme.git cd episteme -
Build: Open in Android Studio and run the
ossDebugvariant, or build from the command line:./gradlew assembleOssDebugThe APK will be generated at:
app/build/outputs/apk/oss/debug/Episteme-oss-v{version}-oss-debug.apk
Open Source Libraries
This project is made possible by the Android open-source ecosystem:
- Core & UI: AndroidX, Jetpack Compose, Kotlinx Serialization
- Document Engines: PdfiumAndroidKt (PDF), libmobi (MOBI/AZW3), Google WOFF2 (Fonts)
- Parsers: Jsoup (HTML/EPUB), Flexmark (Markdown)
- Media & Image Loading: Coil, Media3 (ExoPlayer)
- Utilities: Room (Database), Timber (Logging)
License
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.
Support
If you find Episteme Reader useful and want to support its development, please consider sponsoring. Thank you!


