Back to Home

cURL Doom: Doom game via HTTP in the terminal

cURL Doom project allows playing Doom via HTTP and cURL in the terminal with ANSI half-blocks. Two launch modes described, technical nuances of raw input. Comparison with cssDoom and Doom Over DNS.

Running Doom via cURL: server and terminal
Advertisement 728x90

# 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.

Google AdInline article slot

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.

Google AdInline article slot
# 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 |

|--------|----------|-------------|----------|

Google AdInline article slot

| 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

Advertisement 728x90

Read Next