November 25, 2025
PCB or not PCB, DOOM finds a way
A DOOM vector engine for rendering in KiCad, and over an audio jack
Fans cheer, skeptics squint, and someone wants it on the aux cable
TLDR: A developer made DOOM render inside KiCad using real circuit board traces at playable speeds, and it could even be fabricated. Comments split between delighted absurdists, meme-weary skeptics, and hackers plotting an audio-jack spin-off—proving creative misuse of tools is the internet’s favorite sport.
DOOM just invaded the circuit board editor KiCad, where walls are copper lines and monsters are chip packages—and the crowd is losing it. The dev tapped the real DOOM engine via doomgeneric and renders wireframe levels as actual PCB traces at a scrappy 10–25 FPS. It’s gloriously useless, proudly so, and that’s the point.
The comments are a battlefield: one camp is pure joy (“DOOM forever!”) and “this makes the world better” vibes, while the other rolls eyes at the eternal meme of “DOOM running on everything.” The spiciest nitpick: a skeptic asks why they don’t see component pins actually connected, poking at the claim that the design is electrically valid. Meanwhile, the hacker brain trust spins up sequels—one user dreams of pushing DOOM over an audio jack from a tiny microcontroller, debating raw XY signals vs. a soft-modem approach, basically turning DOOM into aux-port art.
The dev is clear: KiCad is just the display, not the game engine itself. Fans don’t care. The vector trick (lines, not pixels) makes it fast enough to play, and every frame could be sent to a factory for a very silly PCB. It’s tech theater, and the audience is loud.
Key Points
- •KiDoom renders DOOM in KiCad’s PCB editor using real copper traces, footprints, and vias to create playable wireframe scenes.
- •The project uses the actual DOOM engine via doomgeneric, with vector geometry extracted from drawsegs[] and vissprites[].
- •A triple-mode setup provides an SDL gameplay window, a Python/pygame wireframe for debugging, and a KiCad PCB visualization.
- •Performance is achieved by rendering 100–300 vector segments per frame (10–25 FPS), instead of 64,000 pixel pads (~0.15 FPS).
- •The engine runs as a separate C process sending vectors over sockets; the PCB designs are electrically valid with components on a shared net.