# Skip: one Swift codebase that produces SwiftUI on iOS and Jetpack Compose on Android

> Skip is an MPL-2.0 tool from skiptools that compiles Swift and SwiftUI into native apps for both iOS and Android, in two modes: Fuse (native Swift compilation) and Lite (Swift-to-Kotlin transpilation).

**skiptools/skip** — Skip enables the creation of native SwiftUI apps for iOS and Android

- Repository: https://github.com/skiptools/skip
- Website: https://skip.dev
- Stars: 3,229 · Forks: 106
- Language: Swift
- License: MPL-2.0
- Published: 2026-09-24 · Updated: 2026-09-24 · Language: en
- Canonical page: https://hysenlabs.com/projects/skiptools-skip

## The problem Skip solves for Swift developers

If you write Swift and SwiftUI, you can ship an iOS app today and you have no path to Android that keeps your code. The alternatives ask you to learn JavaScript, Dart, or Kotlin, and the README states this plainly as Skip's central claim: "If you know Swift and SwiftUI, you already know how to build for Android with Skip." Skip is for the developer who already has a Swift codebase, or is starting one, and wants the Android build to come out of the same source files rather than a second project.

The audience is narrow on purpose. Skip assumes you know SwiftUI, that you are comfortable in Xcode, and that you are willing to install a toolchain that touches both Apple and Android build systems. Someone who has never written Swift gets nothing here, because Skip does not introduce a new language to learn; it removes the need for a second one.

## How Skip maps SwiftUI onto Jetpack Compose

Skip does not ship a rendering engine or a web view. The README is explicit: "Both sides are genuinely native: SwiftUI on iOS, Jetpack Compose on Android. No web views, no custom rendering engine, and no additional runtime." The mapping between the two UI frameworks is handled by a separate compatibility framework, SkipUI, hosted at skiptools/skip-ui. Your SwiftUI view tree is what gets translated into Compose on the Android side.

Underneath that, Skip offers two compilation strategies. Skip Fuse compiles Swift natively for Android using the official Swift SDK for Android, which the README links to the Swift 6.3 release notes. In Fuse mode you get the full Swift language, the standard library, and Foundation on both platforms, plus bridging to call Kotlin and Java APIs where you need them. Skip Lite takes the other route: it transpiles Swift source to Kotlin, which the README frames as maximizing interoperability with existing Kotlin and Java libraries and the Android ecosystem. The trade-off is real and the documentation states it in those terms. Fuse keeps Swift semantics intact and pays for it with a bridging layer at the Kotlin boundary. Lite gives you a Kotlin codebase that sits naturally beside other Kotlin code, but your source has been translated, not compiled.

The repository layout reflects this split. The top level holds Package.swift, Sources/, Tests/, and a Plugins/ directory, so the Swift Package Manager plugin that drives the Android build is part of the project itself rather than an external script.

## Installing Skip with Homebrew and running your first project

The README's Quick Start is four commands. The first two add the skiptools tap and install the skip binary, the third verifies your environment, and the fourth scaffolds a project.

```bash
brew tap skiptools/skip
brew install skip
skip checkup
skip create
```

Run skip checkup before you do anything else. It is the command that tells you whether your machine has what Skip needs, and it is the cheapest place to find out that something is missing. skip create then produces a project and, per the README, opens it in Xcode. Run it against an iPhone simulator and Skip builds and launches the Android version on a running emulator at the same time. That simultaneous launch is the part worth watching on your first run, because it is where a misconfigured Android emulator shows up.

If you want the native compilation path rather than the transpilation path, the README gives a separate install step for the Swift Android SDK and a different project command:

```bash
skip android sdk install
skip init --native-app --appid=com.example.myapp my-app MyApp
```

The --native-app flag is what selects Fuse mode, and --appid sets the Android application ID, which needs to be a value you control because it is the package identity on the Play Store. The README points to skip.dev/docs/gettingstarted/ for the full setup guide and skip.dev/docs/modes/ for how native compilation and Kotlin bridging work.

## Where Skip Lite and Skip Fuse both stop being the right answer

The two-mode design is the honest part of this project, and it is also where the sharpest limitation sits. You cannot have both at once. If your app depends on a large body of existing Kotlin or Java libraries, Fuse mode puts a bridging layer between your Swift and those APIs, and the README describes bridging as something you do "when needed" rather than as the default way to work. If you pick Lite instead, you get clean interop with the Android ecosystem, but your Swift has been transpiled to Kotlin, so what runs on Android is not the code you wrote in the sense that Fuse code is.

