Skip to content

Repository files navigation

Goldberg Emulator for macOS (goldberg-mac)

build

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 LICENSE and CREDITS.md when redistributing builds.

Why the old Mac builds stopped working

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.

Build

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 universal

The script fetches pinned dependency sources, builds them static, builds and signs the dylib, then prints architecture/deps/export verification. Artifacts land in dist/.

Install into a game you own

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.app

Notes:

  • 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.txt next to the game binary — generate its contents with tools/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.

Configuration

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.json

LAN multiplayer with other Goldberg players on the same network works out of the box.

Verify your build

tests/mac/run.sh

Compiles 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.

Troubleshooting

  • "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.txt sits next to the game binary and contains the right numeric App ID.

Repository layout

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.

Credits & license

  • 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.

About

Goldberg Steam emulator for macOS (Apple Silicon) — play games you own without the Steam client. Modern gbe_fork base, SDK 1.60+ era, arm64 dylib + installer.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages