GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - BCD1210/soju: Play Windows games on Apple Silicon Macs. Free, open-source app that installs the official Battle.net, Steam, Epic and GOG launchers and lists your games in one library.

BranchesTags
Open more actions menu

Latest commit

 

History

215 Commits
215 Commits

Folders and files

NameName
Last commit message
Last commit date
.claude
.claude
 
 
.github
.github
 
 
app
app
 
 
docs
docs
 
 
marketing
marketing
 
 
patches
patches
 
 
research
research
 
 
resources
resources
 
 
scripts
scripts
 
 
site-worker
site-worker
 
 
site
site
 
 
tests
tests
 
 
third_party
third_party
 
 
tools
tools
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
LICENSE
LICENSE
 
 
NOTICE
NOTICE
 
 
README.ko.md
README.ko.md
 
 
README.md
README.md
 
 
README.zh.md
README.zh.md
 
 
SECURITY.md
SECURITY.md
 
 
VERSION
VERSION
 
 
install.sh
install.sh
 
 

Repository files navigation

Soju logo

Soju

Play Windows games on Apple Silicon Macs. Free and open source.

Discord: join the Soju server

Soju installs the official Windows launchers for Battle.net, Steam, Epic Games, GOG GALAXY, EA app, Rockstar Games Launcher and Ubisoft Connect on M1-or-newer Macs, keeps each one in its own Wine setup, and lists your games in one Mac library. It began as a way to run Battle.net and Diablo II: Resurrected without CrossOver.

Soju unified game library

Download Soju 1.14.16 for Mac, or install from the terminal:

brew install BCD1210/soju/soju
soju install

The app runs on macOS 14 or later. Diablo II: Resurrected needs macOS 26.4 or later, and Steam games need macOS 26 or later.

What you get · What runs · Install details · 30-second gameplay demo · Guides · Discord · 한국어 · 简体中文

Compatibility varies by game, and games with kernel anti-cheat will not run. Games and store clients are not included. Soju downloads Apple's Game Porting Toolkit files during setup.

What you get

One library for every store. Games from Battle.net, Steam, Epic, GOG, EA, Rockstar, Ubisoft and Xbox PC sit in one window with their cover art. Press Play and Soju opens the right launcher.

The official launchers, with your own accounts. Soju installs each store's Windows client from the store's own installer. You sign in on the store's page, and purchases, downloads and updates stay with the store.

