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.

All of this is documented in depth, with logs, in the diagnosis writeup (useful even if you use a different Wine frontend).

Requirements

Step by step

  1. Install: brew install BCD1210/soju/soju (or the one-line installer)
  2. 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).
  3. Play: double-click ~/Applications/Battle.net.app (or run soju battlenet), log in, install D2R inside the app, press Play. For offline sessions afterwards: soju d2r.

Troubleshooting

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

Get Soju on GitHub