Madeira: Run Windows PC Games on a Non-Jailbroken iPhone
A research project for running Windows games on non-jailbroken iPhones, combining Wine, FEX-Emu, and DXMT in one Mach process.
GitHub willfaust/Madeira Updated 2026-09-28 Branch main Stars 814 Forks 152
iOS Windows game compatibility layer FEX-Emu Wine DXMT ARM64EC Metal Non-jailbroken iPhone

🧭 Decision Guide

Try it if you

  • You have a non-jailbroken iPhone and are willing to use JIT with StikDebug for experimental Windows games.
    The README Requirements section requires a non-jailbroken iPhone, JIT, and StikDebug.
  • Your target game is Thumper or ULTRAKILL and you can accept research-project instability.
    The README Status section says Thumper and ULTRAKILL are playable and calls the project a research project.
  • You want to study iOS integration across x86-64, ARM64, Wine, D3D11, and Metal.
    The README says FEX-Emu handles x86-64 → ARM64 and DXMT handles D3D11 → Metal.

Skip it if you

  • You require App Store installation or cannot use the JIT debugger-attach workflow.
    The README says JIT requires debugger attach, so the app cannot be distributed through the App Store and must be sideloaded.
  • You need a stable commercial product rather than a research project with breaking changes and per-title quirks.
    The README Status section explicitly mentions rough edges, per-title quirks, and breaking changes.
  • You cannot rebuild and reinstall the app every 7 days.
    The README Requirements section says free Apple ID provisioning profiles expire after 7 days.
  • You need reliable controls and long-term stability specifically for Marvel Cosmic Invasion.
    The README says a run ended in unexplained termination and that its controls are not yet reliable.

Requirements

  • A non-jailbroken iPhone; development has been on an A15 (iPhone 13 Pro).
  • JIT; on iOS it requires debugger attach, and the project uses StikDebug.
  • An Apple ID for signing; free-account provisioning profiles expire after 7 days.
  • FEX, wine, and research/dxmt fork submodules containing the iOS work.
  • xcodebuild for the app, with build/*/build.sh covering the native pieces.
  • Microsoft Visual C++ runtime DLLs supplied separately.

First step (verbatim from README)

git clone --recurse-submodules <this repo>

Watch out

  • Do not replace the FEX, wine, or DXMT submodules with upstream clones; the README says those forks contain the iOS work.
    README Building: upstream clones will not build here.
  • A free Apple ID requires weekly rebuilding and reinstalling, although prefixes and saves survive reinstall.
    README Requirements: profiles expire after 7 days and the app container survives reinstall.
  • Microsoft Visual C++ runtime DLLs are absent from the repository and must be supplied using tools/fetch-vcruntime.md.
    README License section explicitly says the runtime DLLs are not distributed.
  • Do not submit AI-generated changes from this fork upstream to FEX-Emu.
    README A note on upstream contributions cites FEX-Emu's policy against AI-generated contribution code.

Not stated in the README

  • The README does not specify supported iOS versions or the full iPhone model range; it only mentions development on an A15 iPhone 13 Pro.
  • The README does not provide complete StikDebug installation, JIT enablement, or debugger-attach steps.
  • The README does not provide per-game frame-rate, resolution, or graphics-setting data.
  • The README does not provide a complete compatibility list; it only names Thumper, ULTRAKILL, and Marvel Cosmic Invasion.
  • The README does not specify the complete xcodebuild or build/*/build.sh arguments, dependency versions, or build time.
  • The README does not state where to obtain the Microsoft Visual C++ runtime DLLs; it only points to tools/fetch-vcruntime.md.
  • The README does not identify the trigger or fix timeline for Marvel Cosmic Invasion's unexplained termination.
  • The README provides no release history; project metadata reports 0 releases and No releases as the latest version.

💡 Deep Analysis

6
No I use a non-jailbroken iPhone, target Marvel Cosmic Invasion, and require reliable controls with no unexplained termination during execution; is Madeira appropriate today?
For: A game tester targeting Marvel Cosmic Invasion on a non-jailbroken iPhone who requires reliable controls and stable execution

No, because the README explicitly records unexplained termination and unreliable controls for Marvel Cosmic Invasion, directly conflicting with your acceptance criteria.

  • The status only says that the game “has reached gameplay,” while also reporting that one run ended in an unexplained termination.
  • It states that the controls are “not yet reliable,” so reaching gameplay cannot be treated as stable playability.
  • The project is described as a research project with per-title quirks and breaking changes; other games may only reach gameplay at low frame rates.
  • The runtime also combines x86-64-to-ARM64 translation, Windows compatibility, and D3D11-to-Metal conversion, and the README offers no stability commitment meeting your requirements.
  • Status: Marvel Cosmic Invasion has reached gameplay, but a run ended in an unexplained termination.
  • Status: its controls are not yet reliable.
  • Status: this is a research project, not a product, with rough edges, per-title quirks, and breaking changes.
  • Status: other games reach gameplay at low frame rates.
