Madeira puts Wine, FEX, and DXMT inside one iPhone app
Madeira tries something iOS does not make convenient: running x86-64 Windows games on a non-jailbroken iPhone. Wine supplies the Windows environment, FEX-Emu translates x86-64 code to ARM64, and DXMT converts Direct3D 11 calls to Metal. The unusual part is architectural. Wineserver runs as a thread, and the pieces share one Mach process because iOS does not allow the normal desktop arrangement.
The README names 2 games, Thumper and ULTRAKILL, as playable. Marvel Cosmic Invasion has reached gameplay, but one run ended without an explanation and its controls remain unreliable. Other games may reach gameplay at low frame rates. Those admissions set the right expectation: Madeira is a compatibility experiment where each working title is evidence, not a promise that a Steam library will transfer intact.
A 2,055.7 MB checkout still does not give you an IPA
The source tree is far bigger than the iOS interface suggests. Our checkout contained 32,922 files, about 16,789,054 lines of source, and 2,055.7 MB on disk. Much of that scale comes from the forked Wine, FEX, and DXMT components that carry the iOS work. The README warns that upstream clones are not substitutes for those submodules, so a recursive clone is part of the build, not an optional way to obtain examples.
Building the app means moving through several toolchains. Native Wine libraries, ARM64EC PE modules, FEX, and DXMT have their own scripts, while the app itself uses xcodebuild. Microsoft Visual C++ runtime DLLs are deliberately absent and must be supplied locally. GitHub currently has no published release to bypass that work, and issue 13 is a direct request for a detailed build guide from someone unable to assemble the existing instructions.
What happened when we ran it
Our sandbox cloned commit 8c050d0 on 3 CPUs with 8 GB of RAM. The automated project detector landed in FEX/External/unordered_dense, not the Xcode app. It installed 37 Python packages in 6 seconds, used 42 MB for those packages, and completed that nested build in 1 second. This proves that one vendored component can set itself up in a clean Debian container. It does not prove that Madeira can be packaged for an iPhone.
The test command failed with exit code 5 after 1 second. Pytest reported 0 passed, 0 failed, and 0 collected, with the final line no tests ran in 0.14s. That is a failed test step even though no assertion broke. Pip-audit reported 0 known vulnerabilities for the installed Python packages. Our scan also found 0 CI workflows, no Dockerfile, and a tests directory, so there is no visible repository automation that turns this Debian result into an iOS build check.
Debugger-assisted JIT and 7-day signing are permanent chores
Madeira needs JIT compilation, which means attaching a debugger on iOS. The project uses StikJIT, and that requirement prevents App Store distribution. You must sideload the app instead. An Apple ID is also required for signing. A free account works, but its provisioning profile expires after 7 days, forcing a weekly rebuild and reinstall. The app container survives, so prefixes and save files should remain, but the maintenance does not disappear.
Development has focused on an A15 iPhone 13 Pro. That is useful disclosure rather than broad hardware support. Issue 6 asks about M-series iPads, while issue 24 comes from a user without a Mac who wants workflow builds or releases. Our lab found 0 workflow files at commit 8c050d0. If you only want to play a game, these requirements are a poor exchange. If you are studying iOS process limits or compatibility layers, they are the subject of the project.
A missing Wine source file can stop the current build
The repository was pushed on September 25, 2026, and GitHub showed 735 stars plus 28 open issues and pull requests when fetched. Recent activity is easy to see in source and discussions. There is still no latest GitHub release, so freshness should not be mistaken for a stable distribution channel. You are tracking commits and submodule pins rather than choosing a tested version tag.
Issue 20 gives the clearest current build warning. The reporter says the pinned Wine submodule includes arm64ec_x64_export_iat.c but does not contain that file, causing the ARM64EC configure step to stop. The log is specific enough to treat reproducibility as unresolved. Combined with the 2,055.7 MB recursive checkout and several native chains, one missing generated or tracked file can waste a long setup before Xcode enters the picture.
GPL terms and upstream AI rules affect contributors
Madeira is GPL-3.0-or-later, and distributed derivatives must stay open source. Its Wine fork was relicensed under the LGPL provision described in the README. FEX, DXMT, and rpmalloc preserve their upstream permissive terms while Madeira's modifications use GPL-3.0-or-later. The project also does not distribute Microsoft's runtime DLLs, which is why the setup points you to a separate fetching procedure.
Contributors have another boundary to remember. The README says the forks contain substantial AI-assisted work, while FEX-Emu does not accept AI-generated upstream contributions. Code can remain in Madeira's fork under its license and still be unacceptable for submission to FEX. For a player, that detail is background. For anyone planning to upstream a fix from this 32,922-file tree, it changes where the patch may legally and procedurally go.
Madeira is worth watching because it has already moved a few real games past the launch screen on an ordinary iPhone. It is worth using today only if you want to participate in that research. The decisive evidence is the gap between the README's working-title reports and our run: a 1-second nested build succeeded, yet the actual iOS product remained outside the environment we could test.

