A native Android TV client for Audiobookshelf, offering a sleek, remote-friendly interface for browsing and playing your audiobooks.
- Logs in with Audiobookshelf host and API key
- Credentials securely stored using Android's EncryptedSharedPreferences
- Seamless reconnection after app relaunch
- Choose from available Audiobookshelf libraries
- Select multiple libraries to browse at once
- Remembers your selected libraries
- Browse recently added audiobooks
- Pick up where you left off with in-progress items
- Cover artwork with author, duration, and playback progress
- Smooth horizontal scrolling carousels
- Query your library with natural search
- Results display books with cover art and metadata
- Quick access to search functionality
- Material Design dialog with book details
- Author, narrator, series information
- Duration and progress tracking
- Chapter selection for direct playback
- Play and Read buttons for audiobooks with ebooks
- Immersive playback experience with blurred cover background
- Transport controls: play/pause, skip forward/back (30s/10s)
- Playback speed adjustments (0.5x - 3.0x)
- Chapter navigation with expandable chapter list
- Progress scrubbing with time display
- D-pad optimized for Android TV remotes
- Two-page landscape layout optimized for TV
- Sepia reading theme for comfortable viewing
- Chapter navigation menu
- Swipe or button navigation between pages
- Adjust library item fetch count (default: 10)
- Choose carousel progress-bar color
- Set default playback speed
- Persistent settings across sessions
- Securely fetch cover images with authentication
- Cached for smooth browsing performance
- High-quality artwork display
- Remote-friendly navigation
- D-pad and touch support
- Focus-aware UI elements
- Material Design 3 components
- Landscape-optimized layouts
- Progress Sync: Automatically syncs playback progress to Audiobookshelf (session sync every 15s, progress sync every 90s)
- Session Management: Proper playback session handling with Audiobookshelf server
- MediaSession Integration: System-level playback controls and notifications
- ExoPlayer: High-quality audio playback with chapter support
- EPUB Support: Built-in EPUB parser and reader for ebook content
- Jetpack Compose: Modern, declarative UI framework
- Material Design 3: Latest Android design guidelines
- Android TV device or Android device running Android 8.0 (API 26) or higher
- Audiobookshelf server instance with API access
- Network connection to your Audiobookshelf server
- Download the latest APK from the Releases page
- Install via ADB:
adb install swiftshelf-<version>.apk - Or sideload using your preferred method
- Clone the repository
- Open in Android Studio
- Ensure you have JDK 17 installed
- Build and run on your Android TV device or emulator
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk- Launch SwiftShelf on your Android TV
- Enter your Audiobookshelf host URL (e.g.,
https://abs.example.com) - Enter your API key (found in Audiobookshelf settings)
- Select one or more libraries to browse
For testing during development, you can create a config file:
// .swiftshelf-config.json
{
"host": "https://your-abs-server.com",
"apiKey": "your-api-key-here"
}- MVVM Pattern: Clean separation of concerns
- Repository Pattern: Data layer abstraction
- Kotlin Coroutines: Asynchronous operations
- StateFlow: Reactive state management
- Retrofit: Network communication
- Room (planned): Local caching
- Coil: Image loading and caching
app/src/main/java/com/swiftshelf/
├── MainActivity.kt # Main entry point
├── SwiftShelfViewModel.kt # App state management
├── audio/
│ ├── GlobalAudioManager.kt # Audio playback management
│ └── MediaSessionManager.kt # System media controls
├── data/
│ ├── model/ # Data models
│ ├── network/ # API client
│ └── repository/ # Data repositories
├── epub/
│ └── EPUBParser.kt # EPUB file parsing
├── ui/
│ ├── screens/ # Composable screens
│ │ ├── BookDetailsDialog.kt # Book info popup
│ │ ├── CompactPlayer.kt # Mini player banner
│ │ ├── EpubReaderScreen.kt # EPUB reader
│ │ ├── LibraryBrowseScreen.kt # Main browse UI
│ │ ├── MediaPlayerScreen.kt # Full-screen player
│ │ └── ...
│ └── theme/ # App theming
└── util/
└── SecurePreferences.kt # Encrypted storage
- Minimum SDK: 26 (Android 8.0)
- Target SDK: 34 (Android 14)
- Kotlin: 1.9.20
- Gradle: 8.11.1
- Android Gradle Plugin: 8.10.1
- Offline playback support
- Sleep timer
- Playback queue management
- Bookmarks
- Android Auto integration
- Cast support
Contributions are welcome! Please feel free to submit a Pull Request.
[License information to be added]
- Audiobookshelf - The amazing audiobook server
- The Android and Jetpack Compose communities
For issues and feature requests, please use the GitHub Issues page.






