Mobile — Skip (Swift → Kotlin Transpiler)
Write SwiftUI for iOS, get a real native Kotlin/Compose Android app from the same source.
Skip is the unusual approach: a Swift compiler plugin that transpiles Swift + SwiftUI into Kotlin + Jetpack Compose. The iOS build is a native Swift app; the Android build is a native Kotlin app — not a wrapper, not a runtime. It targets the audience that already lives in Swift/SwiftUI and would otherwise have no good cross-platform option short of Kotlin Multiplatform (which forces them into Kotlin) or RN / Flutter.
Skip is free for individual developers and small businesses (Skip Fuse / Skip Lite under specific limits) and paid for larger teams; check current pricing.
What it actually does
- ★ Skip Fuse — the Swift-to-Kotlin transpiler. Builds two real apps from one source tree.
- Skip Lite — earlier mode that mixed Skip with native libraries; superseded for most.
- SkipUI — SwiftUI subset implemented on top of Compose for the Android target.
- SkipFoundation / SkipFFI — Foundation-shaped Kotlin shims so your Swift code compiles.
- SkipKit / SkipBridge — JVM/Kotlin platform bindings exposed back to Swift.
What you can share
- SwiftUI views — most of the SwiftUI surface area; expect to write Skip-flavored escape hatches for things SwiftUI doesn't yet cover on Android.
- Foundation types —
URLSession,JSONDecoder,Date,Data, etc., are mapped to JVM equivalents. - Swift Concurrency —
async/await,Task, actors compile to Kotlin coroutines.
What you have to fork
- Platform-specific UI — system sheets, share sheets, share extensions, background tasks, notifications config — split with
#if SKIP/#if !SKIP. - Native Android-only APIs — write Kotlin alongside, or use Skip's bridging.
Tooling
- ★ Xcode 16+ — primary IDE; build and run iOS targets normally.
- ★ Android Studio — auxiliary; opens the generated Kotlin Gradle project for Android.
- Skip CLI —
skip init,skip android run, etc. - Swift Package Manager — Skip integrates as SPM packages.
Comparison vs other cross-platform
- vs KMP: KMP shares logic only by default; Skip shares UI too, but the source language is Swift, not Kotlin.
- vs Compose Multiplatform: CMP gives you Compose-everywhere from Kotlin; Skip gives you SwiftUI-everywhere from Swift.
- vs Flutter / RN: Skip outputs real native apps with native widgets; no JS bridge, no Skia layer.
- vs native double-team: One source of truth, but you still need an Android Studio when something Skip can't transpile crops up.
Watch-list / gotchas
- Younger ecosystem than KMP / Flutter / RN. Bug surface is real.
- Pricing model has shifted; check current free tier.
- Some SwiftUI APIs lag — modal sheets, pickers, accessibility annotations have varied parity.
- Best fit for greenfield SwiftUI apps that can stay disciplined about avoiding deep UIKit.
Pick this if…
- You're an iOS shop with SwiftUI as your default and want Android without a second team: Skip.
- You're a Kotlin/Android shop wanting iOS: Compose Multiplatform instead.
- You want neutral ground: Flutter, RN, or KMP.
- You have Web + mobile and want one TS codebase: RN/Expo or Mobile Packaging.