Duum in your browser
A Doom engine written in Python, running on a browser build of its own runtime.
Downloads about 10 MB the first time. Nothing is fetched until you press it.
That did not work
Show the technical details
Controls
↑ ↓ or W S move, ← → or A D turn, , . or Q X strafe, Ctrl or F fire, Space or E open and use, 1–6 pick a weapon.
Esc opens the menu, which pauses the game. Arrows move through it and Enter chooses. Remapping is not offered here: the browser has no settings file to remember it in, so the Controls screen says the platform cannot remap rather than showing you a control that quietly does nothing.
Bring your own WAD
Your file is not uploaded. It is read in this tab and handed to the engine here; the page has no server to send it to. Any IWAD Duum understands works, including commercial ones you own.
The engine parses that file inside a WebAssembly sandbox with no filesystem, no network and no access to this page, running on its own thread. A WAD that sends it somewhere it cannot return from costs you the Stop button, not the tab.
What this actually is
Duum is a Doom engine written in Python: the BSP walk, the portal clipping, the perspective-correct texture mapping and every line of the game logic. It runs anywhere CPython does, and on UnoDOS under MicroPython on bare metal.
This page is a third port of it, and it is the same engine file unmodified. What changed is underneath: MicroPython compiled to WebAssembly, and the per-pixel span writers in C, exactly the arrangement the bare-metal port uses. That is about 290 KB of WebAssembly, which is the whole runtime and the whole engine.