last update
May 23, 2026
license
MITv1.0.0
format
SKILL.md
- Install
// Downloads SKILL.md into ~/.claude/skills/android-compose-multiplatform/
$ curl -fsSL --create-dirs -o ~/.claude/skills/android-compose-multiplatform/SKILL.md https://claudeskil.com/skills/android-compose-multiplatform/SKILL.md - Invoke
// Inside Claude Code, type the skill name as a slash command
> /android-compose-multiplatform help me ship this - Or just ask
// Claude loads the skill by itself when a request matches its description
> help me ship this
- name:
- Compose Multiplatform Builder
- slug:
- android-compose-multiplatform
- version:
- v1.0.0
- license:
- MIT
- author:
- @chiragthummar16
- categories:
- tags:
- #compose#kmp#kotlin#multiplatform#ios
- description:
One Compose codebase for Android, iOS, and Desktop — shared UI without React Native compromises.
README.md
Compose Multiplatform Builder
Scaffolds a working JetBrains Compose Multiplatform project that shares Kotlin UI code across Android, iOS, and Desktop (JVM) from a single commonMain source set. It's aimed at Kotlin and Android developers who want one Compose codebase across platforms instead of maintaining parallel SwiftUI/XML trees, and who'd rather not hand-wire the iOS Xcode integration themselves.
When to use it
- Starting a greenfield app that should ship to Android and iOS with shared screens.
- You already have Compose UI on Android and want to lift it into
commonMainfor reuse. - You need a Desktop build (JVM window) for previews, demos, or an internal tool alongside mobile.
- You want the iOS half wired correctly the first time: framework export plus an Xcode project that hosts the shared UI in a
UIViewController.
What it does
The skill generates a standard KMP module layout: composeApp/src/commonMain for shared @Composable code, plus androidMain, iosMain, and desktopMain (jvmMain) for platform specifics. It wires the kotlin("multiplatform") and org.jetbrains.compose Gradle plugins, declares the compose.runtime, compose.foundation, compose.material3, and compose.ui dependencies in the common source set, and adds the kotlin.cocoapods or framework-export config so iOS gets a ComposeApp framework.
Platform-specific behavior uses the expect/actual pattern — e.g. an expect fun platformName() declared in common with actual implementations per target. Entry points are handled per platform: an Activity calling setContent { App() } on Android, ComposeUIViewController { App() } on iOS, and application { Window { App() } } on Desktop. The iOS Xcode wrapper project links the exported framework and presents that controller.
Usage
curl -fsSL --create-dirs -o ~/.claude/skills/android-compose-multiplatform/SKILL.md https://claudeskil.com/skills/android-compose-multiplatform/SKILL.md
# then, in your project:
"Scaffold a Compose Multiplatform app named TripLog targeting Android, iOS, and Desktop"
// commonMain — shared across all three targets
@Composable
fun App() {
MaterialTheme {
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) {
Text("Running on ${platformName()}: $count")
}
}
}
// commonMain
expect fun platformName(): String
// iosMain → actual fun platformName() = UIDevice.currentDevice.systemName()
Tips & gotchas
- Run iOS via the generated Xcode project (or the KMP run config), not
./gradlew; Gradle builds the framework, Xcode builds the app. - Keep Android-only APIs (
Context, resources) out ofcommonMain— push them behindexpect/actualor they won't compile for iOS. - Resources go through
compose.components.resources(Res.drawable.*), not AndroidR. - A consistent Kotlin and Compose Multiplatform plugin version pairing matters; mismatches surface as cryptic Gradle metadata errors.
FAQ
Does this use Swift for the iOS UI? No — the UI is Compose. Swift only appears in the thin Xcode wrapper hosting the Compose view controller, so you can still add native screens if needed.
Can I drop into SwiftUI for a specific screen? Yes. ComposeUIViewController is a normal UIViewController, so you can present it from SwiftUI/UIKit or mix native screens around it.
Is the Desktop target required? No. It's included for fast previews and runs on the JVM, but you can target only Android and iOS.
$ cat reviews/