# Doom Over DNS: Launching the Classic Shooter via DNS Records
Developer Adam Rice implemented running the shareware version of Doom exclusively via DNS TXT records in Cloudflare. The game is compressed into 1964 fragments, loaded via public DNS queries, and runs in PowerShell 7 without writing the WAD file to disk. The .NET game engine DLLs are loaded directly into memory. The project bypasses file storage limitations by using DNS as a transport for binary data.
Installation and Launch
To run it, you need PowerShell 7 and a Cloudflare API token with permissions to edit DNS zones.
- Install PowerShell 7:
winget install Microsoft.PowerShell - Set up Cloudflare credentials: use the TXTRecords module and the
Set-CFCredentialcommand. - Launch the game:
\.\Start-DoomOverDNS.ps1 -PrimaryZone 'example.com'
The script automatically loads data via Resolve-DNSName. A free Cloudflare zone holds 185 fragments; Pro/Business/Enterprise holds up to 3400. The WAD file requires ~1199 fragments.
# Example launch with multiple zones for a free account
.\Start-DoomOverDNS.ps1 -Zones @('zone1.com', 'zone2.com', 'zone3.com')
Placing Data in DNS Zones
The project splits the compressed WAD into TXT records. For free accounts, multiple domains are needed — the module distributes fragments automatically. In a Pro zone, the entire game fits.
Resuming download:
- The
Publish-TXTStripe -Resumecommand checks fragment hashes. - Continues from the last valid block, avoiding retransmission.
TXT record limits (RFC 1035) are ignored: DNS is used as distributed storage with global caching on Cloudflare's edge nodes.
| Zone Type | Fragments | Enough for Doom |
|-----------|-----------|-----------------|
| Free | 185 | No (need 7+ zones) |
| Pro | 3400 | Yes (full game) |
Technical Details of Compression and Decompression
The WAD file is compressed to minimize TXT record sizes. The PowerShell script decompresses data on-the-fly during execution. No local storage — all operations in memory.
Key components of the TXTRecords module:
Publish-TXTStripe: publishing fragments with resume support.Set-CFCredential: setting up the API token.- Integration with
Resolve-DNSNamefor public queries.
The project demonstrates DNS capabilities for transmitting arbitrary binary data, bypassing typical protocol limitations.
Key Points
- Doom runs without files on disk: WAD and DLLs loaded into memory from DNS TXT.
- Requires ~1199 fragments for WAD; free Cloudflare zones — 185 fragments.
- Supports resuming download by fragment hashes.
- Uses PowerShell 7 and public DNS queries without a custom server.
- Scales to Pro accounts: one zone for the full game.
— Editorial Team
No comments yet.