fxgl / steamac
git clone https://github.com/fxgl/steamac.git
v1.9.1 · 9d ago
Valve's official ARM64 SteamOS in a lightweight VM on Apple Silicon: libkrun + Venus + MoltenVK, controllers, CoreAudio sound
+4
stars, 24h · #3,263
+~28
stars, 7 days · #4,017
+663
stars, 30 days · #811
668
★ total · +4% this week
31
forks · 21 open issues
Star history (as recorded here)
LanguageSwift
LicenseApache-2.0
Created2026-10-04 (18d ago)
Last push9d ago
Watchers4
OwnerUser
GitHub topics
Links
- GitHub: github.com/fxgl/steamac
- Homepage: https://fxgl.github.io/steamac/
- Releases · Issues · Hacker News mentions
README excerpt
# steamac — Valve's official ARM64 SteamOS (the Steam Frame image) in a VM on Apple Silicon **English** · Русский · 简体中文 On macOS 15 (Sequoia), Valve's actual SteamOS for Steam Frame runs in a lightweight VM on Hypervisor.framework (libkrun) with GPU acceleration via Venus. [code] Vulkan on Metal — MoltenVK from the UTM fork (geometry shaders, robustness2) + `VK_EXT_depth_clip_enable` (PR #2712) + our fixes, by default. KosmicKrisp (Mesa's Vulkan driver on Metal 4) is an experimental alternative on macOS 26+ (see “Vulkan driver”). ## Requirements - Apple Silicon Mac, macOS 15+, ~150 GB of free space (the disk image is sparse). - Xcode 26+ (full installation: its `actool` builds the app icon from an Icon Composer document), Homebrew, rustup. - KosmicKrisp (optional, alternative Vulkan driver): built only on macOS 26+; `host/kosmickrisp/build.sh` installs its Homebrew dependencies (`llvm spirv-llvm-translator spirv-tools vulkan-loader glslang`). - OrbStack (or Docker with arm64 and `--privileged`): the kernel, Mesa, and disk image are built in Linux containers. - Homebrew packages: `meson ninja pkg-config dtc xz lld sshpass go` (`go`: license inventory of the bundled gvproxy/desync). - libepoxy 1.5.10 is built from pinned sources by `host/libepoxy/build.sh`, before virglrenderer and libkrun; all three use `MACOSX_DEPLOYMENT_TARGET=15.0`, including on macOS 26/27 build hosts. Bundling rejects Mach-O deployment targets above macOS 15.0 (KosmicKrisp alone may require 26.0). ## Building and running [code] Build parts separately: `./build.sh host`, `./build.sh guest`, or the scripts in the table below. The SteamOS image is downloaded from Valve's servers (a signed RAUC bundle); its signature and sha256 are verified. Guest release artifacts have adjacent `.inputs.json` build receipts binding their selected Git working-tree inputs to their output bytes. Relevant dirty edits invalidate them; unrelated commits do not. `host/launcher/bundle.sh` refuses missing/stale receipts before modifying the app; `dist.sh` also validates the receipts and resources inside an existing app before packaging it. The error names the step to rerun. To refresh guest artifacts without touching an existing SteamOS disk: `guest/kernel/build.sh` (only when its inputs changed or its receipt is missing), `scripts/build-image.sh builder rootfs`, `guest/mesa/build.sh`, then `scripts/build-image.sh initramfs layer`; finally `host/launcher/build.sh`. An unstamped artifact needs its normal build once; kernel builds reuse the build volume without `clean`. `ALLOW_NO_VENUS=1` layers are test-only and cannot be released. VM options: `./run.sh --display 1920x1080 --cpus 10 --mem 24576` (full list: `work/out/steamac-vm --help`). Frame pacing: `./run.sh --perf-stats` (or `STEAMAC_PERF_STATS=1`) prints guest-frame and on-screen frame intervals to the terminal every 5 s (p50/p95/p99/max, number of intervals > 25 and > 50 ms). Stutters when a new effect first appears come from Metal shader co