Not stated in the README:The README does not identify reproduction conditions, log locations, or a fix plan for the unexplained termination.;It does not say whether the control issue concerns touch input, controller mapping, or in-game input handling.
Yes I need to build the Wine Unix-side libraries, ARM64EC PE modules, FEX, DXMT, and the iOS app from source, and I cannot replace the dependencies with upstream repositories; what is the correct starting point?
For: A developer building Madeira from source who must compile Wine Unix libraries, ARM64EC PE modules, FEX, DXMT, and the iOS app

Yes, but you must use the project’s specified recursive submodules; replacing them with upstream repositories violates the build assumptions.

  • The README splits the build into Wine Unix-side libraries, ARM64EC PE modules, FEX, DXMT, and the iOS app.
  • Native pieces are covered by build/*/build.sh, while the iOS application is built with xcodebuild, so you need both the scripted native build chain and the Xcode toolchain.
  • The README explicitly says that the FEX, wine, and research/dxmt submodules point to forks containing the iOS work and that “upstream clones will not build here.”
  • Project data shows a substantial codebase: about 6.24 million lines of C plus Objective-C, Swift, and Objective-C++ code, so build diagnosis is nontrivial.
  • Building: the build is split across Wine Unix libraries, ARM64EC PE modules, FEX, DXMT, and the iOS app.
  • Building: `build/*/build.sh` covers native pieces and the app is built with `xcodebuild`.
  • Building: FEX, wine, and research/dxmt are forks containing the iOS work; upstream clones will not build here.
  • Project data: C 6,241,149; Objective-C 351,510; Swift 282,979; Objective-C++ 190,195
git clone --recurse-submodules <this repo>
Not stated in the README:The README does not specify the required Xcode, iOS SDK, or macOS versions.;It does not provide the complete order, disk-space requirements, or build time for each chain.
It depends I can only use a free Apple ID and can rebuild and reinstall once a week with Xcode and StikDebug; can I realistically maintain Madeira under these signing and JIT constraints?
For: An iOS build developer using a free Apple ID, Xcode, and StikDebug who can maintain a sideloaded app weekly

It depends: maintenance is technically feasible if you accept weekly reinstallation and debugger attachment, but it is unsuitable for hands-off long-term use.

  • The README says a free Apple ID can sign the app, but its provisioning profile expires after 7 days, requiring a weekly rebuild and reinstall.
  • iOS JIT requires a debugger to attach, and this project uses StikDebug. Without the attachment, the dynamically translated game code cannot run correctly.
  • Since JIT requires debugger attachment, the app cannot be distributed through the App Store and must be sideloaded, placing installation and launch operations on the maintainer.
  • The app container survives reinstall, so Wine prefixes and saves are preserved despite the weekly cycle.
  • Requirements: “A free account works; its provisioning profiles expire after 7 days.”
  • Requirements: JIT on iOS requires a debugger to attach, and the project uses StikDebug.
  • Requirements: the app cannot be distributed through the App Store and is installed by sideloading.
  • Requirements: the app container survives reinstall, preserving prefixes and saves.
Not stated in the README:The README does not explain the exact StikDebug installation or automatic-attachment process for your iOS version.;It does not state whether every game or JIT launch setting must be reconfigured after weekly resigning.
It depends I want to distribute a Madeira derivative containing modified Wine, FEX, DXMT, and Microsoft Visual C++ runtimes; can I package and release it directly under the GPL-3.0-or-later and third-party license constraints?
For: An open-source maintainer planning to distribute a Madeira derivative that combines Wine, FEX, DXMT, and Microsoft Visual C++ runtimes

It depends: derivative Madeira code must follow GPL-3.0-or-later, but the Microsoft Visual C++ runtime cannot simply be obtained and bundled from this repository.

  • The License section identifies Madeira as GPL-3.0-or-later and requires distributed derivatives to remain open source.
  • The forks cannot be treated exactly like their upstream projects: the Wine fork was relicensed to GPL-3.0-or-later under LGPL-2.1 §3, while FEX and DXMT retain upstream MIT for original code but GPL-3.0-or-later applies to their modifications.
  • The README also distinguishes rpmalloc’s upstream 0BSD terms from GPL-covered modifications and directs maintainers to each fork’s LICENSE-MADEIRA.md and THIRD-PARTY-NOTICES.md.
  • Microsoft Visual C++ runtime DLLs “are not distributed here and must be supplied yourself,” so redistribution depends on the source and terms of the runtime package you provide.
  • License: GPL-3.0-or-later; distributed derivatives must remain open source.
  • License: the wine fork was relicensed to GPL-3.0-or-later under LGPL-2.1 §3.
  • License: FEX and DXMT preserve upstream MIT, while modifications are GPL-3.0-or-later.
  • License: Microsoft Visual C++ runtime DLLs are not distributed here and must be supplied by the user.
Not stated in the README:The README does not determine whether the particular Microsoft Visual C++ runtime source you choose permits redistribution with the app.;It provides no legal conclusion for specific channels such as the App Store or enterprise signing.
Yes I have a non-jailbroken A15 iPhone 13 Pro and want to sideload and run ULTRAKILL or Thumper locally instead of using cloud gaming; is this project suitable for me?
For: An advanced user with a non-jailbroken A15 iPhone 13 Pro who is willing to sideload Windows games

Yes, provided that you accept an experimental research project rather than a polished game platform.

  • The README explicitly says that “Thumper and ULTRAKILL are playable,” giving these titles a stronger basis than untested games.
  • It targets “a non-jailbroken iPhone,” and development was done on an A15 iPhone 13 Pro, matching your hardware constraint.
  • Wine ARM64EC, FEX-Emu, and DXMT handle Windows compatibility, x86-64-to-ARM64 translation, and D3D11-to-Metal conversion respectively.
  • You still need a JIT debugger, Apple ID signing, and sideloading. A free account expires after 7 days, although the app container preserves prefixes and saves after reinstall.
  • Status: “Thumper and ULTRAKILL are playable.”
  • Requirements: “A non-jailbroken iPhone. Development has been on an A15 (iPhone 13 Pro).”
  • README introduction: Wine ARM64EC, FEX-Emu for x86-64 → ARM64, and DXMT for D3D11 → Metal
  • Requirements: provisioning profiles expire after 7 days, while prefixes and saves are preserved
Not stated in the README:The README does not state whether your exact iOS version is compatible with the current build.;It does not provide actual frame-rate or power-consumption measurements for ULTRAKILL or Thumper on A15.
Yes I am studying the FEX-Emu x86-64-to-ARM64, Wine ARM64EC, and DXMT D3D11-to-Metal pipeline, and I must run it in a single Mach process on iOS; is Madeira a suitable experimental base?
For: A mobile-runtime researcher studying x86-64 translation, Wine, and Metal graphics conversion on a non-jailbroken iPhone

Yes, it is a suitable experimental base because the README directly describes the complete pipeline and the iOS process constraints you want to study.

  • Madeira combines Wine ARM64EC, FEX-Emu, and DXMT for Windows compatibility, instruction translation, and graphics API conversion.
  • The components run in “a single Mach process,” with wineserver changed to a thread rather than a separate process; this is an explicit adaptation to iOS process restrictions.
  • The repository contains C, Objective-C, Swift, and Objective-C++ code, while several dependencies use forks carrying iOS-specific changes, making component-level investigation possible.
  • However, the README calls it a research project and warns about breaking changes. It is therefore better for validating mechanisms than for serving as a stable runtime baseline.
  • README introduction: combines Wine ARM64EC, FEX-Emu, and DXMT in a single Mach process
  • README introduction: wineserver runs as a thread rather than a separate process
  • Project data: main language C, with Objective-C, Swift, and Objective-C++ also present
  • Status: “This is a research project, not a product ... and breaking changes.”
git clone --recurse-submodules <this repo>
Not stated in the README:The README does not document the exact call boundaries or debugging interfaces between components inside the single Mach process.;It provides no measurements for FEX translation overhead, DXMT D3D11 feature coverage, or memory usage.

✨ Highlights

  • FEX-Emu translates x86-64 to ARM64
  • DXMT maps D3D11 to Metal
  • Thumper and ULTRAKILL are playable
  • Free Apple ID signing expires every 7 days

🔧 Engineering

  • Runs Windows games on iOS with Wine, FEX-Emu, and DXMT
  • Wine, FEX-Emu, and DXMT run as one Mach process

⚠️ Risks

  • The project explicitly expects breaking changes
  • Other games may only reach gameplay at low frame rates
  • JIT requires debugger attach, so App Store distribution is unavailable
  • Apple ID provisioning profiles expire after 7 days

👥 For who?

  • iOS developers testing Windows games on non-jailbroken iPhones
  • Researchers comfortable with Xcode, xcodebuild, and submodule-based builds
  • Experimental users with an A15 iPhone, StikDebug, and an Apple ID