Open-source project
touchHLE/touchHLE avatar
touchHLE/touchHLE

touchHLE: Running Early iPhone OS Games Without the Hardware

High-level emulator for iPhone OS apps. This repo is used for issues, releases and CI. Submit patches at: https://review.gerrithub.io/admin/repos/touchHLE/touchHLE

3,940 stars328 forksRustMPL-2.0

At a glance

What is it?
touchHLE is a high-level emulator that replaces iPhone OS instead of simulating it, targeting iPhone OS 2.x and 3.0 games. Here is how it works, how to get a first app running, and where it gives up.
Who is it for?
Adopt touchHLE if you want to run a specific early iPhone OS game whose entry in the app compatibility database already lists a working version, and you have a legally obtained, decrypted .ipa or .app. Do not adopt it as a general iOS emulator, as a way to run 64-bit or iPad-era software, or as a platform for non-game apps: the README states support for other apps is not a priority.
Can I use it commercially?
Yes, with conditions. MPL-2.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What touchHLE Solves, and for Whom

Early iPhone OS games are stranded. They were built for iPhone OS 2.x and 3.0, they shipped as 32-bit binaries, and modern iOS dropped that world entirely. touchHLE exists to run those binaries on a desktop or an Android device. The README is explicit about the scope: currently iPhone and iPod touch apps for iPhone OS 2.x and iPhone OS 3.0, with iPhone OS 3.1, iPad apps (iPhone OS 3.2) and iOS 4.x listed as longer-term goals, and 64-bit iOS marked never.

The audience is narrow and the project says so. Most working titles are games. Support for other kinds of apps is described as not a priority because it is more complex and less fun. If you are looking for a general-purpose iOS emulator, this is not it, and the README warns that the vast majority of apps for the supported OS versions do not currently work.

High-Level Emulation: Replacing iPhone OS Instead of Simulating It

The architectural choice is the whole project. A low-level emulator would recreate the iPhone or iPod touch hardware and boot iPhone OS inside it. touchHLE does the opposite. It takes the place of iPhone OS and supplies its own implementations of the system frameworks, named in the README as Foundation, UIKit, OpenGL ES and OpenAL among others. The only code the emulated CPU executes is the app binary plus a handful of libraries kept in touchHLE_dylibs/.

That means the emulated CPU is doing much less work than in a full-system emulator. The repository depends on dynarmic for that CPU. The trade-off is visible in the framework coverage: the README describes UIKit as easily the most hacky and incomplete of the large frameworks, because most games use very little of it, while the OpenGL ES and OpenAL implementations are probably complete enough to cover a large number of early apps, because games lean on them heavily. Coverage is therefore shaped by whichever games contributors cared about, not by a plan to implement each API surface.

Installing touchHLE and Running a First App

The README gives two routes: download a binary release from the project's GitHub releases page, or build it yourself. Official binary releases exist for x64 Windows, x64 macOS and AArch64 Android. AArch64 macOS, x64 Linux and AArch64 Linux are described as probably working but requiring a self-build. The website at touchhle.org is the project's hub for downloads and the FAQ.

Building is a Cargo build. The default feature set is named static, which bundles SDL2 and links it statically along with a static OpenAL Soft wrapper, which is why the workspace pulls in cmake and a C compiler. The repository's Cargo.toml declares the binary as touchHLE, and the default features are declared as:

Running an App on Android Versus Desktop

On Android the README states that only the graphical user interface, an app picker, is available. There is no command line, so the app files must be placed in the touchHLE_apps directory, and that directory only exists after you have run touchHLE at least once. On Windows, macOS and Linux the same directory name appears in the repository root, alongside touchHLE_default_options.txt and touchHLE_options.txt.

Android file management is the awkward part. Google's scoped storage restrictions mean you may need to tap the File manager button inside touchHLE, or find touchHLE in the device's own file manager app, or on older Android versions browse directly to /sdcard/Android/data/org.touchhle.android/files/touchHLE_apps. The README warns that on some devices the File manager button opens a file manager which then crashes during file operations, which it attributes to a probable Android bug the project has not been able to debug; the suggested workaround is to clear that app from recents and open the device file manager directly. ADB is offered as a fourth option, with ya-webadb suggested for people unfamiliar with the tool.

Input is configurable rather than fixed. Touch can come from a mouse or trackpad, from a virtual cursor driven by a game controller's right analog stick, from button and stick mappings to on-screen locations via the --button-to-touch=, --dpad-to-touch= and --stick-to-touch= options documented in OPTIONS_HELP.txt, or from a real touch screen. Accelerometer input can come from a controller's left analog stick, from the mouse with the right button held, or from a real accelerometer on a phone or tablet. Game controllers with built-in accelerometers are listed as a TODO.

Where touchHLE Fails, and When It Is the Wrong Tool

Compatibility is the headline limitation and the README does not soften it: the vast majority of iPhone OS 2.x and 3.x apps do not currently work. The crowdsourced app compatibility database is the guide, but the README cautions that it may contain outdated or inaccurate information. A listed working entry is a lead, not a guarantee.

