A modern multiplatform Kotlin application that allows users to search for books, view detailed information, and manage their favorite books across Android, iOS, and Desktop platforms.
- Book Search: Search for books using the Open Library API
- Book Details: View comprehensive book information including ratings, pages, languages, and descriptions
- Favorites Management: Add and remove books from your personal favorites list
- Cross-Platform: Native experience on Android, iOS, and Desktop
- Offline Support: Local database storage for favorite books
- Modern UI: Built with Jetpack Compose Multiplatform and Material 3 design
The app follows a clean architecture pattern with clear separation of concerns:
- Presentation Layer: Jetpack Compose UI with ViewModels
- Domain Layer: Business logic and use cases
- Data Layer: Repository pattern with local and remote data sources
- Dependency Injection: Koin for dependency management
- Kotlin Multiplatform Mobile (KMM): Cross-platform development
- Jetpack Compose Multiplatform: Modern declarative UI framework
- Kotlin: 2.2.20
- Ktor: 3.3.1 - HTTP client for API calls
- Kotlinx Serialization: JSON serialization/deserialization
- Open Library API: Book search and details
- Room: 2.8.3 - Local database for favorites
- SQLite: 2.6.1 - Database engine
- KSP: 2.2.20-2.0.4 - Code generation for Room
- Koin: 4.1.1 - Dependency injection framework
- Coil: 3.3.0 - Image loading and caching
- Navigation Compose: 2.9.0 - Type-safe navigation
- Kermit: 2.0.2 - Cross-platform logging
- Material 3: Modern design system
- Material Icons Extended: 1.7.3 - Extended icon set
// Core Compose
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
// Navigation
implementation(libs.jetbrains.compose.navigation)
// Dependency Injection
implementation(libs.koin.compose)
implementation(libs.koin.compose.viewmodel)
api(libs.koin.core)
// Networking
implementation(libs.bundles.ktor)
implementation(libs.kotlinx.serialization.json)
// Image Loading
implementation(libs.bundles.coil)
// Local Storage
implementation(libs.androidx.room.runtime)
implementation(libs.sqlite.bundled)
// Logging
implementation("co.touchlab:kermit:2.0.2")implementation(libs.koin.android)
implementation(libs.koin.androidx.compose)
implementation(libs.ktor.client.okhttp)implementation(libs.ktor.client.darwin)implementation(compose.desktop.currentOs)
implementation(libs.kotlinx.coroutinesSwing)
implementation(libs.ktor.client.okhttp)- Android Studio Hedgehog or later
- Xcode 15+ (for iOS development)
- JDK 11 or later
- Kotlin 2.2.20
-
Clone the repository
git clone <repository-url> cd Chapterly
-
Build for Android
./gradlew :composeApp:assembleDebug
-
Build for iOS
./gradlew :composeApp:linkDebugFrameworkIosArm64 # Then open iosApp/iosApp.xcodeproj in Xcode -
Build for Desktop
./gradlew :composeApp:run
- Android: Run the
composeAppmodule in Android Studio - iOS: Open
iosApp/iosApp.xcodeprojin Xcode and run - Desktop: Run the desktop application from Android Studio or command line
composeApp/
โโโ src/
โ โโโ commonMain/
โ โ โโโ kotlin/
โ โ โ โโโ app/ # App entry point and navigation
โ โ โ โโโ book/ # Book domain and presentation
โ โ โ โ โโโ data/ # Data layer (network, database, mappers)
โ โ โ โ โโโ domain/ # Domain models and repository
โ โ โ โ โโโ presentation/ # UI screens and ViewModels
โ โ โ โโโ core/ # Core utilities and domain
โ โ โ โโโ di/ # Dependency injection modules
โ โ โโโ composeResources/ # Resources (strings, drawables)
โ โโโ androidMain/ # Android-specific code
โ โโโ iosMain/ # iOS-specific code
โ โโโ jvmMain/ # Desktop-specific code
โ โโโ nativeMain/ # Native-specific code
โโโ schemas/ # Room database schemas
- RemoteBookDataSource: Handles API calls to Open Library
- FavoriteBookDao: Manages local database operations
- BookRepository: Coordinates between remote and local data sources
- BookListScreen: Search and browse books with tabbed interface
- BookDetailScreen: Detailed book information and favorite management
- BookListViewModel: Manages search state and favorites
- BookDetailViewModel: Handles book details and favorite actions
The app integrates with the Open Library API to provide:
- Book search functionality
- Detailed book information
- Book covers and metadata
- Author information and ratings
- Room Database: Stores favorite books locally
- Offline Support: Favorites persist across app sessions
- Data Synchronization: Seamless sync between local and remote data
- Material 3 Design: Modern, accessible interface
- Responsive Layout: Adapts to different screen sizes
- Dark/Light Theme: System theme support
- Smooth Animations: Polished user experience
- Error Handling: User-friendly error messages
- User authentication and profiles
- Reading lists and bookmarks
- Book recommendations
- Social features (sharing, reviews)
- Offline reading capabilities
- Advanced search filters
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
For support, drop me a mail or create an issue in the repository.
Built with โค๏ธ using Kotlin Multiplatform Mobile








