MetalSharp / MetalSharp Wine

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.

Version 4.0Wine 11.20FEX-2610macOS 15+ · i386 26.4+AGPL-3.0
  1. x86_64 / i386 .exe
  2. FEX (ARM64EC · WoW64)
  3. Wine 11.20 arm64
  4. Mullion · VKD3D · DXVK · WineMetalGL
  5. Metal
What it is

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 codeHow it runs
ARM64 (aarch64)Natively
x86_64FEX 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.
In MetalSharp 1.0.0

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.app unchanged. Setup copies it read-only to ~/.metalsharp/runtime and 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.
What's included

Graphics and runtime.

Direct3D 9 through 12 and OpenGL 4.6, all on Metal, plus the media, .NET, and launcher pieces games expect.

AreaDetails
Direct3D 10 / 11 / 12Mullion (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
OpenGLWineMetalGL 3.7.0 (OpenGL 4.6 on Metal), the default. OPENGL_BACKEND=wine selects Wine's own
VulkanMoltenVK 1.4.3, MetalSharp's build from VKD3D-Proton macOS, with cached pipelines and Metal libraries
Shader compilersMicrosoft's DXC 1.9 and the ARM64 d3dcompiler_47.dll in every prefix, for programs that compile HLSL at run time
MediaFFmpeg 8.0 (VideoToolbox, AudioToolbox) and GStreamer 1.26
.NET / HTMLWine Mono 11.3.0 and Wine Gecko 2.47.4
Syncmsync, on by default (WINEMSYNC=0 turns it off)
Controllerswinebus with SDL2 and IOHID, for XInput and DirectInput
CompatibilityWineForge'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 mouseNative macOS fullscreen and GCMouse raw input, with high-polling-rate mice handled without a wineserver round trip per report
FontsMetric-compatible Arial, Times New Roman, and Courier New in every prefix; CJK families mapped to the macOS system fonts
On its own

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/wine

2. Create a prefix

WINEPREFIX=~/Games/my-prefix $WINE wineboot -i

The 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.exe

Useful switches

Set these before $WINE, like WINEPREFIX:

  • GRAPHICS_BACKEND=dxvk or vkd3d: DXVK-macOS or VKD3D-Proton for x86_64 games instead of Mullion. Run VKD3D-Proton with WINEDEBUG=-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.
Measured

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.

Go deeper

Source and docs.

  • Release 4.0: the signed MetalSharp-Wine.app zip, 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.