Play DOOM in your terminal using OpenTUI's framebuffer rendering and doomgeneric WASM
46
stars
104
commits
TypeScript
primary language
Aug 10, 2026
updated
๐ฎ Play DOOM in your terminal using OpenTUI's framebuffer rendering!
~/.opentui-doom/doom1.wad is freely available)If you have Bun installed, just download a doom1.wad and run:
bunx @muhammedaksam/opentui-doom --wad ./doom1.wad
git clone https://github.com/muhammedaksam/opentui-doom.git
cd opentui-doom
bun install
git clone https://github.com/emscripten-core/emsdk.git ~/emsdk
cd ~/emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
bun run build:doom
This clones doomgeneric and compiles it to WebAssembly.
Download the shareware DOOM WAD:
DOOM.WAD / DOOM2.WADPlace the WAD file in the project root.
bun run dev -- --wad ./doom1.wad
To disable mouse aiming:
bun run dev -- --wad ./doom1.wad --mouse false
To run with debug logging enabled (outputs to debug.log):
bun run dev:debug -- --wad ./doom1.wad
| Action | Keys |
|---|---|
| Move Forward/Back | W / S or โ / โ |
| Turn Left/Right | Mouse or โ / โ |
| Strafe | A / D |
| Fire | Left Click or Ctrl |
| Use/Open | Space |
| Run | Shift |
| Weapons | 1-7 |
| Menu | Escape |
| Map | Tab |
| Quit | Ctrl+C |
Save games are stored in ~/.opentui-doom/ with DOOM's standard naming:
doomsav0.dsgdoomsav1.dsgdoomsav5.dsgSaves are automatically synced every 5 seconds and on exit.
Sound effects and music require mpv to be installed:
# Ubuntu/Debian
sudo apt install mpv
# macOS
brew install mpv
# Arch
sudo pacman -S mpv
Sound files should be placed in the sound/ directory.
For the best experience, we recommend:
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ
โ doomgeneric โโโโโถโ OpenTUI โโโโโถโ Terminal โ
โ (WASM) โ โ FrameBuffer โ โ Display โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ
โฒ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโ
Key Events
opentui-doom/
โโโ src/
โ โโโ index.ts # Main entry point
โ โโโ doom-engine.ts # WASM module wrapper
โ โโโ doom-input.ts # Keyboard input mapping
โ โโโ doom-mouse.ts # Mouse input handling
โโโ doom/
โ โโโ doomgeneric_opentui.c # Platform implementation
โ โโโ doomgeneric/ # doomgeneric source (cloned during build)
โ โโโ build/ # Compiled WASM output
โโโ scripts/
โ โโโ build-doom.sh # Build script
โโโ package.json
โโโ README.md
Contributions are welcome! Please submit pull requests to the develop branch.
83 commits
21 commits
TypeScript
49.5%
C
45.1%
Shell
4.4%
JavaScript
1.0%
Play DOOM in your terminal using OpenTUI's framebuffer rendering and doomgeneric WASM
46
stars
104
commits
TypeScript
primary language
Aug 10, 2026
updated
๐ฎ Play DOOM in your terminal using OpenTUI's framebuffer rendering!
~/.opentui-doom/doom1.wad is freely available)If you have Bun installed, just download a doom1.wad and run:
bunx @muhammedaksam/opentui-doom --wad ./doom1.wad
git clone https://github.com/muhammedaksam/opentui-doom.git
cd opentui-doom
bun install
git clone https://github.com/emscripten-core/emsdk.git ~/emsdk
cd ~/emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
bun run build:doom
This clones doomgeneric and compiles it to WebAssembly.
Download the shareware DOOM WAD:
DOOM.WAD / DOOM2.WADPlace the WAD file in the project root.
bun run dev -- --wad ./doom1.wad
To disable mouse aiming:
bun run dev -- --wad ./doom1.wad --mouse false
To run with debug logging enabled (outputs to debug.log):
bun run dev:debug -- --wad ./doom1.wad
| Action | Keys |
|---|---|
| Move Forward/Back | W / S or โ / โ |
| Turn Left/Right | Mouse or โ / โ |
| Strafe | A / D |
| Fire | Left Click or Ctrl |
| Use/Open | Space |
| Run | Shift |
| Weapons | 1-7 |
| Menu | Escape |
| Map | Tab |
| Quit | Ctrl+C |
Save games are stored in ~/.opentui-doom/ with DOOM's standard naming:
doomsav0.dsgdoomsav1.dsgdoomsav5.dsgSaves are automatically synced every 5 seconds and on exit.
Sound effects and music require mpv to be installed:
# Ubuntu/Debian
sudo apt install mpv
# macOS
brew install mpv
# Arch
sudo pacman -S mpv
Sound files should be placed in the sound/ directory.
For the best experience, we recommend:
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ
โ doomgeneric โโโโโถโ OpenTUI โโโโโถโ Terminal โ
โ (WASM) โ โ FrameBuffer โ โ Display โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ
โฒ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโ
Key Events
opentui-doom/
โโโ src/
โ โโโ index.ts # Main entry point
โ โโโ doom-engine.ts # WASM module wrapper
โ โโโ doom-input.ts # Keyboard input mapping
โ โโโ doom-mouse.ts # Mouse input handling
โโโ doom/
โ โโโ doomgeneric_opentui.c # Platform implementation
โ โโโ doomgeneric/ # doomgeneric source (cloned during build)
โ โโโ build/ # Compiled WASM output
โโโ scripts/
โ โโโ build-doom.sh # Build script
โโโ package.json
โโโ README.md
Contributions are welcome! Please submit pull requests to the develop branch.
83 commits
21 commits
TypeScript
49.5%
C
45.1%
Shell
4.4%
JavaScript
1.0%