---
url: /demos/durable-doom.md
description: >-
  Doom on Durable Streams. Live spectating, time-travel, and fork-to-continue —
  all client-side, no backend.
---

# Durable Doom

Doom on [Durable Streams](/primitives/durable-streams). Every game tic is an offset, every offset is a branch point. Live spectating, time-travel, and [fork](/blog/2026/04/15/fork-branching-for-durable-streams)-to-continue — all client-side, no backend.

## How it works

Doom's game engine is compiled to WebAssembly and runs entirely in the browser. Every tic (input frame) is captured and appended to a [Durable Stream](/primitives/durable-streams). Because Doom is a deterministic pure function of its input log, replaying the stream reproduces identical game state.

This gives Doom properties that come for free from the stream primitive:

* **Live spectating** — tail the stream over HTTP, fan out via CDN to unlimited observers
* **Time-travel** — read up to any offset and replay to that point, with WASM memory snapshots for instant backward seek
* **Fork-to-continue** — [fork](/blog/2026/04/15/fork-branching-for-durable-streams) the stream at any tic and take over someone else's playthrough mid-action

No servers, no game backends, no sandboxes. Just a static page, a WASM engine, and Durable Streams on [Electric Cloud](/cloud).

Read the [blog post](/blog/2026/04/20/doom-on-durable-streams) for the full technical deep dive.
