Affiliate disclosure: This guide contains affiliate links. As an Amazon Associate, we earn from qualifying purchases at no extra cost to you. Learn more.
2026-09-11 · News and analysis
Affiliate disclosure: This guide contains affiliate links. As an Amazon Associate, we earn from qualifying purchases at no extra cost to you. Learn more.
Somebody got ULTRAKILL running on an iPhone that was never jailbroken. Not a cloud stream, not a mobile port. The actual Windows build, the x86-64 binary you own on Steam, executing on an A15.
The project is called Madeira, and the way it works is genuinely clever. It stacks three separate translation layers inside a single process and gets a Direct3D 11 game to hand its draw calls to Metal. On a phone. Through a sandbox designed specifically to make this impossible.
It is also being reported wrong almost everywhere. The version going around says Cyberpunk 2077 runs on an iPhone. It does not, and the project's own documentation never claimed it did. What actually runs is a much shorter list, and the catch that gates all of it is worse than the one being reported.
Here is the real picture.
The Short Version
- What it is: Madeira, a research project that runs x86-64 Windows games on a non-jailbroken iPhone
- The stack: Wine in its ARM64EC form for the Windows APIs, FEX-Emu to translate x86-64 instructions to ARM64, and DXMT to turn Direct3D 11 calls into Metal
- The clever part: it all runs as one Mach process, with
wineserveras a thread instead of a separate process, because iOS will not let an app spawn one - Playable today: Thumper and ULTRAKILL
- Reached gameplay: Marvel Cosmic Invasion, with unreliable controls and at least one unexplained termination
- Everything else: reaches gameplay at low frame rates, or does not
- Not playable: Cyberpunk 2077, which the project has never claimed
- Development hardware: an A15, meaning an iPhone 13 Pro
- The catch: it needs JIT, which on iOS needs a debugger attached, and Apple has been steadily breaking the ways to do that
- The other catch: a free Apple ID signs the app for seven days, then you rebuild and reinstall it
- Licence: GPL-3.0-or-later
- Status: the author calls it a research project, not a product
What Madeira Actually Is
Three problems stand between a Windows game and an iPhone, and Madeira solves them separately.
The instruction problem. Your Steam library is compiled for x86-64. An iPhone runs ARM64. FEX-Emu translates one to the other at runtime, the same way it does on Linux handhelds. If you have read our ROCKNIX and Steam guide, this is the identical component doing the identical job, just on a different host.
The Windows problem. Games call Windows APIs that iOS has never heard of. Wine answers those calls. Wine is not an emulator and never has been. It is a reimplementation of the Windows API surface, which is why the phrase keeps showing up in the documentation of things that also contain an emulator.
Madeira uses Wine in its ARM64EC form, and that choice is the reason this is less absurd than it sounds. ARM64EC is a Microsoft ABI that lets native ARM64 code and translated x86-64 code live in the same process and call each other directly. Wine's own libraries run as real ARM64. Only the game goes through FEX. You are not translating the entire operating system, only the parts that actually came from an x86 binary.
The graphics problem. Windows games speak Direct3D. Apple platforms speak Metal and nothing else. DXMT translates D3D11 and D3D10 into Metal. It is not a hobby script, either. DXMT is 3Shain's project, CodeWeavers has backed its development since 2024, and it is the same layer that ships inside CrossOver on the Mac.
Then there is the part that is pure iOS. Wine normally runs a separate wineserver process to coordinate everything. iOS apps cannot spawn processes. So Madeira runs wineserver as a thread inside the same Mach process as everything else. That is not a performance optimisation. It is a workaround for a sandbox rule, and rebuilding a multi-process architecture as a single-process one is the kind of change that causes strange, game-specific problems for years.
What Actually Runs
The honest list is short.
| Title | Status |
|---|---|
| Thumper | Playable |
| ULTRAKILL | Playable |
| Marvel Cosmic Invasion | Reaches gameplay, controls not yet reliable, one run ended in an unexplained termination |
| Others tested | Reach gameplay at low frame rates |
Two playable games is not a limitation worth mocking. It is where every one of these projects starts. Winlator was a curiosity before it was a category. What matters is that the pipeline works end to end, because that is the hard part, and a compatibility list is the easy part that follows.
It is also worth noting what these two games have in common. Thumper and ULTRAKILL are both stylised, tightly optimised and light on their memory budget. They are not light on GPU work, but neither is dragging an open world through a translation layer on a passively cooled phone.
Did Cyberpunk 2077 Really Run on an iPhone?
No. Cyberpunk 2077 does not appear in Madeira's documentation or in any of its commits, and the project has not claimed it.
The reason so many people believe otherwise is that three separate and completely real stories have been compressed into one wrong headline.
| The story people are thinking of | What actually happened |
|---|---|
| Cyberpunk on a phone | On Android, not iPhone. ETA Prime ran it on a Red Magic 11 Pro through GameHub at 720p and low settings with FSR 2.1, getting the mid-20s to low-30s, rising to the mid-40s with frame generation. TechSpot covered it in February 2026. The phone hit 100C. |
| Cyberpunk on an iPhone chip | True, but not on an iPhone. The MacBook Neo uses the A18 Pro, the same silicon family as recent iPhones. ETA Prime measured about 33fps in the built-in benchmark and around 40fps at 1204x753, upscaled from an internal 708x443. |
| Cyberpunk and FEX | Real, and on Linux. FEX 2508 improved Cyberpunk 2077 by roughly 38 percent on ARM64, as Phoronix reported in August 2025. This is the source of the association between FEX and this specific game. |
Put those three together and you get "Cyberpunk 2077 runs on iPhone via FEX." Take them apart and you get three interesting facts, none of which is that.
Our honest read: an iPhone chip has enough raw performance for this eventually. The A18 Pro proved that in a laptop chassis. What an iPhone does not have is the thermal headroom, the RAM ceiling or a mature enough stack, and Madeira is weeks old.
The JIT Problem Is the Real Catch
Everyone reporting this mentions that Madeira needs JIT. Almost nobody explains why that is a bigger problem in September 2026 than it was a year ago.
Translating x86-64 to ARM64 at any usable speed means generating machine code while the program runs. That requires memory that is both writable and executable. iOS forbids exactly that, for exactly the reason you would expect: code Apple never reviewed would get to run.
There is one documented exception. If a debugger is attached to a process, iOS permits it. So every serious emulator and translation project on iOS has ended up doing the same strange thing, which is attaching a debugger to itself. StikDebug is the tool Madeira uses for this.
That workaround has been getting worse.
- StikDebug needs a pairing file generated on a computer, and that file stops working after an iOS update or a device reset
- It needs an active Wi-Fi connection during setup
- It needs a local VPN loopback running on the device, which is not optional
- iOS 26.4 removed the airplane-mode trick that let people enable JIT without a network connection at all
- iOS 26.6 and iOS 27 work with only a handful of apps, and StikDebug has been patching against a moving target
Then there is signing. Madeira is not on the App Store and cannot be, because an app that needs a debugger attached will never pass review. You sign it with your own Apple ID. A free Apple ID produces a provisioning profile that expires in seven days. After that the app stops launching and you rebuild and reinstall it.
The one piece of good news is that the app container survives reinstallation, so your Wine prefixes and your save files do not go with it.
Add it up and the actual weekly experience is: rebuild the app, re-sign it, reinstall it, reconnect the pairing, start the loopback VPN, attach the debugger, and then play one of two working games. That is a hobby. It is a genuinely impressive hobby, and we are glad somebody is doing it, but it is worth describing accurately before anyone spends a weekend on it.
An Android Handheld Already Does This, Properly
Here is the part that matters most for anyone reading this on a retro handheld site.
The stack Madeira is building already exists, it already works, and you can already buy hardware that runs it without a debugger or a weekly rebuild.
| Madeira on iPhone | ROCKNIX on Android handhelds | Winlator / GameHub on Android | |
|---|---|---|---|
| CPU translation | FEX | FEX | Box64 / Box86 |
| Windows layer | Wine, ARM64EC | Proton | Wine |
| Graphics translation | DXMT to Metal | DXVK to Vulkan | DXVK / Turnip to Vulkan |
| Needs a debugger attached | Yes | No | No |
| Expires after 7 days | Yes | No | No |
| Typical RAM | 6 to 8GB, shared with iOS | 8 to 16GB | 8 to 16GB |
| Active cooling | No | Often | Often |
It is the same three-part idea every time. Something translates the instructions, something answers the Windows calls, something converts the graphics API. Our ROCKNIX and Steam guide walks through the FEX and Proton version of this, and our Winlator setup guide covers the Box64 and Wine version. If the concepts here are new, we wrote a full explainer on what translation layers actually do.
An Android handheld with 12GB or more of RAM and a fan will run more PC games today, more reliably, with no signing treadmill. Something in the Snapdragon 8 Elite class is the realistic entry point for this kind of work.
If you want to understand where the hardware sits, our Snapdragon 8 Elite handhelds guide covers the current chips, and best PC gaming handhelds covers the x86 machines that skip translation entirely.
One thing to be clear about: everything here assumes you are running games you already own. Madeira runs your existing Steam library. That is the whole point of it, and it is the only use we cover.
Why This Still Matters
It would be easy to file Madeira under "impressive but pointless" and move on. We do not think that is right.
The iPhone has been the most capable gaming chip most people own and the least useful one, for a decade, purely because of software policy. Apple opened the App Store to console emulators in 2024 and that changed things, which is why our iPhone emulation guide exists at all. But PC games were never part of that opening, and the JIT rule meant nobody could even attempt them at a reasonable speed.
Madeira is the first credible attempt at the full stack. It proves the pipeline closes. Everything after this is compatibility work and performance work, which is slow but well understood.
It also arrives at an odd moment for Apple. The company is removing Rosetta 2, its own x86 translation layer, on a published schedule. macOS 27 is the last release with full support and macOS 28 in autumn 2027 keeps only a reduced version for older games. Apple is winding down the official x86 translator on the Mac in the same window the community is building an unofficial one for the iPhone.
Frequently Asked Questions
Can I install Madeira from the App Store?
No, and it never will be available there. The app requires a debugger to attach to itself so it can use JIT, which no App Store app is permitted to do. Sideloading is the only route.
Do I need to jailbreak my iPhone?
No. That is the notable part. Madeira targets a stock, non-jailbroken iPhone. What it needs instead is a debugger attached and an app signed with your own Apple ID.
Does Cyberpunk 2077 run on an iPhone?
No. The project has never claimed it does. The Cyberpunk stories in circulation are about an Android phone running GameHub, a MacBook Neo using an A18 Pro chip, and a FEX performance improvement on Linux.
Why does the app stop working after a week?
A free Apple developer account issues provisioning profiles that expire after seven days. When the profile expires the app will not launch until you rebuild and reinstall it. A paid developer account extends this to a year. Your saves and Wine prefixes survive the reinstall either way.
Which iPhone do I need?
The project does not publish a minimum. Development has been on an A15, which is the iPhone 13 Pro. Newer chips have more performance and more memory bandwidth, both of which matter a great deal here, but the limiting factors on any iPhone are RAM and sustained thermals rather than peak speed.
Is this faster than an Android handheld?
Not today. Android handhelds in the same price range have more RAM, active cooling in many cases, and a far more mature software stack. The iPhone has strong peak performance and poor sustained performance in a phone chassis.
Is any of this legal?
Running Windows games you own through a translation layer is no different from running them through Proton on a Steam Deck. Wine, FEX and DXMT are all legitimate open source software. Madeira is GPL-3.0-or-later. As always, we only cover playing games you actually own.
Related Reading
- What Translation Layers Actually Do: FEX, Box64, Proton and DXVK
- ROCKNIX and Native Steam on Android Handhelds
- Winlator Setup Guide
- How to Emulate Retro Games on iPhone
- Best Phones for Emulation in 2026
- Phone Plus Controller vs a Dedicated Handheld
- Can You Emulate on the Steam Frame?
Madeira's compatibility list and the state of JIT on iOS are both moving quickly. Everything above reflects the project's documentation and the iOS situation as of 11 September 2026. The playable game list in particular should be assumed out of date within weeks.

