Doom entirely from DNS records

https://news.ycombinator.com/rss Hits: 23
Summary

At some point, a reasonable person asked "DNS resolves names to IP addresses, what else can it do?" The answer, apparently, is run DOOM. DNS TXT records can hold arbitrary text. Cloudflare will serve them globally, for free, cached at the edge, to anyone who asks. They are not a file storage system. They were not designed to be a file storage system. Nobody at the IETF was thinking about them being used as a file storage system when they wrote RFC 1035. And yet here we are. This project compresses the entirety of shareware DOOM, splits it into ~1,964 DNS TXT records across a single Cloudflare zone, and plays it back at runtime using nothing but a PowerShell script and public DNS queries. The WAD file never touches disk and the .NET game engine DLLs are loaded directly into memory. It was always DNS. # 1. Install PowerShell 7 (if you don't have it) winget install Microsoft.PowerShell # 2. Play DOOM .\Start-DoomOverDNS.ps1 -PrimaryZone 'example.com' That's it. Everything else is fetched from DNS automatically using Resolve-DNSName. # 1. Build the game engine cd managed-doom dotnet publish ManagedDoom/ManagedDoom.csproj -c Release -f net8.0 -o publish-out # 2. Load Cloudflare credentials Import-Module .\TXTRecords\TXTRecords.psm1 Set-CFCredential -ApiToken (Read-Host 'API Token' -AsSecureString) # 3. Upload to DNS .\Publish-DoomOverDNS.ps1 ` -PublishDir 'managed-doom\publish-out' ` -WadPath 'DOOM1.WAD' ` -Zones @('example.com') Parameter Default Description -PrimaryZone (required) DNS zone where stripe-meta records live -DnsServer (system default) Specific DNS resolver IP (e.g. '1.1.1.1') -WadName 'doom1' WAD type: doom1, doom, doom2, plutonia, tnt -DoomArgs '' Arguments forwarded to the engine (e.g. '-warp 1 3 -skill 5') -WadPrefix 'doom-wad' DNS prefix for the WAD stripe -LibsPrefix 'doom-libs' DNS prefix for the DLL bundle stripe Use -DnsServer '1.1.1.1' if records haven't propagated to your local resolver yet. Parameter Default Description -PublishDir (required) Pa...

First seen: 2026-03-26 18:14

Last seen: 2026-03-27 16:29