<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3" -->

---
title: Someone ported DOOM to SQL, for real this time | daily.dev
description: A team at CedarDB built a fully playable port of DOOM that renders entirely through SQL queries. The game stores WAD data in database tables and handles...
canonical: https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Someone ported DOOM to SQL, for real this time | daily.dev
og:description: A team at CedarDB built a fully playable port of DOOM that renders entirely through SQL queries. The game stores WAD data in database tables and handles...
og:url: https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3
og:image: https://api.daily.dev/og/posts/AXm63QMx3.png
og:image:alt: Someone ported DOOM to SQL, for real this time
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Someone ported DOOM to SQL, for real this time

**[Collections](https://daily.dev/sources/collections)** · 1 min read · 53 upvotes · 7 comments

## Summary

A team at CedarDB built a fully playable port of DOOM that renders entirely through SQL queries. The game stores WAD data in database tables and handles rendering with 1,300 lines of SQL across 89 common table expressions, totaling around 4,000 lines of SQL, plus a small Python wrapper for input, timing, and displaying the bitmap output. Source code is available on GitHub, joining other novelty DOOM ports like ones built in regex and Microsoft Word.

## Content

A team at CedarDB actually got DOOM running in SQL. Not a demo, not a toy renderer — the original game, playable.

The implementation stores WAD data in database tables and handles all the rendering through 1,300 lines of SQL spread across 89 common table expressions. The full project comes in around 4,000 lines of SQL total, with a small Python wrapper to handle keyboard input, timing, and displaying the generated bitmap.

The source code is on GitHub. It joins a growing list of novelty DOOM ports — including ones built in regular expressions and Microsoft Word — but this one is probably the most unhinged from a database engineering perspective.

Someone had to do it eventually.

## Questions this post answers

### How was DOOM implemented entirely in SQL?

WAD game data is stored in database tables, and rendering is handled through roughly 1,300 lines of SQL spread across 89 common table expressions, with the full project totaling around 4,000 lines of SQL. A small Python wrapper handles keyboard input, timing, and displaying the generated bitmap output. The team behind it is CedarDB, and the source is published on GitHub.

_Explore unconventional SQL engineering feats like this one on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@agustinbarrientos** · 4 upvotes

> What’s next?

**@hardik15** · 0 upvotes

> When you have a lot of free time and a lot of credits to use you will get this kind of result.
>
> This may show a great DB skill, however not effective in utilisation.
>
>
> This kind of things is going to be increase in future

**@ristotoldsep** · 0 upvotes

> 89 CTEs to run DOOM. Finally, a query plan worth framing.

**@ezpie** · 0 upvotes

> just google search "DOOM on _" and you'll always find a result.

**@devmandan** · 0 upvotes

> Of course they did..

## Similar posts on daily.dev

- [DOOM Using Regular Expressions](https://daily.dev/posts/doom-using-regular-expressions-uerbiyzd2) · Hackaday · 70 upvotes · 13 comments
- [DOOMBUDS](https://daily.dev/posts/doombuds-zaukw6epr) · Hacker News · 3 upvotes · 0 comments
- [Running Doom on a 20-Year-Old Snom 360 Office Phone](https://daily.dev/posts/running-doom-on-a-20-year-old-snom-360-office-phone-hlkxwumrg) · Lobsters · 0 upvotes · 0 comments
- [The Neo Geo Does Run DOOM After All](https://daily.dev/posts/the-neo-geo-does-run-doom-after-all-ocl3rss5z) · Hackaday · 1 upvotes · 0 comments

---

Tags: [#backend](https://daily.dev/tags/backend), [#sql](https://daily.dev/tags/sql)

[View this post on daily.dev](https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Someone ported DOOM to SQL, for real this time","url":"https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3"},"datePublished":"2026-09-26T05:10:00.922Z","dateModified":"2026-09-26T05:10:31.664Z","description":"A team at CedarDB built a fully playable port of DOOM that renders entirely through SQL queries. The game stores WAD data in database tables and handles...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6f9905e942a5d1a2892247cb48849801?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6f9905e942a5d1a2892247cb48849801?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Collections","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collections","logo":"https://media.daily.dev/image/upload/s--fk_6ycEi--/f_auto,q_auto/v1780996001/logos/collections?_a=BAMAMiWQ0","url":"https://daily.dev/sources/collections"},"commentCount":7,"discussionUrl":"https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":53},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":7}],"keywords":"backend,sql","timeRequired":"PT1M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collections","item":"https://daily.dev/sources/collections"},{"@type":"ListItem","position":3,"name":"Someone ported DOOM to SQL, for real this time"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3","comment":[{"@type":"Comment","text":"What’s next?","datePublished":"2026-09-27T05:48:56.385Z","url":"https://daily.dev/posts/AXm63QMx3#c-sQuAAvibX","author":{"@type":"Person","name":"Agustin Barrientos","url":"https://daily.dev/agustinbarrientos","image":"https://media.daily.dev/image/upload/s--5ayxQnqn--/f_auto/v1788281802/avatars/avatar_wQYYVe5Tbj0NJ7C7qPoa8?_a=BAMAMicg0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":4}},{"@type":"Comment","text":"When you have a lot of free time and a lot of credits to use you will get this kind of result.\nThis may show a great DB skill, however not effective in utilisation.\nThis kind of things is going to be increase in future","datePublished":"2026-09-28T04:23:11.643Z","url":"https://daily.dev/posts/AXm63QMx3#c-afm8SGaBH","author":{"@type":"Person","name":"Hardik","url":"https://daily.dev/hardik15","image":"https://media.daily.dev/image/upload/s--O0TOmw4y--/f_auto/v1715772965/public/noProfile"}},{"@type":"Comment","text":"89 CTEs to run DOOM. Finally, a query plan worth framing.","datePublished":"2026-09-28T09:42:10.358Z","url":"https://daily.dev/posts/AXm63QMx3#c-b9ioWoQQk","author":{"@type":"Person","name":"Risto Tõldsep","url":"https://daily.dev/ristotoldsep","image":"https://lh3.googleusercontent.com/a/ACg8ocLDWc6mZn0JwNmXXw6WY0L_HJ6pegzRttooC5VgtXESHSj3MNYx=s96-c"}},{"@type":"Comment","text":"just google search “DOOM on _” and you’ll always find a result.","datePublished":"2026-09-28T13:38:05.730Z","url":"https://daily.dev/posts/AXm63QMx3#c-sHaO2XCR2","author":{"@type":"Person","name":"Ezpie","url":"https://daily.dev/ezpie","image":"https://avatars.githubusercontent.com/u/104765117?v=4"}},{"@type":"Comment","text":"Of course they did…","datePublished":"2026-09-29T11:51:49.968Z","url":"https://daily.dev/posts/AXm63QMx3#c-cXwuTYR55","author":{"@type":"Person","name":"Daniel","url":"https://daily.dev/devmandan","image":"https://media.daily.dev/image/upload/s--ypn2TBF9--/f_auto/v1786619820/avatars/avatar_qDApMJOupymFKtjAmmtB4?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/someone-ported-doom-to-sql-for-real-this-time-axm63qmx3#faq","mainEntity":[{"@type":"Question","name":"How was DOOM implemented entirely in SQL?","acceptedAnswer":{"@type":"Answer","text":"WAD game data is stored in database tables, and rendering is handled through roughly 1,300 lines of SQL spread across 89 common table expressions, with the full project totaling around 4,000 lines of SQL. A small Python wrapper handles keyboard input, timing, and displaying the generated bitmap output. The team behind it is CedarDB, and the source is published on GitHub. Explore unconventional SQL engineering feats like this one on daily.dev."}}]}
```

