A modern, maintained build of the Goldberg Steam emulator
for Apple Silicon Macs, based on the actively developed gbe_fork
(upstream pinned in UPSTREAM.md). It produces a self-contained, statically-linked
libsteam_api.dylib that replaces a game's own Steam library so the game runs without the Steam
client installed or running — no account, no network, nothing phones home.
dist/libsteam_api.dylib arm64, ~9 MB, only system frameworks (no Homebrew deps)
dist/generate_interfaces helper tool for very old games
Heads-up: this is a compatibility layer for games you own (offline/LAN play, Steam-free setups, Steamworks dev testing). It is not a crack and doesn't defeat any DRM beyond impersonating the local Steamworks API library. Project is LGPL-3.0 — keep
LICENSEandCREDITS.mdwhen redistributing builds.
The previously recommended inflation/goldberg_emulator fork was archived in January 2026, frozen at
May-2023 code (Steamworks SDK 1.57). Games built with SDK 1.58+ call entry points the old builds never
exported (SteamInternal_SteamAPI_Init, SteamAPI_InitFlat, SteamAPI_InitEx,
SteamInternal_GameServer_Init_V2, ISteamTimeline...), so they crash or refuse to start. This
project ports the current gbe_fork codebase (SDK 1.60+ era) to macOS instead.
Requirements: Xcode Command Line Tools, Homebrew, ~15 minutes for the first build (dependencies are compiled from the exact tarballs gbe_fork itself uses, then cached).
brew install cmake ninja
./build_mac/build.sh # arm64 (default); ARCHS="arm64;x86_64" for universalThe script fetches pinned dependency sources, builds them static, builds and signs the dylib, then
prints architecture/deps/export verification. Artifacts land in dist/.
tools/mac/install.sh /path/to/Game.app [appid]This backs up the game's original libsteam_api.dylib (as *.goldberg-backup), drops ours in its
place, writes steam_appid.txt, re-signs the app bundle (ad-hoc) and clears quarantine. Then just
launch the game — Steam does not need to be running.
Undo at any time:
tools/mac/uninstall.sh /path/to/Game.appNotes:
- App ID: find it on the game's Steam store page (
store.steampowered.com/app/<id>/...). - Very old games (pre-2016 Steamworks) may also need a
steam_interfaces.txtnext to the game binary — generate its contents withtools/mac/find_interfaces.sh /path/to/Game.app. - Controller support is disabled in this build (upstream's gamepad layer is Windows/Linux-only); keyboard/mouse work normally. Voice chat (opus) and HTTP are included.
- Saves, stats and achievements are stored locally under
~/.local/share/GSE Saves/(upstream's POSIX behavior) — they survive reinstalls and don't touch the game's own files.
Goldberg is configured the standard gbe_fork way — a steam_settings/ folder next to the game
binary (persona name, language, DLC list, achievements, leaderboards, fake players, ...). See the
upstream wiki for the full option set. Two quick ones:
# your player name
mkdir -p Game.app/Contents/MacOS/steam_settings
echo '{"user":{"account_name":"MyName","steam_id":"7656119XXXXXXXXXX"}}' \
> Game.app/Contents/MacOS/steam_settings/main_config.jsonLAN multiplayer with other Goldberg players on the same network works out of the box.
tests/mac/run.shCompiles a small test app against the dylib and runs it twice: init (without Steam), app ownership,
persona, achievement unlock, then a second run proving the achievement persisted. Expected output:
ALL CHECKS PASSED twice.
- "libsteam_api.dylib" cannot be opened / damaged — Gatekeeper quarantine; re-run
tools/mac/install.sh(it clears quarantine and re-signs), or:xattr -dr com.apple.quarantine /path/to/Game.app. - Game crashes at launch right after install — the game may use hardened runtime with Library
Validation; re-sign the whole app:
codesign --force --deep --sign - /path/to/Game.app(install.sh already does this, but some launchers re-verify). - Intel-only game — this build is arm64-only (per your build choice). Rebuild universal:
ARCHS="arm64;x86_64" ./build_mac/build.sh, then reinstall into the game. - Nothing happens / game says Steam required — make sure
steam_appid.txtsits next to the game binary and contains the right numeric App ID.
goldberg_emulator/ vendored gbe_fork @ pinned commit + the macOS patch series (5 files, ~76 lines)
patches/ 0001-macos-port.patch — the full source diff against upstream
build_mac/ CMake superbuild (deps/) + dylib build + build.sh
tools/mac/ install.sh / uninstall.sh / find_interfaces.sh
tests/mac/ harness.cpp + run.sh
package.sh builds the distributable zip (with licenses)
dist/ build output
UPSTREAM.md provenance: pinned commits, dependency versions, patch inventory
To move to a newer upstream: update the clone in goldberg_emulator/, re-apply
patches/0001-macos-port.patch (git apply --3way), bump the pins in UPSTREAM.md, rebuild.
- Mr Goldberg — the original emulator.
- Detanup01/gbe_fork and its contributors — the actively maintained fork this project tracks (Steamworks SDK 1.58–1.60+ support that makes modern games work).
- bitmap4/goldberg-mac-shim — reference for macOS installer signing/quarantine handling.
- All statically-linked dependencies (protobuf, abseil, curl, mbedTLS, opus, portaudio, libssq,
zlib) — licenses aggregated in
goldberg_emulator/CREDITS.md, shipped in every release zip.
This project is licensed under LGPL-3.0-or-later (see LICENSE), inheriting from the emulator it builds on. The in-game overlay from upstream is not part of macOS builds.