go-doom
A pure Go DOOM engine that runs DOOM via WebAssembly with all game data embedded.
Features
- All-in-one binary with embedded WADs, WASM engine and SoundFont
- Runs DOOM WASM module using wazero (no CGO)
- Graphics rendering with Ebitengine
- Sound effects and MIDI music via go-soundfont
- Cross-platform: Windows, macOS, Linux
Installation
go install github.com/danielgatis/go-doom@latest
Or download pre-built binaries from the Releases page.
Usage
doom [game] [flags]
Games
| Game |
Description |
doom1 |
Doom Shareware (default) |
doom |
Doom Registered |
doomu |
Ultimate Doom |
doom2 |
Doom II: Hell on Earth |
plutonia |
Final Doom: The Plutonia Experiment |
tnt |
Final Doom: TNT Evilution |
Examples
doom # Play Doom Shareware
doom doom2 # Play Doom II
doom -s 2 # Play with 2x scale
doom doom2 -s 3 # Play Doom II with 3x scale
doom -w ~/wads/mywad.wad # Play custom WAD file
doom -f ~/soundfonts/gm.sf2 # Use custom SoundFont
Flags
| Flag |
Description |
-w, --wad |
Path to custom WAD file |
-f, --soundfont |
Path to custom SoundFont file |
-s, --scale |
Window scale factor (default: 1) |
-v, --verbose |
Show DOOM log output |
-V, --version |
Show version |
-h, --help |
Show help |
Controls
| Key |
Action |
| Arrow keys |
Move |
| Ctrl / Z |
Fire |
| Space / X |
Use (open doors, activate) |
| Shift |
Run |
| Alt |
Strafe |
| 1-7 |
Select weapon |
| Escape |
Menu |
| Enter |
Confirm |
| Tab |
Automap |
| +/- |
Zoom automap |
| F1 |
Help |
| F2 |
Save game |
| F3 |
Load game |
| F4 |
Sound volume |
| F5 |
Detail level |
| F6 |
Quicksave |
| F9 |
Quickload |
| F10 |
Quit |
| F11 |
Gamma correction |
| Pause |
Pause game |
Building from Source
git clone https://github.com/danielgatis/go-doom.git
cd go-doom
# Build all game variants
make all
# Or build a specific game
make doom1 # Doom Shareware (18MB)
make doom2 # Doom II (28MB)
# Build default (doom1)
make build
Available Binaries
| Binary |
Game |
Size |
doom1 |
Doom Shareware |
~18MB |
doom |
Doom Registered |
~24MB |
doomu |
Ultimate Doom |
~26MB |
doom2 |
Doom II |
~28MB |
plutonia |
Plutonia Experiment |
~30MB |
tnt |
TNT Evilution |
~31MB |
Binaries are placed in the bin/ directory.
Buy me a coffee
If you find this project useful, consider buying me a coffee!

License
MIT License - see LICENSE file.
Author
Daniel Gatis