The binary itself is a hard gate. The app binary must be decrypted to be usable, which rules out App Store downloads taken straight from a device. 64-bit iOS is marked never, so anything from the later era is out of scope permanently rather than pending. iPad apps and iOS 4.x are goals, not features. Non-game apps are deprioritised by design.

There is also a maintenance caveat stated plainly in the README: there have been only a handful of releases so far and no promises can be made about the future, with a request for patience. That is a project telling you not to build a dependency on it.

How touchHLE Differs from Full-System iOS Emulation

The obvious alternative is a low-level emulator that recreates the device hardware and boots the real iPhone OS. The difference in approach is not cosmetic. A full-system emulator needs the OS image itself, and it runs the genuine frameworks, so an app that the OS can run will generally run. touchHLE needs no OS image at all, because it is the OS, but every framework behaviour an app relies on has to have been reimplemented by a contributor. That is why touchHLE's compatibility is uneven and game-shaped: OpenGL ES and OpenAL are close to complete for early apps, UIKit is not.

For someone who wants a specific old game to run and is willing to check the database first, touchHLE's model is the practical one, because there is no OS to source and the binary releases are small enough to ship for three platforms. For someone who wants broad app coverage or fidelity to the original system behaviour, the LLE model is the right family of tool and touchHLE is not a substitute for it.

Licence, Maintenance and Upgrade Cost

touchHLE is licensed under MPL-2.0, stated in Cargo.toml and in the LICENSE file at the repository root. MPL-2.0 is a file-level copyleft licence: modifications to files already under it stay under it, while separate files can carry other terms. That is a summary of the licence identifier, not legal advice, and anyone redistributing a modified build should read the licence text itself.

Maintenance is worth judging from the record rather than the intent. The last push to the repository was on 2026-09-23. The most recent release is v0.2.3, dated 2026-01-02 and titled the Happy New Year release; before it, v0.2.2 is dated 2024-04-01, and v0.2.1 is dated 2023-10-31. The gap between v0.2.2 and v0.2.3 is roughly twenty-one months, which matches the README's own statement that there have been only a handful of releases. Upgrading is cheap in the sense that binary releases are the intended distribution, but anyone tracking trunk should expect the option set to move: OPTIONS_HELP.txt, touchHLE_default_options.txt and touchHLE_options.txt are all versioned in the repository, and the controller mapping flags live there.

One more cost sits outside the licence. The README carries a disclaimer that the project is not affiliated with or endorsed by Apple, and that iPhone, iOS, iPod, iPod touch and iPad are Apple trademarks. It also states that touchHLE should only be used to emulate software you have obtained legally. That constraint is on the user, not on the project.

Editorial conclusion

Adopt touchHLE if you want to run a specific early iPhone OS game whose entry in the app compatibility database already lists a working version, and you have a legally obtained, decrypted .ipa or .app. Do not adopt it as a general iOS emulator, as a way to run 64-bit or iPad-era software, or as a platform for non-game apps: the README states support for other apps is not a priority. Verify first that the exact app version you own appears as working in the database, and that your platform is one of the binary release targets (x64 Windows, x64 macOS, AArch64 Android) or that you are prepared to build from source. If your game is not listed, the honest answer is that touchHLE is the wrong tool today, and the project states it does not take requests.

Frequently asked questions

What does touchHLE mean?

The name combines touch, for the touch input of iPhone and iPod touch devices, with HLE, for high-level emulation. The README describes the approach as taking the place of iPhone OS rather than simulating the hardware, so the emulated CPU only executes the app binary and a few libraries.

Is touchHLE legal to use?

The README states that touchHLE should only be used to emulate software you have obtained legally, and that the app binary must be decrypted to be usable. The project also disclaims any affiliation with or endorsement by Apple.

Which games are compatible with touchHLE?

The touchHLE app compatibility database tracks which apps work, and the README describes it as a crowdsourced effort that may contain outdated or inaccurate information. It also warns that the vast majority of iPhone OS 2.x and 3.x apps do not currently work, and that the ones that do are generally games.

Why does touchHLE keep crashing?

The README does not document a general crash diagnosis path. It does note one specific case on Android, where the File manager button may open a file manager that crashes during file operations, which it attributes to a probable Android bug the project has not been able to debug.

How do I install touchHLE on Android?

Android has official binary releases for AArch64, and the README states that only the graphical app picker interface is available there. You must run touchHLE at least once before the touchHLE_apps directory exists, then place your .ipa files or .app bundles inside it.

What is touchHLE?

It is a high-level emulator for iPhone OS apps, written in Rust, that runs on modern desktop operating systems and Android. It provides its own implementations of the system frameworks instead of simulating the iPhone or iPod touch hardware.

Official sources

  1. License: MPL-2.0
  2. Project website
  3. README
  4. Releases
  5. touchHLE/touchHLE on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/touchhle-touchhle.svg)](https://hysenlabs.com/projects/touchhle-touchhle)