The second constraint is the ecosystem, and the README quantifies it rather than hiding it: "Over 2,200 Swift packages already build for Android, as tracked at the Swift Package Index." That number is a statement about coverage, not completeness. Any Swift package outside it is a dependency you have to verify yourself, and the README does not document a fallback for a package that does not build. If your app leans on a Swift package that touches Apple-only frameworks, Skip is the wrong tool and no amount of mode-switching fixes it.

The README also does not document rollback. There is no described procedure for removing Skip from an existing project, and the repository's top level shows no migration guide. Treat the decision as one-way until you have confirmed otherwise.

## Skip against Flutter, React Native and Compose Multiplatform

The README names the comparison directly and links to skip.dev/compare/ for the project's own assessment, which is worth reading with the knowledge that it is the project's own assessment. The structural difference is what matters here. Flutter and React Native both introduce a language and a runtime that sits between your code and the platform; Skip produces SwiftUI on iOS and Jetpack Compose on Android, with no additional runtime in the shipped app.

Compose Multiplatform is the closest comparison in spirit, since it also targets native UI on both platforms, but it starts from Kotlin. If your team already writes Kotlin, Compose Multiplatform keeps you in a language you have. Skip's entire value proposition is the reverse direction: it assumes Swift is the language you already have and refuses to make you leave it. That is why the README's "no lock-in" argument points at the official Swift SDK for Android, which is not a Skip artifact. Your Swift code and packages work on Android with or without Skip, per the README, which is a claim about the SDK rather than about Skip itself.

## Licence, maintenance and what an upgrade costs you

Skip is licensed under MPL-2.0, a file-level copyleft licence. Modifications to Skip's own source files stay under MPL-2.0, while the app you build with it is not forced under that licence. This is a description of how the licence is commonly read, not legal advice, and the LICENSE.TXT file at the repository root is the authoritative text.

The project is free and, per the README, "developed independently from any parent corporation, funded by your sponsorship." That funding model is worth noting because it means the project's continuity depends on sponsorship rather than on a commercial product behind it. The README also points to a Slack channel and a Discourse forum at forums.skip.dev, so support runs through community channels rather than a paid tier.

On cadence, the release history is dense: 1.9.9 on 2026-09-16, 1.9.10 on 2026-09-17, and 1.9.11 on 2026-09-19, with the last push to the repository on 2026-09-19. Three patch releases in four days is a fast moving target, and the practical cost lands on you at upgrade time: Skip sits between your Swift and two build systems, so a Skip upgrade can change what the Android build produces. The README does not document a version-pinning strategy or an upgrade procedure, so how you hold a working version is something you decide yourself.

## Conclusion

Skip suits Swift and SwiftUI developers who need a real Android app and are willing to run skip checkup before writing any feature code, because the toolchain, not the language, is where setup fails. It does not suit teams without a Swift codebase, or teams that want to share Kotlin and Java directly, since Skip Lite transpiles Swift to Kotlin rather than the other way around. Before committing, verify three things on your own machine: that skip checkup reports a working Android toolchain, that the Swift packages you depend on actually build for Android, and that the mode you pick matches how much Kotlin and Java you need to call. The last push to the repository was on 2026-09-19, and the 1.9.11 release landed the same day.

## FAQ

### What is the Skip app?

Skip is a free, open-source tool for building native iOS and Android apps from a single Swift codebase. You write Swift and SwiftUI, and Skip produces real Jetpack Compose for Android, with no web views or custom rendering engine.

### How can I convert a Swift app to Android with Skip?

Install Skip with Homebrew, run skip checkup to verify your environment, then skip create to scaffold a project. For native Swift compilation on Android rather than transpilation, run skip android sdk install and create the project with skip init --native-app --appid=com.example.myapp my-app MyApp.

### What is SwiftUI used for, and how does Skip handle it?

SwiftUI is the UI framework Skip users write their interfaces in. Skip maps SwiftUI to Jetpack Compose on Android through the SkipUI compatibility framework, so the UI is native on each platform.

## Sources

- [License: MPL-2.0](https://github.com/skiptools/skip/blob/main/LICENSE)
- [Project website](https://skip.dev)
- [README](https://github.com/skiptools/skip/blob/main/README.md)
- [Releases](https://github.com/skiptools/skip/releases)
- [skiptools/skip on GitHub](https://github.com/skiptools/skip)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/skiptools-skip
