# Doom via cURL: Server-Side Game in the Terminal with No Dependencies
Developer Sawyer X has released the cURL Doom project — an HTTP server that renders Doom frames in ANSI half-blocks and sends them to the terminal over the network via cURL. The solution works without installing any software, requiring only curl and bash. It supports two launch modes: a simplified one with a bash script and a pure streaming curl.
Simple Launch Mechanism
In the simple version, the command curl -sL http://localhost:3000 | bash is used. A GET request to the root returns the play.sh script with the SERVER host substituted. The script sets up a loop:
- Requests to /tick for each keypress.
- stty handling for raw input.
- Switching to alternate screen.
- Cursor control and terminal clearing.
A browser at the same URL sees a minimal page with one line of code.
Streaming Mode Without Shell
For the "masochistic" approach: stty -echo -icanon min 1 time 0 && curl -sN -X POST -T - localhost:3000/play. This is a bidirectional stream:
- Keypresses are sent up through the POST request body.
- ANSI frames come down through the response.
One TCP connection without intermediate loops. Standard terminal issues:
- stdin buffering until Enter.
- Input echo over frames.
Solution: stty switches to raw mode. At the end — reset to restore.
# Example of terminal in raw mode
stty -echo -icanon min 1 time 0
curl -sN -X POST -T - localhost:3000/play
reset
Context of Unusual Doom Ports
The project fits into a series of experiments running Doom on non-standard protocols.
- cssDoom (Nils Lenheer): rendering via CSS without canvas/WebGL. Logic in JS, base — original id Software source (GPLv2). Graphics: div elements with transform and preserve-3d for 3D space, sprites, textures, effects.
- Doom Over DNS (Adam Rice, March 2026): .NET version via Cloudflare DNS TXT records. WAD compressed into ~1964 records, on-the-fly decompression in PowerShell. No disk writes, DLLs loaded into memory. Violates RFC 1035 expectations but works globally with caching.
| Project | Protocol | Dependencies | Features |
|--------|----------|-------------|----------|
| cURL Doom | HTTP/cURL | curl, bash | ANSI half-blocks, bidirectional |
| cssDoom | CSS/JS | Browser | 3D via transform |
| Doom Over DNS | DNS TXT | PowerShell | No disk writes, global cache |
Server Technical Details
The server generates Doom frames in real-time, converts them to ANSI half-blocks for the terminal. Supports lag-free input handling. Code is open-source, available for forking and experiments with network rendering.
Key Points:
- Minimal dependencies: only curl/bash, no compilation or libraries.
- Two modes: scripted for convenience, streaming for protocol purity.
- ANSI half-blocks provide decent rendering in an 80x24 terminal.
- In context: demonstrates Doom's flexibility for network protocols.
The project is useful for studying low-level network interactions, terminal protocols, and minimalist game development.
— Editorial Team
No comments yet.