{"id":29009779,"url":"https://github.com/amitkyadav6993/kmp-android-ios-web","last_synced_at":"2026-04-22T23:35:22.772Z","repository":{"id":300937100,"uuid":"1007638619","full_name":"amitkyadav6993/Kmp-Android-iOS-Web","owner":"amitkyadav6993","description":"Kotlin Multiplatform Clean Architecture starter with Compose UI for Android, iOS, and Web.","archived":false,"fork":false,"pushed_at":"2025-06-24T10:20:06.000Z","size":1607,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-24T11:29:48.948Z","etag":null,"topics":["android-app","compose-multiplatform","ios-app","jetpack-compose","jetpack-compose-navigation","kmp","kmp-app","kmp-mvvm","kmp-viewmodel","koin-injection","kotlin","kotlin-multiplatform","ktor","mvvm-architecture","repository-pattern","shared-ui","usecase","webapp"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amitkyadav6993.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-24T09:52:20.000Z","updated_at":"2025-06-24T10:28:11.000Z","dependencies_parsed_at":"2025-06-24T11:31:05.610Z","dependency_job_id":"cff167c7-d939-4480-ba7b-7baef1c9dc40","html_url":"https://github.com/amitkyadav6993/Kmp-Android-iOS-Web","commit_stats":null,"previous_names":["amitkyadav6993/kmp-android-ios-web"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/amitkyadav6993/Kmp-Android-iOS-Web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitkyadav6993%2FKmp-Android-iOS-Web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitkyadav6993%2FKmp-Android-iOS-Web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitkyadav6993%2FKmp-Android-iOS-Web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitkyadav6993%2FKmp-Android-iOS-Web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amitkyadav6993","download_url":"https://codeload.github.com/amitkyadav6993/Kmp-Android-iOS-Web/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitkyadav6993%2FKmp-Android-iOS-Web/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261898172,"owners_count":23226855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-app","compose-multiplatform","ios-app","jetpack-compose","jetpack-compose-navigation","kmp","kmp-app","kmp-mvvm","kmp-viewmodel","koin-injection","kotlin","kotlin-multiplatform","ktor","mvvm-architecture","repository-pattern","shared-ui","usecase","webapp"],"created_at":"2025-06-25T15:21:53.239Z","updated_at":"2026-04-22T23:35:22.730Z","avatar_url":"https://github.com/amitkyadav6993.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌍 KMP Demo – A Kotlin Multiplatform Clean Architecture Starter\n\nA complete, production-ready Kotlin Multiplatform (KMP) starter project built with **Clean Architecture** (MVVM), **Jetpack Compose Multiplatform (JCM)**, and support for **Android**, **iOS**, and **Web** platforms.\n\n---\n\n## 📸 Screenshots\n\n| Android | iOS | Web |\n|--------|-----|-----|\n| ![Android Screenshot](screenshots/android_screenshot.png) | ![iOS Screenshot](screenshots/iOS_screenshot.png) | ![Web Screenshot](screenshots/web_screenshot.png) |\n\n\u003e 💡 *Screenshots shown: Login screen (Android), Otp screen (iOS), Registration screen (Web)*\n\n---\n\n## ✨ Features\n\n- ✅ **Clean Modular Architecture**  \n  Clear separation into `data`, `domain`, `usecase`, and `presentation` layers for maintainability and testability.\n\n- 🧠 **MVVM Pattern with ViewModel \u0026 StateFlow**  \n  Reactive UI driven by clean state and side-effect management using Kotlin Coroutines and StateFlow.\n\n- 💼 **UseCase and Repository Pattern**  \n  Business logic encapsulated and reused across all platforms.\n\n- 🧩 **Jetpack Compose Multiplatform (JCM) – Shared UI Layer**  \n  UI code is written once and shared across:  \n  - 📱 **Android** using Compose UI  \n  - 🍏 **iOS** via Compose binary frameworks  \n  - 🌐 **Web** using WebAssembly (`wasmJs`) and Compose for Web  \n\n  Benefits include:  \n  - Shared themes, colors, dimensions, and custom UI components  \n  - Unified navigation system, including a reusable Bottom Navigation Menu  \n  - Consistent, state-driven UI powered by shared ViewModels  \n  - Fully declarative, reactive UI across all targets\n\n- 📱 **Bottom Navigation Menu**  \n  Reusable and consistent navigation setup with Compose Navigation.\n\n- 🔐 **Robust Authentication Flow**  \n  OTP verification and user registration implemented using clean MVVM + UseCase layers.\n\n- 🎨 **Custom Multiplatform Resources**  \n  Shared colors, typography, strings, and dimension resources for consistent styling.\n\n- 🌐 **Web Support (Wasm)**  \n  Compose UI compiled to WebAssembly for modern web browsers with Kotlin/JS integration.\n\n- 🔌 **Ktor for Networking**  \n  Platform-specific HTTP clients (OkHttp on Android, Darwin on iOS, JS client for Web) with a shared API interface.\n\n- 💉 **Koin for Dependency Injection**  \n  Shared DI setup across all modules and platforms for easy configuration and testing.\n\n- ⚙️ **Kotlin Coroutines**  \n  For asynchronous programming, API calls, and smooth state updates.\n\n- 🛠 **Multiplatform Settings**  \n  Cross-platform key-value storage abstraction for managing preferences and app state.\n\n---\n\n## 🧱 Architecture Overview\n\n### Clean Modular MVVM\n\n- **Domain Layer**: Defines core business entities and repository interfaces.\n- **Data Layer**: Implements repository interfaces; handles networking, caching, and local data.\n- **UseCase Layer**: Contains business logic orchestrated by use cases.\n- **Presentation Layer**: Implements MVVM with `ViewModel`, exposes UI state with `StateFlow` and `SharedFlow`.\n- **Shared UI Layer**: Built with Jetpack Compose Multiplatform, shared across Android, iOS, and Web.\n\n---\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Android Studio Arctic Fox or later\n- Xcode 13+ (for iOS builds)\n- Node.js and Yarn (for Web support)\n- Kotlin 2.1.21 (compatible with your setup)\n- Gradle 8.7.3\n\n### Build \u0026 Run\n\n- **Android**:  \n  Open the `:composeApp` module in Android Studio and run on emulator or device.\n\n- **iOS**:  \n  Use Xcode to open the generated Compose framework and run on simulator/device.\n\n- **Web**:  \n  Run `./gradlew jsBrowserRun` to start a local webpack dev server for WebAssembly.\n\n---\n\n## 🛠 Dependencies \u0026 Versions\n\n| Library                      | Version   |\n|------------------------------|-----------|\n| Android Gradle Plugin (AGP)  | 8.7.3     |\n| Kotlin                      | 2.1.21    |\n| Coroutines                  | 1.10.1    |\n| Jetpack Compose Multiplatform| 1.8.1    |\n| Ktor                        | 3.1.3     |\n| Koin                        | 4.0.2     |\n| AndroidX Lifecycle           | 2.9.0     |\n| Navigation Compose           | 2.9.0-beta01 |\n| Multiplatform Settings       | 1.1.1     |\n\n---\n\n## 📂 Project Structure\n\n```plaintext\n├── composeApp             # Compose Multiplatform application module (UI)\n├── domain                 # Business logic, entities, use cases interfaces\n├── data                   # Data sources and repository implementations\n│   ├── local              # Local database or preferences implementation\n│   ├── network            # Network API clients and models\n│   └── auth               # Authentication related data layer\n├── shared                 # Shared resources like strings, themes, styles\n│   └── resources          # Multiplatform resource definitions\n├── usecase                # Use case implementations\n├── presentation           # UI logic and ViewModels, organized by features\n│   ├── authentication\n│   ├── home\n│   ├── profile\n│   ├── schedule\n│   └── diy\n└── build.gradle.kts       # Build scripts and plugin configurations\n```\n---\n\n## 📖 Core Concepts\n\n### ViewModel \u0026 MVVM  \nViewModels hold UI state in `StateFlow` and side-effects in `SharedFlow`, exposing a unidirectional data flow pattern. The UI reacts to state changes consistently across all platforms.\n\n### UseCase Pattern  \nEach business action is encapsulated in a UseCase class, promoting single responsibility and testability.\n\n### Repository Pattern  \nAbstracts data sources, providing a clean API for UseCases, making it easy to swap or mock implementations.\n\n### Bottom Navigation Menu  \nImplemented with Jetpack Compose Navigation, supporting shared and platform-specific navigation logic.\n\n---\n\n## 🤝 Contribution\n\nContributions, issues, and feature requests are welcome! Feel free to open a pull request or issue.\n\n---\n\n## 📄 License\n\nMIT License © 2025 Amit Kumar Yadav\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famitkyadav6993%2Fkmp-android-ios-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famitkyadav6993%2Fkmp-android-ios-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famitkyadav6993%2Fkmp-android-ios-web/lists"}