https://github.com/danielgatis/go-doom
Play classic DOOM in pure Go! Single binary with embedded game data, cross-platform, zero dependencies.
https://github.com/danielgatis/go-doom
doom doom-2 go golang vanilla-doom
Last synced: 3 months ago
JSON representation
Play classic DOOM in pure Go! Single binary with embedded game data, cross-platform, zero dependencies.
- Host: GitHub
- URL: https://github.com/danielgatis/go-doom
- Owner: danielgatis
- License: mit
- Created: 2025-12-22T02:39:28.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-12-22T14:37:42.000Z (6 months ago)
- Last Synced: 2025-12-23T13:01:19.624Z (6 months ago)
- Topics: doom, doom-2, go, golang, vanilla-doom
- Language: Go
- Homepage:
- Size: 26 MB
- Stars: 5
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Go - Doom
[](https://goreportcard.com/report/github.com/danielgatis/go-doom)
[](https://raw.githubusercontent.com/danielgatis/go-doom/master/LICENSE)
[](https://godoc.org/github.com/danielgatis/go-doom)
Play classic DOOM in pure Go! Single binary with embedded game data, cross-platform, zero dependencies.
https://github.com/user-attachments/assets/4ad9b6f9-6e56-4a5d-9b9f-24f1153c7740
## Features
- All-in-one binary with embedded WADs, WASM engine and SoundFont
- Runs DOOM WASM module using [wazero](https://github.com/tetratelabs/wazero) (no CGO)
- Graphics rendering with [Ebitengine](https://ebitengine.org/)
- Sound effects and MIDI music via [go-soundfont](https://github.com/danielgatis/go-soundfont)
- Cross-platform: Windows, macOS, Linux
## Installation
```bash
go install github.com/danielgatis/go-doom@latest
```
Or download pre-built binaries from the [Releases](https://github.com/danielgatis/go-doom/releases) page.
## Usage
```bash
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
```bash
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
```bash
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!
[](https://www.buymeacoffee.com/danielgatis)
## License
MIT License - see [LICENSE](./LICENSE) file.
## Author
Daniel Gatis