Setup that checks itself. The installer asks which stores you want and downloads only what those need. Every download is verified (SHA-256, and Apple's signature on the Game Porting Toolkit). When something is wrong, soju doctor says what.

Settings where the game is. A game's sheet shows when you last played it, the FPS display and, for Steam games, the graphics choice. Games known to run better on DXVK are switched for you, and the sheet says why.

Sound that works in Steam games. Voice lines stored as WMA play, and 5.1 or 7.1 sound is mixed down for a Mac's stereo speakers. Both were reported and confirmed by a player in Skyrim Special Edition. The H.264 decoder for cutscenes is installed too.

Play on a TV or iPad. Turn on streaming, install the free Moonlight app on the other screen, and the game runs on your Mac.

Free, and it stays on your Mac. Soju is open source and needs no account with us. Your library, logins and logs are stored locally. The app updates itself from signed, notarized releases.

What runs

Tested by us on an M4 Pro with macOS 26.5, unless a row says it is a player's report.

Game Store Status Notes
Diablo II: Resurrected Battle.net ✅ in-game, online needs macOS 26.4 or later; guide
Diablo IV Battle.net ✅ in-game (free trial) character created and in the first area; sound and frame rate not checked; 97 GB without High-Resolution Assets; guide
Hogwarts Legacy Epic ✅ in-game the "AMD driver" warning at start is harmless
StarCraft: Remastered Battle.net ✅ in-game a match against the computer; multiplayer not tried; guide
Overwatch 2 Steam ✅ main menu, online turn on Platforms > Steam > Overwatch and Diablo II mode (soju steam-gptk on); the game asks once to connect a Battle.net account; guide
The Elder Scrolls V: Skyrim Special Edition Steam ✅ in-game (player's report) M5 Pro, macOS 27.2, Soju 1.14.8; dialogue and surround sound confirmed (#95)
Guilt Free (a Unity Direct3D 11 game) Steam ✅ in-game, windowed see docs/STEAM-GAMES.md
The Witcher 3 (Remastered) Steam 🟡 reaches its menu (player's report) needs Apple GPTK 4.0 beta 3, which Soju accepts since 1.14.10 (#112)
Diablo II: Resurrected (Steam edition) Steam ⏳ not verified should run in Overwatch and Diablo II mode; we don't own the Steam edition
Diablo II: Resurrected in VR (offline) Battle.net 🧪 simulator only soju vr setup, then soju vr play; docs/VR.md

Will not run: anything with kernel anti-cheat (EAC, BattlEye, Vanguard).

Launcher Sign in Install games Notes
Battle.net ✅ ✅
Steam (Windows client) ✅ ✅ has its own Wine 11 setup
Epic Games Launcher ✅ ✅ closing the window keeps it in the menu bar
GOG GALAXY ✅ ✅ games not broadly tested yet
Xbox PC / Microsoft Store ✅ ✅ experimental; Retro Classics reaches its menu
EA app, Rockstar Games Launcher, Ubisoft Connect sign-in window opens not tested yet

More games: status game by game and players' reports. Got another game running, or stuck on one? Use Report How It Ran in the game's sheet, post in Discussions, or ask on Discord.

Install (one line)

curl -fsSL https://didimlabs.com/install.sh | bash

Or via Homebrew:

brew install BCD1210/soju/soju
soju install     # then: soju battlenet / soju d2r / soju steam / soju epic / soju gog / soju ea / soju rockstar / soju ubisoft

The installer asks which launchers you want before downloading anything. Steam-only installs skip the CX engine and Apple GPTK. Steam rendering components are downloaded with SHA-256 verification and installed in a Soju-owned Wine 11.0 runtime. Battle.net, Epic and GOG use the shared CX engine and your separately downloaded Apple GPTK. Each official client keeps its own bottle and shortcut in ~/Applications.

Download Soju for Mac: the native desktop preview includes installed and owned games, store search, favorites, game launching and platform management. See desktop setup and requirements.

Everyday commands

soju doctor      # checks the whole stack and prints what is wrong (paste this into bug reports)
soju update      # updates the scripts and the prebuilt engine, keeping GPTK and every bottle
soju uninstall   # removes apps, bottles and the engine, asking before each one
soju report "Elden Ring"   # opens a compatibility report with your Mac, macOS and engine filled in
soju fps on      # frame rate and frame time in the corner of games (Apple's Metal HUD); soju fps off hides it
  • ⌘C / ⌘V / ⌘A work inside Windows programs (sign-in forms, chat): Command is sent as Ctrl and Option as Alt. To get Wine's default back for one bottle, set LeftCommandIsCtrl to n under HKCU\Software\Wine\Mac Driver in it, or start with SOJU_COMMAND_IS_CTRL=0.
  • Updates install themselves: when a new release is out, the app's sidebar card has Update and Restart. It downloads the release, accepts it only if it is signed with Didim Labs' Developer ID, notarized by Apple and carries the expected version, then swaps the app and reopens it.
  • Show FPS in games: a checkbox under Platforms, or soju fps on. Games started after that show Apple's Metal HUD: frame rate, frame time, GPU and Rosetta. Handy for compatibility reports.
  • Known settings per game: Steam games known to run better on DXVK than on the default DXMT (Skyrim Special Edition, Dark Souls III and others in resources/steam-profiles.json) are switched to DXVK once, when Steam starts. Your own choice wins: soju steam-games renderer reset <game.exe> undoes it and it is not applied again.
  • Battle.net games on an external drive: open an installed game in the library and press Move to Another Drive… (or soju storage move battlenet:fenris "/Volumes/T7"). Soju copies the game there, compares the copy with the original, then frees the space on the Mac; Move Back to This Mac reverses it. To install a new game straight onto the drive, run soju storage place battlenet "Diablo IV" "/Volumes/T7" first and keep the default location in Battle.net. A game you already have from another Wine app or a backup is used where it is: Accounts → Use Existing Battle.net Game… (or soju storage import battlenet <folder>), then press Install or Locate in Battle.net. APFS, Mac OS Extended and exFAT drives work. Saves and the launcher stay on the Mac, and a game whose drive is unplugged stays in the library with a note to connect it.
  • Rosetta 2 is offered by the installer when it is missing (it asks for your administrator password; Apple's license applies).

More in the app

  • Owned games: sign in to Steam to import your owned library, or import the library cached by GOG GALAXY. Installed and uninstalled games share one library, with availability filters and official-client install actions. Epic and Battle.net account imports are not included yet. See account connections and store search: official Steam sign-in, no API key required, and account imports stay on your Mac.
  • Discover: searches Steam, GOG and Microsoft Store listings and prices, with links to buy from the stores.
  • Platforms: handles launcher setup, component updates and diagnostics. The CLI and individual shortcuts remain available.
  • Xbox PC (experimental): sign in to a Microsoft account to import owned and PC Game Pass games, download them through the Xodus backend and start them on Soju's engine. Retro Classics reaches its main menu on Soju; other games are untested. Purchases, downloads and updates stay with the official stores. Details below.
  • TV & iPad: turn on streaming in Soju, install the free Moonlight app on your TV, iPad or phone, type the PIN it shows, and play Soju games on that screen while they run on your Mac.
  • Didim Labs Store: we sell our own Mac games here. Press Buy, pay on Polar, and Soju downloads the game, checks its SHA-256 and signature, and installs it. No Wine. The key stays in the Keychain, so reinstalling doesn't ask again. If you already have the .zip, use Library → Add Didim Labs game or soju didim install <zip>.

Search Steam and GOG with Soju Discover

The main Wine engine is built from CodeWeavers' published sources; Steam uses a separate private Wine 11 setup.

Support Soju

Help keep Soju free and open source. Support Soju brings together ways to contribute, voluntary support updates and information about game purchase links.

Why this exists

Community Wine builds (Whisky, Kegworks-era engines) stopped working with modern Battle.net and D2R. The commercial option works, but the underlying Wine engine is GPL, so we built it ourselves and documented every wall we hit. The investigation and fixes are documented below:

The three keys

  1. ROSETTA_ADVERTISE_AVX=1: D2R's loader requires AVX instructions. Without this env var, the game freezes forever at ~86 MB RSS with 0% CPU, before any graphics init. This is why D2R "hangs at launch" on non-CrossOver Wine builds.

  2. D3DMetal payload layout: Apple's Game Porting Toolkit payload is three parts, and D3DMetal engages only with all three: lib/external/ (libd3dshared + D3DMetal.framework), Apple's PE shims d3d11.dll, d3d12.dll, dxgi.dll (plus atidxx64, nvapi64, nvngx) replacing Wine's own in lib/wine/x86_64-windows/, and one lib/wine/x86_64-unix/<shim>.so per shim as a symlink into lib/external/. Copying real files there breaks @loader_path resolution and D3DMetal dies in an assertion loop; leaving Wine's own d3d11.dll in place runs D3D on wined3d instead, and the Epic Games Launcher crashes at start on that. soju gptk installs all three parts.

  3. Battle.net Agent caller-signature fix: the Agent verifies the signature of the connecting client using a relative filename resolved against its CWD (a versioned subfolder). Seeding a copy of the signed Battle.net.exe into each Battle.net.NNNNN subfolder makes verification pass (fixes error BLZBNTBNA00000005).

Plus one trap: never put Apple platform binaries (nohup, arch, …) in the launch chain. macOS strips DYLD_* variables when exec'ing them.

Guides: D2R on Apple Silicon · StarCraft: Remastered · Windows Steam client · Whisky alternatives · Soju vs Whisky, CrossOver, Heroic

Build it yourself instead: no CrossOver required

Apple's Game Porting Toolkit files are downloaded in step 4. To use your own copy instead, download the toolkit dmg from Apple with a free Apple ID and mount it first.

# 1. Get the scripts
git clone https://github.com/BCD1210/soju.git && cd soju

# 2. Fetch runtime components (x86_64 dylibs + wine-mono, all from free GPL releases)
scripts/get-components.sh

# 3. Build the engine from GPL sources (30-60 min)
scripts/build-engine.sh

# 4. Install Apple GPTK payload (downloads Apple's files and checks Apple's signature)
scripts/fetch-gptk.py
#    (or mount Apple's "evaluation environment for Windows games" dmg and run
#    scripts/get-gptk.sh; with CrossOver installed it extracts from that instead)

# 5. Create a bottle + install Battle.net (official Blizzard installer, fully automatic)
scripts/create-bottle.sh

# 6. Play
scripts/play.sh battlenet   # launcher -> log in -> install & play your game (closing the window exits, as on Windows; if you set "minimize to tray" in its settings, a Dock-icon click brings it back)
scripts/play.sh d2r         # direct game launch (offline)
scripts/play.sh kill        # stop everything

Already have a CrossOver bottle with games installed? scripts/setup-bottle.sh clones it (28 GB game re-download avoided).

Epic Games Launcher

Same engine, own bottle, no extra tricks: Epic's CEF keeps its GPU process alive on this build, so the launcher runs with its stock command line. Verified 2026-08-29: unattended install from the official MSI (~30 s), launcher UI, login.

scripts/create-epic-bottle.sh    # official Epic MSI, unattended
scripts/play.sh epic             # log in -> install & play
scripts/play.sh epic-kill        # stop the Epic bottle (closing the window parks the launcher in the menu bar tray; click the Dock icon, or double-click / right-click the menu bar icon, to bring it back)

Verified 2026-08-30: 71 GB install of Hogwarts Legacy (UE4, D3D12 through D3DMetal) from the launcher, then in-game. Two things to know: a Korean/Japanese/Chinese input source no longer matters (engine-v1.5 builds the key tables from the ASCII layout the input method sits on, as Windows does, so you can switch to Korean and back mid-game); and if a game starts full screen, set windowed mode in its own display settings (Soju does not force it). One known wine 11.0 issue: after switching between several Wine windows (a launcher, a game, another bottle) a game can stop receiving keyboard input until it is restarted; upstream fixed this in wine 11.11.

EA app, Rockstar Games Launcher, Ubisoft Connect

soju ea-install        # or rockstar-install / ubisoft-install: separate bottle, official installer
soju ea                # or rockstar / ubisoft: log in, install and play
soju ea-kill           # or rockstar-kill / ubisoft-kill

Verified 2026-11-10: install and sign-in window for all three (not signed in to an account; games not tested yet). Their windows are Chromium browsers whose GPU process draws into a window another process owns. Wine's Mac driver cannot present that, so on the CX engine these launchers stay white or black. They run on a second engine instead, made on your Mac from the CX engine (an APFS clone, no extra space) plus the launcher-support component: the Mac driver with patches/winemac-cross-process-swapchains.patch (from Highball, Wine bug 60263) and DXMT for Direct3D 10/11, which can present across processes. Battle.net, Epic and GOG keep the CX engine unchanged. The EA app updates itself on its first start; if its window then stays empty, quit it and open it again.

GOG GALAXY

scripts/create-gog-bottle.sh      # separate bottle, official web installer (silent)
scripts/play.sh gog               # log in, install and play
scripts/play.sh gog-kill          # stop the GOG bottle (closing the window parks GOG in the menu bar tray; a Dock-icon click brings it back)

Verified 2026-08-30: install, login, library. GOG GALAXY 2.x is Qt6 + QtWebEngine, not CEF, and on this engine its window stays black because Qt's D3D11 compositing asks D3DMetal's DXGI for IDXGIResource, which it does not implement. The fix is to run Chromium on the CPU (--disable-gpu), but GOG overwrites QTWEBENGINE_CHROMIUM_FLAGS itself and ignores its own command line, and it checksums its executable, so nothing outside the engine can inject the switch. The engine therefore carries a small hook (patches/chromium-flags-append.patch): whenever a program sets QTWEBENGINE_CHROMIUM_FLAGS, the contents of SOJU_CHROMIUM_FLAGS are appended. play.sh gog sets it. The same patch set adds WINE_CUSTOM_FRAME, which stops the Mac driver from putting a macOS title bar on top of GOG's own. Details in docs/DIAGNOSIS.md.

Games have not been broadly tested yet; anything that needs kernel anti-cheat (EAC/BattlEye) will not run under Wine.

Xbox PC / Microsoft Store (Xodus backend, experimental)

Soju can sign in to a Microsoft account, import owned and PC Game Pass games, search the Microsoft Store, download games and start them. Starting games is experimental. On an M4 Pro / macOS 26.5, Retro Classics reaches its main menu; other titles are untested. Per-game Wine settings live in resources/xbox-compat.json. The launch follows the path MACxus uses on macOS, where Vampire Survivors, TUNIC, Deep Rock Galactic and others reach gameplay on a CrossOver 26 based engine like Soju's.

How a launch works: xodus-cli run gets the licence and decrypts the game into a temporary RAM-disk view; scripts/xbox-wine.sh starts it on the CX engine with D3DMetal in its own prefix (xbox-bottle). That prefix gets the Xbox game runtime DLLs (xgameruntime and friends, LGPL, from the Xodus Nexus runtime as MACxus rebuilt them for macOS; pinned in resources/xbox-runtime.json, about 600 MB downloaded once) and Microsoft's VC++ runtime. xodus-service runs during the session for sign-in, licences and cloud saves; the game reaches it through a keyed 127.0.0.1 bridge. Files the game writes are copied back into its folder when it exits. Playing needs the CX engine and Apple GPTK; setting up Xbox PC installs the engine, and GPTK is added in Platforms like for Battle.net, Epic and GOG.

The backend is Xodus (GPL-3.0). It has no macOS release, so soju xbox-install builds it on your Mac: it clones Xodus at a pinned commit, applies 44 patches from MACxus (MIT; they add the library, package and progress commands and the macOS Keychain store), checks the SHA-256 of every patch and of Cargo.lock, and builds with Rust 1.99 through rustup. The first build takes a few minutes and needs about 1.5 GB of temporary disk. The pins are in resources/xodus-backend.json. The patched source is kept in ~/.battlenet-macos/build/xodus-src.

soju xbox-install            # build the backend (installs rustup/protobuf with Homebrew if missing)
soju xbox-login              # Microsoft's own sign-in page in a window
soju xbox-sync US            # import owned + Game Pass games (US, KR, GB, DE, JP)
soju xbox-download 9N116V0599HB   # download by Store product ID; run again to resume
soju xbox-location /Volumes/T7    # download new games to an external drive (--default: back to this Mac)
soju xbox-logout             # sign out; downloaded games stay
  • Downloads go to ~/.battlenet-macos/xbox-bottle/drive_c/XboxGames/<ProductId> and resume from where they stopped. To save space on the Mac, choose a folder on an external drive in Accounts → Xbox PC → Change… (or soju xbox-location). The drive can be APFS, Mac OS Extended or exFAT (most external SSDs come as exFAT); FAT, NTFS and network drives are refused. Games already downloaded stay where they are, an unfinished download resumes in its own folder, and a game whose drive is unplugged stays in the library as "Drive not connected" until you plug it in again (Soju never downloads it to the Mac instead). A renamed drive is found again.
  • Only GDK games in the MSIXVC format can be downloaded. Games packaged as MSIXVC2 are marked Not supported (xodus#53).
  • The Microsoft sign-in is stored in the macOS Keychain as "Xodus Service". macOS may ask to allow access after a backend rebuild. Soju stores game IDs, titles, package format, box art and your Xbox gamertag (as the account label), never the account e-mail or tokens.
  • The owned-library list comes from the same Microsoft endpoint the Xbox PC app uses. If Microsoft changes it, the import fails and the previous import is kept.
  • Not set up yet: the PlayFab save adapter MACxus uses for some games, so cloud saves of those titles may not sync. Games with Easy Anti-Cheat cannot run online on macOS (EAC has no macOS Wine module).

Steam (including the Steam version of D2R)

Steam with Apple GPTK (soju steam-gptk on, or Platforms > Steam > Overwatch and Diablo II mode): Steam and its games run on the same engine and Apple GPTK as Battle.net, plus a Mac driver that can show Steam's browser window. Use it for D3D12 games and for Blizzard games sold on Steam (Overwatch 2 reaches its main menu online; Diablo II: Resurrected needs GPTK's libd3dshared). It uses its own bottle, made as a copy of the Steam bottle that takes no extra space, so installed games stay; Steam asks you to sign in once there. soju steam-gptk off goes back to Wine 11 + DXMT, still signed in.

Game voices in Windows Media Audio (Skyrim Special Edition's dialogue, among others) need GStreamer, which Wine uses to decode them. When Steam is set up, and on soju update, Soju downloads the official GStreamer macOS package from gstreamer.freedesktop.org (SHA-256 pinned, about 150 MB once) and keeps only the 42 MB of audio and video plugins and libraries Wine loads, in ~/.battlenet-macos/gstreamer. Steam started by Soju finds them. This applies to Steam on Wine 11; the Apple GPTK engine has no GStreamer support yet.

Surround sound on stereo speakers. A game that opens a 5.1 or 7.1 output (Skyrim Special Edition does) used to lose its centre and back channels on a Mac's speakers, and with them most dialogue. Steam support v4 adds Wine's audio driver with Highball's patches, so such output is mixed down through Apple's spatial mixer before it reaches the speakers (#93).

D2R shipped on Steam in Feb 2026 as the Infernal Edition. Steam support uses a different free engine: the modern Steam client's CEF UI does not render on CrossOver-source builds (black window, cross-process swapchain + CEF sandbox issues), but it works on a pinned upstream Wine 11 build with a tiny steamwebhelper wrapper that forces --disable-gpu --single-process. That fix comes from notpop/steam-on-m1-wine (MIT, wrapper source vendored in third_party/). Steam gets its own bottle so the two stacks never interfere:

scripts/create-steam-bottle.sh   # installs private Wine 11 + wrapper + official Valve installer
scripts/play.sh steam            # log in -> install & play
scripts/play.sh steam-kill       # stop the Steam bottle (closing the window keeps Steam running; click the Dock icon to bring it back, Steam > Exit quits)

Verified on M4 Pro / macOS 26.5: login, library, and an actual D3D11 (Unity) game rendering in-game via a DXMT fork. See docs/STEAM-GAMES.md for the full wiring (scripts/setup-steam-games.sh). Notes: switch your macOS input source to English (ABC) when typing in Steam (IME composition shows as ? otherwise).

Prerequisites: Apple Silicon Mac, Rosetta 2, Xcode Command Line Tools, Homebrew, and your own Battle.net account/games. Diablo II: Resurrected needs macOS 26.4 or later: the anti-cheat Blizzard added in January 2026 trips a Rosetta 2 bug that Apple fixed in 26.4, and on macOS 15 the game dies right after launch (Battle.net then shows "Update" and sits at Initializing) on Soju and on CrossOver alike. The launchers themselves and other games are not affected by that bug, but everything here was verified on macOS 26.5 only. Nothing from Apple, Blizzard, or CodeWeavers is redistributed by this repo.

Why is GPTK needed at all?

libd3dshared.dylib (inside GPTK) is not just graphics: D2R's loader requires its non-native code region registration to get through Rosetta 2. Without it the game freezes at launch even with AVX advertised. Graphics itself can run on pure open-source vkd3d/MoltenVK if D3DMetal is absent.

Troubleshooting

Start with soju doctor: it checks most of the items below and tells you which one is broken.

  • "Wine Mono Installer" popup -> step 2 was skipped; run get-components.sh then re-run build-engine.sh.
  • Game hangs forever at ~86 MB RAM, 0% CPU -> ROSETTA_ADVERTISE_AVX=1 or libd3dshared not reaching the game. Launch via play.sh only, and check step 4.
  • Libraries not found (gnutls/freetype errors) -> you launched wine through nohup/arch/another Apple-signed binary, which strips DYLD_* vars. Launch via play.sh.
  • Battle.net login webview may flicker (~once a minute) -> known cosmetic issue; it recovers automatically and login works.
  • "The installed version of the AMD graphics driver has known issues" when an Unreal Engine game starts (Hogwarts Legacy and others): D3DMetal presents itself as an AMD adapter with an old driver version, so UE4's driver check fires. Harmless, click OK; to silence it add [SystemSettings] / r.WarnOfBadDrivers=0 to the game's user Engine.ini (under AppData/Local/<Game>/Saved/Config/WindowsNoEditor/).
  • GOG GALAXY: a black rectangle appears at the bottom right while a notification toast is shown and disappears with it. The toast is a transparent layered window from GOG's notifications renderer; without DWM composition Wine paints its transparent area black. Harmless. Turning off desktop notifications in GOG's settings avoids it.
  • A movement key stays pressed, or the keyboard goes dead while the mouse still works (seen in Hogwarts Legacy): keyboard focus moved to another Wine window while the key was held. The usual culprit is the Epic (EOS) overlay, which is why soju epic now disables it (SOJU_EPIC_OVERLAY=1 brings it back; restart the launcher with soju epic-kill for the change to apply). On engines before v1.5 a Korean/Japanese/Chinese input source is a second cause: the letter keys then produce jamo or kana, which Unreal games drop (only Escape, arrows and function keys work) and a key held during the switch stays down; keep the input source on English (ABC) there, or update the engine (soju update). Still happening? SOJU_KEYLOG=1 soju epic writes a key/focus trace to ~/.battlenet-macos/logs/ to attach to an issue.
  • Epic: "your account has too many active logins" and logging out everywhere or resetting the password does not help. The account service is really answering too_many_sessions (18048), a limit on how many sessions were issued, not how many are held, so retrying makes it worse. Older engines hit this within a handful of launches because Wine could not keep the launcher's device key: see patches/ncrypt-persisted-keys.patch. Stop the bottle (soju epic-kill), leave it alone for a few hours so the counter clears, then start it once.
  • Battle.net shows "Update" (stuck at Initializing) and the Play button is gone after a game exits, or after a launch that died: the launcher re-checks the install every time a game process ends. Pause the update and resume it; Play comes back and the game starts normally. If the very first Play after an install dies within a minute, press Play again: seen once, the second launch went through. If the pause button does not react at all, the client itself has hung (seen after a week of uptime, with Battle.net.exe spinning at full CPU): quit Battle.net from the Dock and open it again, and Play is back.
  • A PlayStation pad (DualShock 4, DualSense) is paired and macOS sees it, but the game ignores it (DualShock 4 over Bluetooth with D2R, #42): soju controllers lists it under DirectInput only, with every XInput slot empty. Wine attaches Sony pads through its raw HID backend by default, and on macOS that backend never presents them as XInput pads, which is all Blizzard's games look for. soju battlenet now routes Sony pads through SDL instead (a per-vendor registry entry, so wheels and sticks that need raw HID keep it), and the pad works as an Xbox-style controller. Wine reads this once when the bottle starts: if Battle.net was already open, stop it with soju kill (just closing the window can leave the bottle running for a while) and start it again. Ticking "Disable hidraw" in soju controllers does the same for every device. To give Sony pads raw HID again, set Hidraw to 1 under HKLM\System\CurrentControlSet\Services\WineBus\Devices\054C.
  • Steam never shows its login window (steam.exe and steamwebhelper sit at 0% CPU, and dumps/ gets an assert_steam.exe_*.dmp saying BMainLoop appears to have stalled; #55): Steam's Wine 11.0 probes every Mac audio device one format at a time from Steam's main loop, and on some Macs that takes longer than Steam allows. soju steam now keeps the Steam client process itself off Core Audio, which fixes it from the next launch (soju steam-kill first if it is frozen). Games and store videos keep their sound; only the client's own audio (such as voice chat) is off. To turn it back on, set winecoreaudio.drv to builtin under HKCU\Software\Wine\AppDefaults\steam.exe\DllOverrides in the Steam bottle.
  • BLZBNTBNA00000005 -> play.sh seeds the signed exe automatically; make sure you launch through it.

Leftover Wine processes

Every bottle start also spawns idle Windows service processes (services.exe, winedevice.exe, plugplay.exe, rpcss.exe, explorer.exe /desktop, ~100 MB per set). If a bottle's wineserver is killed abruptly (a crash, an aborted run), those services never notice and linger. scripts/soju-sweep.sh removes them, and play.sh kill / epic-kill / steam-kill and the reaper call it automatically. It only removes service processes that belong to no running wineserver (every live bottle's processes hold a file open in their server's socket directory), so a live game or launcher is never touched, even while other bottles are up. soju sweep runs it by hand.

What's in the repo

  • scripts/build-engine.sh: full engine build recipe (freetype cross-build, gnutls wiring, GPTK layout, entitlements)
  • scripts/setup-bottle.sh / scripts/play.sh: bottle creation and the verified launch environment
  • docs/DIAGNOSIS.md: deep-dive on the CEF renderer crash and the Agent signature failure
  • docs/D2R-GAME-LAUNCH.md: the D2R loader investigation, dead ends included
  • research/: raw log evidence for the findings

Licensing

  • Scripts and docs in this repo: GPL-3.0 (see LICENSE)
  • The engine is built from CodeWeavers' published Wine sources (GPL/LGPL). Sources: media.codeweavers.com/pub/crossover/source/
  • Not in this repo or the app: Apple D3DMetal/GPTK binaries, CrossOver application binaries, any Blizzard files. Soju downloads Apple's unmodified GPTK files during setup and installs only what Apple signed
  • This project is not affiliated with CodeWeavers, Apple, or Blizzard Entertainment. Battle.net and Diablo are trademarks of Blizzard Entertainment. Use at your own risk; online play with third-party compatibility layers is at your own discretion.

Share your compatibility results

Tried a game on your Mac? Report successes, partial support or failures with the game, store, Mac model, macOS and Soju setup. GitHub sign-in required; reports are public. In the app, right-click a game and choose Report How It Ran…, or run soju report <game>: both open the form with your Mac's details filled in, and nothing is sent until you press Submit. Reports end up on the game pages at didimlabs.com/mac.

Share your compatibility results

About

Play Windows games on Apple Silicon Macs. Free, open-source app that installs the official Battle.net, Steam, Epic and GOG launchers and lists your games in one library.

didimlabs.com

Topics

apple-siliconbattle-netcrossover-alternatived3dmetaldiablo-ii-resurrecteddxmtea-appepic-gamesgame-porting-toolkitgogmac-gamingmacosmacos-gamingrockstar-gamessteamubisoft-connectwhisky-alternativewindows-gameswinewine-wrapper

Resources

Readme
GPL-3.0 license

Contributing

Contributing

Security policy

Security policy
Activity
Custom properties

Stars

35 stars

Watchers

1 watching

Forks

4 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.