Diablo II: Resurrected on Apple Silicon
Why it hangs at launch on M-series Macs, and how to play it completely free with an open-source Wine stack. Verified in-game (online, with Battle.net login) on an M4 Pro running macOS 26.
The quick version
brew install BCD1210/soju/soju
soju install # engine + Apple GPTK walkthrough + Battle.net
soju battlenet # log in, install D2R inside Battle.net, press Play
That's it. The installer downloads a prebuilt GPL Wine engine, walks you through Apple's free Game Porting Toolkit download once (Apple forbids redistributing it), and installs Battle.net with Blizzard's official installer.
Why D2R "doesn't work" on Apple Silicon
If you've tried Wine wrappers before, you probably hit one of these three walls. Each has a real, specific cause:
1. The game hangs forever at launch (~86MB RAM, 0% CPU)
D2R's loader requires AVX instructions. Rosetta 2 supports
AVX, but only advertises it to a process when the undocumented
environment variable ROSETTA_ADVERTISE_AVX=1 is set. Without it the
loader waits forever before graphics initialization. This single variable is why
CrossOver works while most free wrappers appear broken: CrossOver sets it in its
launcher.
2. Battle.net shows "BLZBNTBNA00000005" (the "Oops" page)
Battle.net's Agent verifies the signature of the process connecting to
it, which requires resolving a PID to a full executable path. macOS has no
/proc, so this needs a macOS-specific code path that most community
Wine builds don't implement. Soju's engine is built from CodeWeavers' published
CrossOver sources, which do.
3. Graphics crash loops with D3DMetal
Apple's Game Porting Toolkit libraries must live in lib/external/
with the wine .so files as symlinks into it. Copying the
files breaks @loader_path resolution and D3DMetal dies in an
assertion loop. libd3dshared is also required for the loader to pass
Rosetta at all (it registers non-native code regions), not just for graphics.
Requirements
- Apple Silicon Mac (M1 or newer), verified on M4 Pro
- macOS 26.4 or newer recommended: a 2026 Blizzard anti-cheat update triggered a Rosetta 2 bug that Apple fixed in 26.4. On older macOS the game can stall even with everything else correct.
- Rosetta 2 (
softwareupdate --install-rosetta) - A free Apple ID (for the one-time Game Porting Toolkit download)
- Your own Battle.net account and a D2R license
Step by step
- Install:
brew install BCD1210/soju/soju(or the one-line installer) - Run
soju install. It downloads the engine (~350MB), then asks you to download Apple's Game Porting Toolkit dmg and press Enter. It then installs Battle.net automatically (5-10 minutes). - Play: double-click
~/Applications/Battle.net.app(or runsoju battlenet), log in, install D2R inside the app, press Play. For offline sessions afterwards:soju d2r.
Troubleshooting
| Symptom | Fix |
|---|---|
| Game stuck at launch, ~86MB RAM | You're not using Soju's launcher. ROSETTA_ADVERTISE_AVX=1 is missing. Launch via soju battlenet / soju d2r. |
| BLZBNTBNA00000005 after login | Engine problem. Make sure you're on Soju's engine, not a generic wine build. |
| "Failed to initialize graphics" | GPTK not installed. Run scripts/get-gptk.sh. |
| Typed text shows as ?? | Switch the macOS input source to English (ABC) while typing in Wine windows. |
Is this legal?
Yes. The engine is compiled from the GPL Wine sources CodeWeavers publishes, Apple's Game Porting Toolkit is a free download from Apple (you download it yourself; it is never redistributed), and you play on your own Battle.net account. Nothing is cracked or emulated. D2R runs against the real Battle.net.