DOOM, played over cURL

What it is
A cheeky new demo turns id Software’s DOOM into a terminal-streaming circus. It has been reported that xsawyerx’s curl-doom project renders DOOM frames into ANSI half-blocks and streams them over HTTP so you can play in your terminal with nothing but curl and a bit of bash. Allegedly there’s no install and no dependencies beyond curl and bash — just point, pipe, and play.
How it works
Two ways to play: the friendly one-liner (curl | bash) that rewrites a tiny play.sh per-host, or the masochistic pure-curl route that posts raw keystrokes and reads back ANSI frames on a single duplex HTTP connection. The trick is flipping the terminal into raw mode with stty so keystrokes aren’t line-buffered or echoed; curl then carries keystrokes upstream while frames stream downstream over the same TCP connection. Clever and slightly terrifying. Held-key behavior, frame rate, and terminal size are tunable (cols, rows, fps), and the server defaults to 15 fps to avoid kernel send-buffer bursts.
Nuts and bolts
Under the hood the server runs one doomgeneric process per session, with a stdin pipe for commands, a dedicated frame pipe (fd 3) so logs don’t corrupt the framebuffer, and a virtual clock so the headless backend can advance without waiting. Frames overwrite in place via cursor-home, which means a slow terminal shows a “torn” frame rather than a blank one — not perfect, but playable. Want to just watch? No stty needed; Doom will happily demo itself while you sip coffee.
Why this matters
It’s a delightful reminder that the terminal is still fertile ground for creativity. This isn’t just a stunt; it’s a compact demonstration of bidirectional streaming over HTTP, terminal trickery, and how far you can push tiny tooling. Retro meets network hack — and yes, it’s exactly the kind of thing the internet was made for.
Sources: github.com/xsawyerx, Lobsters
Comments