piashcse /
kmp-movie
KMP Movie 📱 app for Android, iOS, Desktop and Web built with Compose Multiplatform, Coroutine, Flow and ViewModel based on MVVM architecture recommended by Google.
75/100 healthLoading repository data…
elnatand / repository
Kotlin Multiplatform movie database app built with Compose Multiplatform and Navigation 3. Browse movies, discover new releases, and explore detailed information powered by The Movie Database (TMDB) API. Features Clean Architecture, Room persistence, and runs on Android & iOS.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A Kotlin Multiplatform (KMP) multi-module application built with Compose Multiplatform (CMP) that displays movies, TV shows and Actors information. The app targets both Android and iOS platforms with shared business logic and UI components using a modular architecture approach.
The project follows Clean Architecture principles with a feature-based multi-module architecture:
The app supports 4 languages with full UI localization:
cmp-moviedb/
├── androidApp/ # Android application module (APK entry point)
│ └── src/main/ # Android-specific code (MainActivity, resources)
│
├── iosApp/ # iOS app wrapper with Xcode project
│
├── composeApp/ # Shared Compose Multiplatform library
│ ├── androidMain/ # Android-specific locale configuration
│ ├── commonMain/ # Shared app code (App.kt, navigation, DI)
│ └── iosMain/ # iOS-specific code (MainViewController, Locale, DI)
│
├── core/ # Core shared modules
│ ├── common/ # Common infrastructure utilities (AppDispatchers)
│ ├── database/ # Room database with cross-platform drivers
│ ├── datastore/ # DataStore for preferences, pagination state, and language coordination
│ ├── model/ # Cross-feature shared models
│ ├── network/ # Ktor HTTP client and TMDB API integration
│ └── ui/ # Shared UI components, Material 3 design system, Compose resources
│
├── features/ # Feature-specific modules (each with data/domain/presentation layers)
│ ├── movies/ # Movies feature
│ │ ├── data/ # Repository implementation, data sources, Room entities
│ │ ├── domain/ # Repository interface, domain models
│ │ └── presentation/ # ViewModels, UI composables, navigation
│ ├── tv-shows/ # TV shows feature
│ │ ├── data/ # Repository implementation, in-memory data sources
│ │ ├── domain/ # Repository interface, domain models
│ │ └── presentation/ # ViewModels, UI composables, navigation
│ ├── person/ # Person details feature
│ │ ├── data/ # Repository implementation, data sources
│ │ ├── domain/ # Repository interface, domain models
│ │ └── presentation/ # ViewModels, UI composables
│ ├── search/ # Multi-type search feature
│ │ ├── data/ # Repository implementation, search strategies
│ │ ├── domain/ # Repository interface, search models
│ │ └── presentation/ # ViewModels, UI composables
│ └── profile/ # User profile and settings feature
│ └── presentation/ # ViewModels, UI composables (no data layer needed)
│
├── build-logic/ # Custom Gradle convention plugins
├── gradle/ # Gradle configuration and version catalog
└── Configuration files # Build scripts, API keys, properties
runTest, UnconfinedTestDispatcher, fake repositories)This app uses The Movie Database (TMDB) API. You'll need to obtain an API key and configure it using BuildKonfig.
Create TMDB Account
Request API Key
CMP MovieDB (or your preferred name)Get Your API Key
The project uses BuildKonfig to generate build-time constants from secrets.properties. This approach works seamlessly for both Android and iOS.
Create secrets.properties file in the project root directory:
touch secrets.properties
Add your API key to secrets.properties:
TMDB_API_KEY=your_actual_api_key_here
Replace your_actual_api_key_here with your actual TMDB API key.
Verify .gitignore - The file should already be excluded from Git:
/secrets.properties
BuildKonfig will automatically generate the BuildKonfig object containing your API key during the Gradle build process. The generated constant is available to both Android and iOS platforms.
How it works:
core/network/build.gradle.kts reads secrets.properties at build timeBuildKonfig.TMDB_API_KEY constant⚠️ Important:
- Never commit
secrets.propertiesto version control (it's gitignored)- If the API key is not set, you'll see a build warning but the app will compile
- API calls will fail at runtime if the key is missing
# Install debug build on connected device
./gradlew :androidApp:installDebug
# Or assemble APK without installing
./gradlew :androidApp:assembleDebug
# Clean and build all modules
./gradlew clean build
# Build Android app
./gradlew :androidApp:build
# Build shared library
./gradlew :composeApp:build
ViewModel unit tests live in each feature module's commonTest source set (e.g. MoviesViewModelTest, ProfileViewModelTest, SearchViewModelTest). They use kotlin-test assertions, kotlinx-coroutines-test (runTest + UnconfinedTestDispatcher), and fake repositories from the core modules.
# Run all multiplatform tests for a feature module
./gradlew :features:movies:allTests
./gradlew :features:profile:allTests
ℹ️ The feature modules do not enable Android host tests (
withHostTest {}), so the sharedcommonTestsuites currently execute on the iOS simulator target viaallTests. Running./gradlew test(the Android/JVM unit-test task) will report success without executing these tests.
Each feature module follows Clean Architecture with three distinct layers:
presentation/) - Compose UI, ViewModels, MVI state management, Navigationdomain/) - Repository interfaces, domain models, business logic contractsdata/) - Repository implementations, data sources (network/database), caching strategiesThe project uses a simplified repository pattern where:
Flow<List<T>> and handles cache invalidationSelected from shared topics, language and repository description—not editorial ratings.
piashcse /
KMP Movie 📱 app for Android, iOS, Desktop and Web built with Compose Multiplatform, Coroutine, Flow and ViewModel based on MVVM architecture recommended by Google.
75/100 healthyasinkacmaz /
Cross-platform movie listing app showcasing various UIs built using Kotlin and Compose Multiplatform
78/100 healthmichaelbel /
Discover movies app illustrating Kotlin Multiplatform development best practices
ChrisKruegerDev /
🎬 Modern powerful TMDB API to fetch movies and TV shows for Kotlin Multiplatform.
83/100 healthvladimirlogachov /
Movie Explorer: Kotlin and Compose multiplatform project for discovering movies with ease. Features Jetpack Navigation, Paging library integration, adaptive icons and a Material3-based UI that supports dynamic theme.
80/100 healthSyex /
Kotlin Multiplatform project with Clean Architecture, aiming to only implement the view natively.
68/100 health