UTM is a full featured system emulator and virtual machine host for iOS and macOS. It is based off of QEMU. In short, it allows you to run Windows, Linux, and more on your Mac, iPhone, and iPad.
- Full system emulation (MMU, devices, etc) using QEMU
- 30+ processors supported including x86_64, ARM64, and RISC-V
- VGA graphics mode using SPICE and QXL
- Text terminal mode
- USB devices
- JIT based acceleration using QEMU TCG
- Frontend designed from scratch for macOS 11 and iOS 11+ using the latest and greatest APIs
- Create, manage, run VMs directly from your device
Additional macOS Features
- Hardware accelerated virtualization using Hypervisor.framework and QEMU
- Boot macOS guests with Virtualization.framework on macOS 12+
UTM/QEMU requires dynamic code generation (JIT) for maximum performance. JIT on iOS devices require either a jailbroken device, or one of the various workarounds found for specific versions of iOS (see “Install” for more details).
UTM SE (“slow edition”) uses a threaded interpreter which performs better than a traditional interpreter but still slower than JIT. This technique is similar to what iSH does for dynamic execution. As a result, UTM SE does not require jailbreaking or any JIT workarounds and can be sideloaded as a regular app.
To optimize for size and build times, only the following architectures are included in UTM SE: ARM, PPC, RISC-V, and x86 (all with both 32-bit and 64-bit variants).
How to install UTM?
UTM works on all devices running iOS 11 or higher if jailbroken. UTM can also be run semi-tethered on non-jailbroken devices. UTM runs untethered on some non-jailbroken devices with limited compatibility depending on your iOS version and device processor. See the list below for more details.
If you are running iOS 11, 12, or 13: UTM does not require a jailbreak to use, but you must sideload it. If you are new to sideloading, it is a way to use a developer’s certificate to load unapproved apps on a non-jailbroken iOS device. There are a few limitations to sideloading:
- Free developer accounts must re-sign every 7 days
- Paid developer accounts must re-sign every 1 year
The recommended way for non-jailbreak users is to use AltStore which manages re-signing automatically.
If you are running iOS 14.2, 14.3: UTM works with sideloading (non-jailbroken) if your device has an Apple A12 chip or newer. Otherwise, keep reading.
If you are running iOS 14.0, 14.1, 14.4, or higher: UTM works if you are jailbroken or semi-tethered with Jitterbug or AltJIT. “Semi-tethered” means either tethered to a Mac/PC, to another iOS device with Wifi sharing, or to itself (one iOS device running both Jitterbug/AltJIT and UTM) through a on-device VPN profile.
Note: at this time, 3rd party repos require a beta of AltStore which is available only to the developer’s Patreon supporters. When installing from the repository, you can recieve update prompts from AltStore.
For non beta-testers, the public release of AltStore lacks the ability to add repositories and check updates but can still manage re-signing automatically.
There are many “cloud” signing services including AppCake that do not work with UTM because they use the wrong kind of signing certificate. If you get a crash or a black screen while trying to start a VM, it is likely that your signing certificate was invalid.
You can check if you have the right signing certificate by going to
Settings -> General -> Profiles & Device Management. If the certificate used for signing UTM is listed under
Developer App, then it is good. If it is listed under anything else such as
Enterprise App, then it is the wrong certificate.
UTM requires AppSync Unified which can be found on Karen’s Repo. You need to add both repositories to your package manager (Cydia, Sileo, Zebra, etc.) to install UTM.