MetalSharp Wine
native on Apple silicon.
Wine 11.20 built as a native Arm64 macOS app. A FEX-Emu fork translates x86 Windows code to ARM64, so x86_64 and 32-bit games run with no Rosetta. Version 4.0 is the runtime behind MetalSharp 1.0.0's Arm64 FEX build.
- x86_64 / i386 .exe
- FEX (ARM64EC · WoW64)
- Wine 11.20 arm64
- Mullion · VKD3D · DXVK · WineMetalGL
- Metal
How it runs Windows code.
Native ARM64 programs run as they are. x86 programs go through FEX, built into Wine as ARM64EC and WoW64 modules.
| Windows code | How it runs |
|---|---|
| ARM64 (aarch64) | Natively |
| x86_64 | FEX through ARM64EC (libarm64ecfex.dll). Wine's own DLLs are native ARM64X hybrids |
| i386 (32-bit) | FEX through WoW64 (libwow64fex.dll), in the signed app, which has the cross-architecture entitlement: the low 4 GB and 4K pages |
- No RosettaNone of it is x86 code run through Rosetta.
- No hardware TSOFEX emulates the x86 memory model with ordinary ARM64 instructions.
- macOS 15+For x86_64 and ARM64 programs. 32-bit (i386) programs need macOS 26.4 or later.
The Arm64 FEX build.
MetalSharp Wine 4.0 is the runtime of MetalSharp 1.0.0's Arm64 FEX build (MetalSharp-1.0.0-arm64-FEX.dmg, macOS 26.4+, early access). The x86_64 build keeps Wine 11.17 under Rosetta.
- Shipped signed. The DMG carries the signed and notarized
MetalSharp-Wine.appunchanged. Setup copies it read-only to~/.metalsharp/runtimeand installs offline from it. - Routes without staged DLLs. Each game's route goes into
<game>/.metalsharp/launch.env, and MetalSharp Wine applies it however the game starts: from Steam (so cloud saves sync), from a launcher, or directly. Its loader picks the lane's D3D and DXGI DLLs from inside the app, so nothing is copied into game folders. - Four lanes. Mullion (the default), VKD3D-Proton, DXVK, and OpenGL on WineMetalGL, chosen per game by
configs/mtsp-rules-fex.toml. - Moving between builds. Moving an x86_64 install to the FEX build converts every Wine prefix (Steam, GOG, Ubisoft, bottles) and keeps an x86_64 backup. Moving back restores it.
Graphics and runtime.
Direct3D 9 through 12 and OpenGL 4.6, all on Metal, plus the media, .NET, and launcher pieces games expect.
| Area | Details |
|---|---|
| Direct3D 10 / 11 / 12 | Mullion (a DXMT fork) on Metal, the default. ARM64X, so native ARM64 and x86_64 programs share one build, plus an i386 build for D3D10/11. GRAPHICS_BACKEND=wine selects wined3d |
| Direct3D 9 / 10 / 11 (opt-in) | DXVK-macOS 1.10.x on MoltenVK, built as ARM64X and run by x86_64 programs as ARM64EC under FEX: GRAPHICS_BACKEND=dxvk |
| Direct3D 12 (opt-in) | VKD3D-Proton macOS, ARM64X, with DXVK 2.7.1's DXGI and D3D10/11 for swap chains and D3D11On12, on MetalSharp's MoltenVK: GRAPHICS_BACKEND=vkd3d. Apple's Metal Shader Converter compiles most shaders straight to Metal libraries |
| OpenGL | WineMetalGL 3.7.0 (OpenGL 4.6 on Metal), the default. OPENGL_BACKEND=wine selects Wine's own |
| Vulkan | MoltenVK 1.4.3, MetalSharp's build from VKD3D-Proton macOS, with cached pipelines and Metal libraries |
| Shader compilers | Microsoft's DXC 1.9 and the ARM64 d3dcompiler_47.dll in every prefix, for programs that compile HLSL at run time |
| Media | FFmpeg 8.0 (VideoToolbox, AudioToolbox) and GStreamer 1.26 |
| .NET / HTML | Wine Mono 11.3.0 and Wine Gecko 2.47.4 |
| Sync | msync, on by default (WINEMSYNC=0 turns it off) |
| Controllers | winebus with SDL2 and IOHID, for XInput and DirectInput |
| Compatibility | WineForge's launcher fixes (Steam, Epic, EA, Ubisoft, Battle.net, Rockstar), PE patches, and the native Steam bridge. Rockstar's launcher runs on Mullion with WFDXCompat's launcher companion |
| Fullscreen and mouse | Native macOS fullscreen and GCMouse raw input, with high-polling-rate mice handled without a wineserver round trip per report |
| Fonts | Metric-compatible Arial, Times New Roman, and Courier New in every prefix; CJK families mapped to the macOS system fonts |
Use it from Terminal.
MetalSharp sets all of this up for you. To run MetalSharp Wine on its own, download the MetalSharp-Wine-<version>-arm64.zip from the 4.0 release, move MetalSharp-Wine.app into /Applications, and use it from Terminal:
1. Point a shell variable at the app's Wine
export WINE=/Applications/MetalSharp-Wine.app/Contents/MacOS/wine2. Create a prefix
WINEPREFIX=~/Games/my-prefix $WINE wineboot -iThe first run takes a minute. The prefix comes with Wine Mono, Gecko, and the core fonts set up, and x86 programs run through FEX automatically.
3. Run an installer or a game
WINEPREFIX=~/Games/my-prefix $WINE ~/Downloads/setup.exeUseful switches
Set these before $WINE, like WINEPREFIX:
GRAPHICS_BACKEND=dxvkorvkd3d: DXVK-macOS or VKD3D-Proton for x86_64 games instead of Mullion. Run VKD3D-Proton withWINEDEBUG=-all.OPENGL_BACKEND=wine: Wine's own OpenGL instead of WineMetalGL.FEX_TSOENABLED=0: turns off x86 memory-ordering emulation, which is faster for programs that don't need it.FEX_X87REDUCEDPRECISION=0: full 80-bit x87 precision for a 32-bit program that needs it.
Close to native.
Measured on an Apple M4 with macOS 27.2 (2026-10-22). Ratios are emulated time over native ARM64 time; lower is better.
- 495 msCold start of an x86_64 program, wineserver included (native ARM64: 482 ms).
- 31 msWarm start of an x86_64 program with the server running.
- 1.67×CPython 3.14 workload as x86_64 under FEX. i386: 2.42×.
- 0 violationsIn the memory-ordering test, with no hardware TSO.
Every benchmark checksum matches native ARM64. The full tables are in PERFORMANCE.md.
Source and docs.
- Release 4.0: the signed
MetalSharp-Wine.appzip, and a relocatable.tar.xz(x86_64 and ARM64 only). - Status: what works, and every Wine and FEX patch.
- Performance and testing.
- Building: Wine 11.20 with WineForge and MetalSharp's patches, a FEX-2610 fork, and the add-ons, from
scripts/build-all.sh. - Provenance and licenses. MetalSharp Wine's own material is AGPL-3.0; Wine is LGPL-2.1-or-later, FEX is MIT, and every bundled component keeps its own license.