A fast, fully client-side demo (replay) viewer for Deadlock,
running entirely in your browser. Drop in a .dem file and scrub through the
match on a live minimap — heroes, troopers, jungle camps, objectives, the urn,
kills, abilities, item builds, and chat.
🔗 Live: deadlock.nyc
Your demo files never leave your machine — parsing happens locally in WebAssembly, nothing is uploaded.
This tool is powered by boon, a Deadlock demo parser written in Rust. deadlock.nyc compiles boon to WebAssembly and renders the parsed entities, events, and stats in the browser.
- Local-first parsing —
.demfiles are parsed in-browser via boon (Rust → WASM). No server, no upload. - Live minimap with surface / tunnel layers and pan + zoom:
- Hero dots with team color, portrait, and a facing caret (yaw)
- Lane troopers, neutral jungle camps (chevrons sized by camp tier)
- Objectives — Guardians, Walkers, Shrines, the Patron, and the Mid-Boss — with live health rings
- The urn, tracked through pickups and carries
- Per-layer toggles (heroes / troopers / neutrals / objectives / urn)
- Timeline scrubber with play/pause, back/forward by a configurable step, adjustable playback speed, jump-to-tick, and pause-band markers.
- Keyboard shortcuts —
Spaceplay/pause,←/→back/forward,Escto close dialogs. - Event feeds (tabbed) — kills, ability usage, objectives (destructions, Mid-Boss, urn spawns), and team-colored chat. Click any row to seek.
- Player detail panel — collapsible Health, Abilities, Items (framed by category with gun / vitality / spirit souls invested), and Bonuses.
- Dark / light themes.
- React 19 + TypeScript
- Vite 6 + Tailwind CSS 4
- Bun (package manager + script runner)
- boon (Rust) compiled to WebAssembly
with
wasm-pack
-
Bun (latest)
-
A Rust toolchain with the
wasm32-unknown-unknowntarget andwasm-pack:rustup target add wasm32-unknown-unknown cargo install wasm-pack
bun install
bun run wasm # build the boon WASM module → src/wasm/pkg (gitignored)
bun run dev # start the dev serversrc/wasm/pkg is generated and not committed, so bun run wasm must be run
once before bun run dev / bun run build (and again whenever wasm/src
changes).
bun run wasm
bun run build # tsc -b && vite build → dist/
bun run preview # serve the production build locallysrc/
components/ React UI (map view, timeline, event log, player detail, …)
data/ generated game data (item/hero/ability manifests — committed)
wasm/ WASM glue; pkg/ is built by `bun run wasm` (gitignored)
wasm/ the Rust crate (boon → WASM bindings) compiled by wasm-pack
scripts/ game-data generators (see scripts/README.md)
public/ static assets (item/hero/minimap images, CNAME)
Item icons, hero portraits, display names, and the stat panel are generated from
Deadlock's game files. After a patch, refresh them with the pipeline documented
in scripts/README.md:
bun run sync # pull the latest GameTracking data and regenerate manifestsImage and modifier-schema steps require a machine with Deadlock + Source 2 Viewer — see the script docs for details.
The site deploys to GitHub Pages via GitHub Actions
(.github/workflows/deploy.yml) on every push to
main. The workflow installs Rust + wasm-pack, builds the WASM module, runs
bun run build, and publishes dist/. The custom domain (deadlock.nyc) is set
via public/CNAME, which serves from the root, so no base override is needed.
- boon — the Rust Deadlock demo parser that makes this tool possible.
- Deadlock is a game by Valve. This is an unofficial, fan-made tool and is not affiliated with or endorsed by Valve.
The source code is released under the MIT License.
Deadlock and all related game content — imagery, icons, minimaps, hero and item names, and other in-game assets — are the property of Valve Corporation and are not covered by this license. This is an unofficial, fan-made project that is not affiliated with or endorsed by Valve.