Husk
Android apps and games on your iPhone.
Add an APK, tap it, and it opens full-screen. Husk runs it in one of two ways, shown as the two sides of its Library:
- Translation Layer. The game's own 64-bit Android code runs directly on the iPhone's processor, and Husk stands in for Android around it: the C library, the Java calls the game makes, OpenGL ES (through ANGLE), Vulkan (through MoltenVK), sound, touch and controllers. No Android boots, so a game starts in seconds, and its code is never emulated. See docs/04-translation-layer.md.
- Emulation. A full Android system (LineageOS) boots under QEMU inside Husk, for apps the translation layer cannot run yet and for using Android itself. iOS gives apps no hypervisor, so the processor is emulated, and this is much slower than the translation layer. See docs/00-architecture.md.
Screenshots
Games on the Translation Layer
![]() GTA: San Andreas | ![]() Minecraft Dungeons |
![]() Beach Buggy Racing 2 | ![]() Geometry Dash |
The app
![]() Library | ![]() Game Settings | ![]() Settings |
What the Translation Layer runs
Games made with an engine Husk has a driver for:
- Unity
- Unreal Engine 4 (through Vulkan)
- cocos2d-x
- Godot 3 and 4 (GLES2, GLES3 and the Compatibility renderer)
- SDL2 and SDL3, including LÖVE games
- GameActivity (Minecraft) and NativeActivity
- Rockstar's own engine (GTA: San Andreas)
Games see Google Play services as installed and signed out, so the ones that check for it start normally; Play Games sign-in, cloud saves and purchases are not available. Geometry Dash can load Geode mods.
An APK needs 64-bit (arm64-v8a) native code. iPhones cannot run 32-bit ARM
code, so an APK that only has 32-bit libraries cannot run here. APKs and
split bundles (.xapk, .apkm, .apks, or a Play download's separate split
APKs and asset packs) can all be added. Apps written only
in Java, with no native engine, are not supported on the translation layer;
Emulation is the way to run those.
One game runs per launch of Husk. To switch, press Close Husk to Play on the other game's page; when you open Husk again, that game starts by itself.
A game's saves can be backed up to a .zip from its page and restored later,
on the same iPhone or another. If a game crashes Husk, the next launch shows
what happened, with a report you can share.
Installing
SideStore, AltStore and other sideloaders: add Husk's source, and the sideloader installs Husk and offers each update as it comes out.
https://raw.githubusercontent.com/Leviidev/Husk/main/altsource.json
In SideStore or AltStore: Sources › + › paste the address above.
Or by hand: download Husk.ipa from
Releases and install it with
SideStore, AltStore or TrollStore. It is one IPA for all of them: it carries
Husk's entitlements, which TrollStore keeps, and a sideloader re-signs it with
your own.
Husk needs iOS 16.0 or later.
JIT
Both the translation layer and Emulation need JIT, which on iOS comes from a debugger. Husk can get it in several ways, and walks you through each one (Settings › JIT & Sideload):
- Built-in StikJIT (iOS 26 and later): Husk turns JIT on itself, with no second app. On iOS 27 it pairs with your iPhone from Settings, with no computer. See docs/06-built-in-jit.md.
- StikDebug, installed alongside Husk.
- TrollStore or a Dopamine jailbreak ("Allow JIT in Apps"), on iOS versions before 26 only. From iOS 26 only a debugger can grant JIT.
Building
Husk is built on a Mac with Xcode. The build scripts also call meson,
ninja, pkg-config, python3, xcodegen, qemu-img and a Rust
toolchain with the aarch64-apple-ios target.
./scripts/ci_build.shFrom a clean checkout this fetches and cross-compiles everything Husk links:
- QEMU and its dependencies
- ANGLE and virglrenderer
- MoltenVK
- the on-device pairing library
It then builds the app and writes the IPA to build/Husk.ipa. The first run
takes a couple of hours, and later runs reuse what is already built. After
that, ./scripts/package_ipa.sh rebuilds just the app and writes
~/Desktop/Husk.ipa.
tools/regress/run.sh plays a set of games on the Mac through the
translation layer and checks each against a reference screenshot (see the
top of tools/regress/cases.txt for what it needs).
Licence
GPL-2.0-or-later. Husk links QEMU, which is GPLv2, so the shipped binary is a
combined GPLv2 work and the full source is public. The translation layer is
Husk's own code, under the same licence. Husk cannot go on the App Store, both
because of that and because it needs get-task-allow plus a debugger
attaching at runtime. See docs/01-licensing.md.






