A modern, premium Plex audiobook player for Android
Bringing your self-hosted audiobook library to life
Features โข Roadmap โข Tech Stack โข Contributing
Opus is a complete modernization of the Chronicle Plex audiobook player, rebuilt from the ground up with 2025's best Android development practices.
A premium audiobook experience that rivals commercial apps like Audible, while maintaining the flexibility and privacy of self-hosted Plex:
- ๐๏ธ Modern architecture - Multi-module design, Hilt DI, Jetpack Compose
- ๐จ Premium UX - Cover-art-dominant design, car mode, smart features
- โก Rock-solid reliability - Robust playback, offline handling, progress sync
- ๐ Active development - Continuous improvement, not just bug fixes
| Element | Value |
|---|---|
| Name | Opus - Audiobook Player |
| Primary Color | Amber #FFAB40 |
| Secondary Color | Soft Green #81C784 |
| Background | #121212 |
| Surface | #1E1E1E |
| Logo | "O" with audio waveform |
| Launcher Icon | Adaptive icon with vector drawable |
Brand assets are in docs/Logos/.
- โ Stream audiobooks from your Plex server
- โ Offline playback with downloads
- โ Playback progress sync with Plex
- โ Variable playback speed (0.5x - 3.0x, per-book memory)
- โ Sleep timer with shake-to-extend
- โ Chapter navigation (including M4B chapters)
- โ Android Auto support
- โ Smart auto-rewind on resume
- โ Skip silent audio
- โ Network-aware playback recovery
- โ Car Mode - Giant buttons, Bluetooth auto-detection
- โ Compose Library - Grid view, filters, search
- โ Modern Now Playing - Cover-art-dominant design
๐ Performance Optimization Sprint
- โก Baseline Profiles - 30-50% faster app startup on release builds
- ๐๏ธ Database Indices - 5 new indices for lightning-fast library queries
- ๐จ Compose Stability - @Immutable annotations on 16 UI classes for smoother scrolling
- ๐งน Code Cleanup - Deleted 22 unused XML fragments/ViewModels (5,000+ lines removed)
๐ Critical Bug Fixes
- ๐พ Position Persistence - Fixed race condition causing position loss when switching books
- ๐ฑ Mini Player State - Auto-restores after app restart (no more "lost audiobook link")
- ๐ Library Scroll Jank - Smooth scrolling during playback (smart progress updates)
- ๐ Chapter Buffering - Fixed chapter clicks starting at 0:00 instead of chapter position
- ๐ง Bottom Nav Clipping - Fixed navigation bar being cut off on some devices
๐จ UI Modernization (Compose Migration)
- โ Home Screen - Netflix-style categories with Continue Listening
- โ Library Screen - Grid/list view with filters and search
- โ Book Details - Cover-dominant design with chapter list
- โ Settings - Modern Compose preferences
- โ Collections - Beautiful grid view
- โ Now Playing - Full-screen player with bottom sheets
- โ Car Mode - Giant buttons for safe driving
Previous Major Milestones
- ๐จ Phase 2 - Now-Playing Screen (Compose, sleep timer, chapters, speed selector)
- ๐ Phase 3 - Library Screen (grid view, filters, search, progress indicators)
- โฌ๏ธ Phases 4-5 - Downloads & Sync (WorkManager, SD card, Plex progress sync)
- ๐ Phase 6 - Car Mode (giant 140dp button, Bluetooth auto-detection)
Phase 7: Stats & Polish
- ๐ Listening statistics (time, streaks, books finished)
- โจ Additional UI polish and animation refinements
- ๐ต Full Media3 migration (in progress)
- Language: Kotlin 2.1
- Min SDK: 26 (Android 8.0)
- Target SDK: 35 (Android 15)
- Build: Gradle Kotlin DSL + Version Catalog
- DI: Hilt 2.54
- Architecture: Multi-module MVVM
- UI: Jetpack Compose + XML Views (80% migrated to Compose)
- Async: Coroutines + Flow
- Database: Room with optimized indices
- Performance: Baseline Profiles for fast startup
- Playback: ExoPlayer / Media3
- HTTP: Retrofit 2 + OkHttp 4
- JSON: Moshi
- Images: Coil (Compose) + Fresco (Views)
- Android Studio: Ladybug (2024.2.1) or newer
- JDK: 17 or higher
- Plex Server: With at least one audiobook library
# Clone the repository
git clone https://github.com/cyclopsgd/chronicle-modern.git
cd chronicle-modern
# Build debug APK
./gradlew assembleDebug
# Install to connected device
./gradlew installDebug- Launch the app
- Login with your Plex account
- Select your server and audiobook library
- Start listening! ๐ง
- Multi-module architecture
- Hilt dependency injection migration
- Android SDK 35, Kotlin 2.1
- Core reliability fixes (smart rewind, error recovery, position persistence)
- Opus branding
- Launcher icon (vector drawable)
- Dark theme bottom navigation
- Compose theme (OpusTheme)
- NowPlayingScreen composable
- NowPlayingViewModel
- Wire into app navigation
- Full-screen mode (hides bottom nav)
- High-resolution cover art
- Chapter-relative progress tracking
- Chapter list bottom sheet (Compose)
- Sleep timer bottom sheet (Compose)
- Speed selector bottom sheet (Compose)
- Per-book speed memory
- Grid view with cover art
- Progress indicator overlay on covers
- Filters: Not Started / In Progress / Finished / Downloaded
- Sort: Title / Author / Date Added / Recently Played / Duration
- Download management with WorkManager
- SD card storage support
- Download progress indicators
- Storage management in settings
- Report playback progress to Plex server
- Read progress from Plex on library refresh
- Handle conflicts (most recent wins)
- Offline-first architecture
- Dedicated car mode screen (Compose)
- Auto-detect Bluetooth car audio
- Giant play/pause button (140dp)
- Disable sleep timer while in car mode
- Car mode entry from Now Playing screen
- Auto-enter car mode setting
- Stats tab in bottom navigation
- Listening time tracking
- Books finished count
- UI polish and animation refinements
- Full Media3 migration
Contributions are welcome! See CONTRIBUTING.md for guidelines.
- Fork & clone
- Create feature branch from
main - Follow existing patterns (Hilt DI, MVVM, Compose for new UI)
- Submit PR with clear description
Licensed under GNU General Public License v3.0 - see LICENSE
Chronicle by Matt Vaughn (@mattttvaughn) - The foundation this project builds upon.
- Claude Code - AI-assisted development
- Plex - Self-hosted media platform
Built with โค๏ธ for the Plex audiobook community