Share business logic across Android, iOS, desktop, and web from a single Kotlin codebase.
Unlock Kotlin Multiplatform: Code once, run everywhere
Kotlin Multiplatform enables sharing code across platforms while leveraging platform-specific APIs for UI and features.
KMP Overview & Project Setup
What KMP is, when to use it, and a guided setup with the K2 compiler.
4 days
- play_circleWhat is Kotlin Multiplatform? (when to choose it)
- play_circleCreate a KMP Project: Gradle plugin, K2 compiler, targets
- articleAndroid Studio/IntelliJ tips (wizard, run configs, Swift basics in IDE)
- assignmentPractice: Generate a starter shared module and run Android + iOS
Source Sets & Default Target Hierarchy
Organize common and platform code using the modern hierarchy.
4 days
- play_circlecommonMain, androidMain, iosMain - how the pieces fit
- play_circleDependencies & resources across source sets
- articleBuild logic & Gradle basics for multiplatform
- assignmentPractice: Move platform calls behind interfaces in commonMain
expect/actual APIs
Design platform bridges you can unit-test from common code.
4 days
- play_circleexpect/actual 101: signatures, packaging, and naming
- play_circleDesigning platform services (time, network reachability, logging)
- articlePitfalls: leakage of platform types into common code
- assignmentPractice: Implement a Reachability service with expect/actual
Concurrency & Memory on Kotlin/Native
Modern memory manager, threads, and coroutine notes on iOS/Native.
3 days
- play_circleModern memory manager & shared heap (no freezing model)
- play_circleCoroutines on Native: dispatchers & main-safety on iOS
- assignmentPractice: Concurrent tasks + safe cleanup on iOS
Networking & Serialization (Shared Data Layer)
Ktor HTTP client + kotlinx.serialization across platforms.
1 week
- play_circleKtor Client setup for Android & iOS (engines, timeouts)
- play_circlekotlinx.serialization: JSON config, polymorphism, defaults
- articleError mapping & retries (HTTP → domain)
- assignmentPractice: Shared API client + model serialization
Storage & Caching
Key–value, files, and SQL options; cache & invalidation patterns.
4 days
- play_circleKey–value & files (multiplatform-friendly approaches)
- play_circleSQL options in KMP (overview) and repository patterns
- articleCache policies: stale-while-revalidate, TTL, manual invalidation
- assignmentPractice: Offline-first cache backed by shared storage
Architecture & DI (KMP-friendly)
Interface-driven design, constructor injection, module boundaries.
3 days
- play_circleModule boundaries & feature splits in KMP
- play_circleDI without frameworks (constructor injection, factories, service locators)
- assignmentPractice: Wire a shared use-case layer for Android & iOS
Compose Multiplatform (Optional Shared UI)
Share UI with Compose where it fits; interop with native UIs.
1 week
- play_circleCompose Multiplatform basics (Android/iOS/Desktop/Web preview)
- play_circleState, navigation, and platform interop (UIKit/SwiftUI bridge, Views)
- articleResources & theming notes
- assignmentPractice: Shared screen rendered on Android & iOS
iOS Integration & Publishing
CocoaPods & Swift Package export; XCFrameworks; interop tips.
4 days
- play_circleCocoaPods Gradle plugin (Pods as deps / publish as Pod)
- play_circleSwift Package export (SPM) from Gradle
- articleXCFrameworks, Swift/Obj-C interop, and versioning
- assignmentPractice: Integrate the shared library into a Swift app
Testing & CI for KMP
commonTest, iosTest, and CI pipelines for multi-target builds.
4 days
- play_circlekotlin.test in common & platform tests; mocking strategies
- play_circleRunning iOS tests from Android Studio; device/simulator tips
- articleCI setup: Gradle tasks, caching, matrix builds (Android+iOS)
- assignmentPractice: Add tests & a basic CI workflow to the repo
Build, Release & Platform Notes
Packaging, version catalogs, and platform caveats (JS/Wasm).
3 days
- play_circlePublishing libraries (Maven, framework artifacts)
- play_circleVersion catalogs & dependency management for KMP
- articleJS & Wasm notes (status, when to target them)
Capstone: Shared Business Logic
Put it all together: one shared module powering two apps.
1 week
- play_circleDesign: shared data layer + expect/actual platform services
- play_circleImplement & wire Android + iOS (UI of your choice)
- assignmentPractice: Ship a minimal feature end-to-end (API, cache, tests, CI)