DevilutionX
Modernized Diablo engine with cross-platform multiplayer
DevilutionX is an open-source port of the Diablo game engine that runs on modern systems. It supports cross-platform multiplayer, allowing players to host and join self-hosted Diablo co-op games.
Key features
- Modern Diablo engine port
- Cross-platform multiplayer
- Quality-of-life improvements
- Runs on many devices
Pros & cons
Strengths
- Plays Diablo on modern hardware
- Active development
Trade-offs
- Requires original game data
- Engine port, not new content
DevilutionX replaces
Last reviewed Aug 26, 2026 · 780 words
DevilutionX ships no game. It is the Diablo engine rebuilt from the 1996 binaries and released under the Unlicense, and it needs one file from a legitimate copy of the original, DIABDAT.MPQ, before it will show you a menu. GOG sells Diablo for about 10 dollars at last check, and that purchase is the entire cost of a 4-player co-op night on hardware Blizzard never imagined. There is no server to install, which is the part self-hosters most often get wrong, so that is where this guide starts.
There is no dedicated server, and you do not need one
Diablo multiplayer is peer-hosted: one player starts a game, the others join it, and the world lives on the host's machine for the duration. DevilutionX keeps that model. Nobody runs a headless daemon, there is no admin panel, and it does not belong in Pterodactyl next to your Minecraft and Valheim instances. Persistent state is per character, saved on each player's own disk (on Linux under ~/.local/share/diasurgical/devilution/), so the "server" is whichever laptop is switched on. When the host quits, the session ends and everyone keeps their character and their loot.
If you were hoping for a persistent shared world the way Minetest or OpenTTD provide one, this is the wrong project. What you get instead is the 1996 game, up to 4 players, with nearly 30 years of bugs fixed.
Three ways to connect, ranked
The multiplayer menu offers TCP/IP direct and a built-in ZeroTier mode. My ranking for a self-hoster:
- Everyone on Tailscale. The host picks TCP/IP, the guests type the host's Tailscale IP, and it works across every NAT with nothing forwarded. This is the option I use.
- ZeroTier mode. DevilutionX embeds a ZeroTier client; the host names a game, guests enter the same name, and the engine finds the peers over ZeroTier's network. Zero setup, slightly more latency, and you are trusting a game name as a password.
- Forward TCP 6112 on the host's router and hand out a public IP. It works, it is what Diablo did in 1997, and it is the one I would skip in 2026.
Everyone must run the same DevilutionX version and have the same data files; a Hellfire player cannot join a plain Diablo game. Check the version string on the title screen before blaming the network, because mismatched builds cause almost every "cannot join" complaint.
What "runs on many devices" means in practice
Builds exist for Windows, macOS, Linux (Flatpak and most distribution repositories), Android, iOS, Nintendo Switch, 3DS, PS Vita and the Raspberry Pi. The engine wants about 256 MB of RAM and any GPU or none; a Pi 4 hosts a full 4-player game without complaint. On Linux I install the Flatpak, drop DIABDAT.MPQ into the data directory it names on first launch, and I am in Tristram within 2 minutes. On Android, copy the MPQ to the folder the app asks for. The quality-of-life additions are the reason to bother: widescreen and high-resolution rendering, running in town, automatic gold pickup, a stash, quick-cast, controller support, and fixes for the duplication and desync bugs the original never patched.
If you want to try it before buying, the shareware spawn.mpq from the original Diablo demo is supported and gives you the Warrior and the first dungeon levels.
Where the data lives and how to move it
Three sets of files matter: DIABDAT.MPQ (the game, roughly 500 MB), the optional Hellfire expansion MPQs if you own them, and the save files. Keep the MPQs on a NAS share and symlink them; keep the saves in Syncthing if you play from more than one machine. Saves are a few hundred kilobytes, so a nightly copy costs nothing and the character you levelled in 2019 will still load. Nothing else needs backing up, and there is no database, no config to version, and no port to monitor.
What I'd do
Buy Diablo on GOG, install the Flatpak on the machine that is always on, and put every player on Tailscale. Host in TCP/IP mode, share the Tailscale IP, and leave the router alone. Treat it as a game, not a service: no uptime monitor, no reverse proxy, no container. The only recurring job is updating all 4 copies together when a release lands. For a self-hoster the whole appeal is that the games shelf gets a 1996 classic back with zero infrastructure attached, and adding infrastructure would only get in the way.
Similar game engines & frameworks apps
PixiJS
Game Engines & FrameworksFast 2D WebGL rendering engine for browser games
Replaces Adobe Animate runtime
Phaser
Game Engines & FrameworksFast HTML5 game framework for browser games you host yourself
Replaces Construct, GameMaker
OpenRA
Game Engines & FrameworksOpen-source remake of classic RTS games
Replaces Command & Conquer, Red Alert
PlayCanvas Engine
Game Engines & FrameworksOpen-source WebGL game engine for 3D browser games
Replaces Unity WebGL
openage
Game Engines & FrameworksOpen-source engine reimplementation of Age of Empires II
Replaces Age of Empires II original engine
Retroarch Web Player
Game Engines & FrameworksEmulate videogames system and play videogames through your web browser