A peer-to-peer Doom netplay app with smart-contract backed stats (kills, rankings, achievements).
Play classic Doom™ with friends online without setting up port-forwarding. Deathmatch, Co-op supported.
Trac Doom™ ships with Freedoom 1 + 2 and allows to use your own custom WADs (maps) that are compatible with Doom1 and Doom2.
Trac Doom™ is a pure gaming experience. No financial transactions are involved.
WASD + Mouse (or arrow keys + spacebar for shoot)
1,2,3... for weapon switching.
"F" key for fullscreen. "ESC" to minimize.
"E" to respawn or using objects (opening doors, etc).
Windows: download & install TracDoom-Windows.msix
Mac: download, unzip and run TracDoom-Apple-Silicon.zip
Linux: download, unzip and run TracDoom-Linux-AppImage.zip (requires FUSE, tested on Ubuntu 24)
If installation doesn't work for you, you can still install manually below.
Node.js 22+ required:
Windows:
- Option 1 (installer): Download and run the Node.js 22+ installer from https://nodejs.org/
- Option 2 (winget):
winget install OpenJS.NodeJSmacOS:
- Option 1 (Homebrew):
brew install node- Option 2 (installer): Download the installer from https://nodejs.org/
Linux:
- Option 1 (NodeSource, Debian/Ubuntu):
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs- Option 2 (nvm, any distro):
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$HOME/.nvm"
source "$NVM_DIR/nvm.sh"
nvm install 22
nvm use 22Verify Node (must be 22+):
node -v
npm -vPear (v2+ required):
npm install -g pearCheck Pear version:
pear -vIMPORTANT: If the Pear version is below 2.x, upgrade Pear:
pear sidecar --key pzcjqmpoo6szkoc4bpkw65ib9ctnrq7b6mneeinbhbheihaq6p6oThis can take a while, let it finish and check the version again:
pear -vMust return something like SemVer=2.2.6
Windows / macOS / Linux:
pear run pear://6y6ipdm9wanepy7tcii8hu1cixwbzchskwtc9pg1czjayr7f564y gamedata"gamedata" will be the folder containing your identity. Please keep it at all times to preserve your achievements!
Windows / macOS / Linux:
git clone https://github.com/Trac-Systems/trac-doom
cd trac-doom
npm install
pear run . gamedataNotes:
gamedatais the storage folder. Use a different folder per local peer.-dopens devtools. You can omit it for normal play.
Lobby:
- Nickname: Your public display name in chat and rankings.
- Players: Connected peers (nicknames are pulled from the contract).
- Chat: Single‑line text chat shared on the contract channel.
- Match list: Open matches; click Join to request a slot.
- Host game: Creates a match with the selected settings.
- Mode: Coop / Deathmatch / Altdeath.
- Max players: 1–4 (Doom netplay limit).
- Map + Skill: Map selection and difficulty.
- No monsters: Removes monsters (useful for competitive modes).
- MAP Settings: IWAD/PWAD selection and hashes (see below).
In‑game:
- End match (host): Stops the match for everyone.
- Leave match (joiner): Leaves before the match starts.
Terminology:
- IWAD: Base game content (e.g., Doom or Freedoom).
- PWAD: Add‑on content (maps, weapons, total conversions).
Defaults:
- Bundled IWADs:
doom1.wad(Freedom1) anddoom2.wad(Freedom2). - You can always host with bundled IWADs.
Custom WADs:
- Open MAP Settings and set a WAD folder.
- The app scans for
.wadfiles and lists IWADs and PWADs separately. - Joiners must have matching file hashes for the selected IWAD/PWADs or the UI blocks the join.
Common env vars:
TRAC_RPC_PORT(default7767) – UI RPC port.TRAC_DNET_PORT(default7788) – Doom WS bridge port.TRAC_PLAYERS(default2) – Max players (1–4).TRAC_SKILL(default3) – Doom skill (1–5).TRAC_WAD_DIR– Folder to scan for WAD/PWADs.TRAC_IWAD– Default IWAD filename in the folder.TRAC_PWADS– Comma‑separated PWAD filenames.TRAC_SOUND(1/0) – Sound effects on/off (default on).TRAC_MUSIC(1/0) – Music on/off (default off).
Use env vars the same way for both:
- the packaged Pear URI (
pear run ... pear://...) - the local repo (
pear run ... .)
macOS / Linux (packaged):
TRAC_RPC_PORT=7769 TRAC_DNET_PORT=7789 TRAC_PLAYERS=2 pear run pear://6y6ipdm9wanepy7tcii8hu1cixwbzchskwtc9pg1czjayr7f564y store_hostmacOS / Linux (local repo):
TRAC_RPC_PORT=7769 TRAC_DNET_PORT=7789 TRAC_PLAYERS=2 pear run . store_hostWindows (PowerShell, packaged):
$env:TRAC_RPC_PORT=7769
$env:TRAC_DNET_PORT=7789
$env:TRAC_PLAYERS=2
pear run pear://6y6ipdm9wanepy7tcii8hu1cixwbzchskwtc9pg1czjayr7f564y store_hostWindows (PowerShell, local repo):
$env:TRAC_RPC_PORT=7769
$env:TRAC_DNET_PORT=7789
$env:TRAC_PLAYERS=2
pear run . store_hostWindows (cmd, packaged):
set TRAC_RPC_PORT=7769&& set TRAC_DNET_PORT=7789&& set TRAC_PLAYERS=2&& pear run pear://6y6ipdm9wanepy7tcii8hu1cixwbzchskwtc9pg1czjayr7f564y store_hostWindows (cmd, local repo):
set TRAC_RPC_PORT=7769&& set TRAC_DNET_PORT=7789&& set TRAC_PLAYERS=2&& pear run . store_host- Doom WASM (third_party/doom-wasm) is licensed under GPLv2. See
third_party/doom-wasm/COPYING.md. - Freedoom IWADs (Freedom1/doom1.wad, Freedom2/doom2.wad) are from the Freedoom project and licensed under the BSD 3‑Clause. See https://freedoom.github.io/.