Repository navigation
Releases
FX Steam Launcher 1.9.8-eac.1
Ad-hoc signed DMG built by GitHub Actions from the tagged sources. It is not notarized: right-click > Open on first start.
VR in the release build
This is the first release DMG with VR. The game's OpenVR calls go to a small runtime in the guest; the eye images go to steamac-vrhost on the Mac, which composites them natively, encodes them with VideoToolbox and streams them to the headset over WiVRn (Quest, Pico and other standalone headsets with the WiVRn client) or Virtual Desktop. There is no SteamVR in the guest: no SteamVR compositor running under x86 emulation, no extra copy of every frame inside the VM. That makes it a lighter route than running SteamVR in the guest.
- Enable VR in the launcher's VR panel, pick the game and, if you use it, tick Use Virtual Desktop (Virtual Desktop Streamer must be installed on the Mac). See
docs/vr.md. - Frame pacing for GPU-bound games: the guest renders on the host's pacer grid, frames in flight are bounded, spacewarp no longer makes the game render every display period. Scope: VR.
- Guest memory trim for games and a swap fallback, so long VR sessions on 16 GB Macs keep headroom. Scope: general.
Other changes since 1.9.4-eac.1
- Upstream fxgl/steamac 1.9.8: SteamOS 0.6.0 support, the cursor on the DXMT path, Desktop Mode keyboard layouts from the Mac, wmtr object tracking and the free-ring overflow (no more freeze on quit/logout), KosmicKrisp 0064-0078 (0077 replaces this fork's barrier fix), the DXMT command-list fix and VM memory diagnostics. Scope: general.
- Microphone capture works again on the CoreAudio path (thanks to SpecialOperations, #3). Scope: general.
- Right-drag mouse look in Desktop Mode games (thanks to wkbevill-svg, #2). Scope: general.
- Release builds now build the VR guest payload (OpenVR runtime and Proton's vrclient) and
steamac-vrhost, and run the VR self-test. Scope: build only.
Verified on this release's build (M2, macOS 27), synthetic headsets on the same Mac:
- WiVRn (Quest 3 profile, controllers): VRChat started from the headset's app list, joined its home world in VR; both eyes correct, hands tracked, view follows head motion.
- Virtual Desktop (synthetic VD client): VRChat launched in VR and joined a world; decoded frames matched the headset pose they were rendered for (world-locked; 5 exceptions at loading-screen transitions).
The DMG is the build that passed these checks (built from fex-eac b36cb07, the same tree as this tag).
Known limits
- VR performance depends heavily on the hardware (Mac model, GPU cores, memory).
- THE FINALS menu clicks can lag in the first minutes (still being investigated); not re-checked on this build.
- The Mullion (Direct3D 12) path is not included.
Help it along
Stars, issue reports (with your Mac model and the log) and pull requests from forks are all welcome; contributions get credited and shipped in the next release.
FX Steam Launcher 1.9.4-eac.1
FX Steam Launcher 1.9.4-eac.1
Ad-hoc signed DMG built by GitHub Actions from the tagged sources. It is not notarized: right-click > Open on first start.
Changes since 1.9-eac.2
-
Needed for Easy Anti-Cheat games on the current Proton Experimental: the FEX tool is pinned to StonkGuy/FEX
eac-2610.5. Steam updated Proton Experimental to 11.0-20261027b on 2026-10-30. On that version, EAC games (VRChat) exit within seconds with older FEX builds. Rebuild the FEX tool withfex-eac/build-fex.sh(seefex-eac/README.md). Scope: general. -
FEX fixes found on THE FINALS and Hell Let Loose (from
eac-2610.4):- exceptions that anti-tamper code probes are now raised like a CPU raises them (IRETQ with NT set, MOV to FS/GS, instructions over 15 bytes, XSETBV);
- fetch-fault addresses are correct;
- no more freeze in THE FINALS matches (guest code is read fault-safely while compiling);
- self-modifying-code restarts are fixed (Hell Let Loose EAC 210).
Scope: general.
-
Upstream fxgl/steamac 1.9.4: per-game profiles (graphics path, Vulkan driver and launch words per game), "Allow DXMT", Dragon's Dogma 2 on KosmicKrisp, parallel and disk-cached KosmicKrisp shader compiles. Scope: general.
-
KosmicKrisp 0064: after several game launches in one VM session, the VM's GPU could hang. The cause was Mesa's macOS barrier, destroyed while its waiters still held it. Fixed in code (Mesa's own test: 100/100 runs); the live relaunch check is still pending. Scope: general.
-
Steam's idle screensaver is off by default. After a few minutes in which Steam saw no input, for example a long loading screen or a VR session, it took focus from the game. A screensaver chosen later in Steam's settings stays. Scope: general.
-
Release builds: fixed a duplicate libkrun patch, a Swift type-check timeout, DXMT licence files in the DMG and a timing-sensitive wmtr test. Scope: build only.
Verified on this release's build (M2, macOS 27): VRChat on Proton Experimental 11.0-20261027b with the eac-2610.5 FEX tool reached EAC session begin, joined a world and stayed stable.
Known limits
- VR is not in this release. It is on the
vr-integrationbranch; CI builds do not include the VR guest pieces yet. - THE FINALS boots and plays on the DXMT path, but menu clicks can lag in the first minutes (still being investigated). It was not re-checked on this exact build.
- The Mullion (Direct3D 12) path is not included. It is still experimental on its own branch.
FX Steam Launcher 1.9-eac.2
FX Steam Launcher 1.9-eac.2
Ad-hoc signed DMG built by GitHub Actions from the tagged sources. It is not notarized: right-click > Open on first start.
Changes since 1.9-eac.1
- Memory: after a peak, the VM gives memory back to the Mac (libkrun free page reporting, guest
mem_trim), and idle DXMT graphics buffers are returned (wmtr arena trim). Scope: general. - Steam's own window is drawn in software by default. This saves about 600 MiB of Mac graphics memory while idle.
steamac.steam_ui_gpu=1restores GPU drawing. Scope: general mechanism, measured on VRChat only. - DXMT path: autorelease pool and command encoder creation no longer wait for the Mac side. That means fewer round trips a frame (39 -> 18 in a draw-heavy test). Scope: general mechanism, measured on a synthetic benchmark only.
WMTR_CLIENT_HANDLES=0turns it off. - DXMT path hardening: the Mac-side executor now checks the bounds of every size and offset in a guest request, checks each call's parameter block and bounds no-copy buffers. It also refuses a command ring smaller than its layout. Scope: general.
- Settings:
--memand--cpusvalues are checked before the VM starts. Scope: general. - Install and verify fixes: library check and FEX tool install. Scope: general.
- Languages: the Russian and Simplified Chinese texts were reviewed, builds without Xcode now include the translations, and there is a new
--selftest-l10n. Scope: general. - Builds: there is a pinned DXMT build script, and release DMGs are built by GitHub Actions. On machines without Hypervisor.framework, the libkrun VM tests are built but not run. Scope: build only.
Known limits
- VR is not in this release (it is still being tested on the
vr-polishbranch). - THE FINALS still stops inside its anti-cheat checks.
steamac 1.9 + EAC, DXMT (v1.9-eac.1)
First release of this fork's main: steamac 1.9 with genuine Easy Anti-Cheat (patched FEX, StonkGuy/FEX tag eac-2610.2) and a choice of two graphics paths, Vulkan (default) and DXMT.
Download
FX-Steam-Launcher-1.9-eac.1-adhoc.dmg (SHA-256 8363bdd6807e4c738aef01a4450d0cdf3b1744c522722c57a10407427e8ed579, also in the .sha256 file).
- Ad-hoc signed, not notarized. On first launch macOS blocks it: open System Settings > Privacy & Security and click Open Anyway for FX Steam Launcher.
- Built by this repository's Release DMG workflow (GitHub Actions, run 38878280653) from this tag's sources (88e7a81). The tag predates the workflow, so the workflow was run from a later commit with the tag as input; it adds only build and packaging scripts (see docs/release-build.md), no product changes.
FX-Steam-Launcher-1.9-eac.1-gpl-sources.tar: corresponding source of the GPL/LGPL components.- Checked on a Mac before upload: signature and entitlements, guest build receipts against the tag, launcher self-tests, GPU tests on the bundled libraries (MoltenVK all pass; KosmicKrisp passes all but two sparse depth-image cases, which fail the same way on the earlier, game-verified build), one boot to the Steam client.
To build it yourself instead: ./build.sh (see the README and SETUP.md).
Changes since the previous main (20acda6)
- DXMT updated: upstream 3Shain/dxmt e94c312 plus StonkGuy/dxmt
steamacd5576ef (fixes adopted from other DXMT forks, credited in its STEAMAC-README.md). Patches inhost/dxmt/patches/are generated from the fork. - wmtr: error objects crossing the guest/host boundary are retained; D3D12 root signatures are carried to the shader compiler.
- Graphics path switching (
steam-gfx-path): Direct3D 12 goes to DXMT when the payload has it; ARM64 Protons are left alone; Proton's original DXVK files are deleted only once they are back in place. Before this, switching between two app builds on one disk could leave DXMT's d3d11/dxgi in Proton and break Direct3D 11 games on the Vulkan path. - Frame latency (Settings > Advanced, Vulkan path, off by default): sets DXVK's
dxgi.maxFrameLatency = 1for lower input latency. - Docs: both paths verified with VRChat (EAC
301, session, world), measurements, Proton repair, limits.
Verified
One Mac (M2, 16 GB, macOS 27.0). VRChat passes EAC and enters a world on DXMT and on Vulkan. Measured in VRChat (single runs): about 29-44 fps on Vulkan, 76-78 fps on DXMT. Synthetic d3d11bench: DXMT 111 vs Vulkan 57-59 fps (2000 draws), 28-30 vs 19.6 fps (fill-bound). Tests: steam-gfx-path, steam-frame-latency, dxmt-source-pin, build-fex-pin, launch-options, udev-rules, audio-layout, mac-clock-format, wmtr make test, launcher self-tests (graphics path, Metal cache, game layers, Remote Play).
Updating
git pullonmain(or check out this tag) and rebuild:./build.sh(host and guest layer).- If Direct3D 11 games fail on the Vulkan path after you used DXMT, repair Proton in Steam: the Proton tool > Properties > Installed Files > Verify integrity of tool files. The guest's boot log names the Proton with a
WARNING: no original ... keptline. - The patched FEX is unchanged (
eac-2610.2); no reinstall needed.
Known limits
- One Mac verified. Other games are untested; EAC results differ game by game.
- 16 GB Macs: heavy titles can exceed the memory available (Unigine Superposition did on both paths).
- DXMT's Direct3D 12 is limited (feature level 11_1, DXBC only); use Vulkan for Direct3D 12 games.
- VR is not in this release (experimental,
vr-livebranch). - The patched FEX and VRChat's launch options are still installed by hand (fex-eac/README.md).