<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/abusing-sql-to-play-doom-b7dbky6fv" -->

---
title: Abusing SQL To Play DOOM | daily.dev
description: A team at CedarDB ported the original DOOM to run in SQL, storing WAD data in database tables and implementing the renderer using 1300 lines of SQL spread...
canonical: https://daily.dev/posts/abusing-sql-to-play-doom-b7dbky6fv
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Abusing SQL To Play DOOM | daily.dev
og:description: A team at CedarDB ported the original DOOM to run in SQL, storing WAD data in database tables and implementing the renderer using 1300 lines of SQL spread...
og:url: https://daily.dev/posts/abusing-sql-to-play-doom-b7dbky6fv
og:image: https://api.daily.dev/og/posts/b7DbKy6FV.png
og:image:alt: Abusing SQL To Play DOOM
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.

# Abusing SQL To Play DOOM

**[Hackaday](https://daily.dev/sources/hackaday)** · 2 min read · 0 upvotes · 0 comments

## Summary

A team at CedarDB ported the original DOOM to run in SQL, storing WAD data in database tables and implementing the renderer using 1300 lines of SQL spread across 89 common table expressions. The full project totals around 4000 lines of SQL plus a bit of Python for handling keyboard input, timing, and displaying the generated bitmap. The source code is publicly available on GitHub, joining other novelty DOOM ports like ones built in regular expressions and Microsoft Word.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://hackaday.com/2026/09/25/abusing-sql-to-play-doom>

## Questions this post answers

### How did CedarDB manage to run DOOM using SQL queries?

They stored the WAD game data in database tables and implemented the renderer using roughly 1300 lines of SQL across 89 common table expressions, with the entire project totaling about 4000 lines of SQL. Python handled peripheral tasks like keyboard input, frame timing (targeting the original 35 fps), and displaying the generated bitmap output.

_Explore how far SQL's query language can be pushed on daily.dev if you enjoy unconventional uses of databases._

## Similar posts on daily.dev

- [DOOM Using Regular Expressions](https://daily.dev/posts/doom-using-regular-expressions-uerbiyzd2) · Hackaday · 70 upvotes · 13 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
- [GitHub - resumex/doom-over-dns: Play Doom entirely from DNS records. \(PowerShell 7\+\)](https://daily.dev/posts/github---resumex-doom-over-dns-play-doom-entirely-from-dns-records-powershell-7--d2obb9twi) · Hacker News · 15 upvotes · 1 comments

---

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

[View this post on daily.dev](https://daily.dev/posts/abusing-sql-to-play-doom-b7dbky6fv)

```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":"Abusing SQL To Play DOOM","url":"https://daily.dev/posts/abusing-sql-to-play-doom-b7dbky6fv","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/abusing-sql-to-play-doom-b7dbky6fv"},"datePublished":"2026-09-26T05:09:36.310Z","dateModified":"2026-09-26T05:10:15.725Z","description":"A team at CedarDB ported the original DOOM to run in SQL, storing WAD data in database tables and implementing the renderer using 1300 lines of SQL spread...","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":"Hackaday","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":"Hackaday","logo":"https://media.daily.dev/image/upload/s--JhDfhy70--/f_auto,q_auto/v1767541814/logos/hackaday","url":"https://daily.dev/sources/hackaday"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/abusing-sql-to-play-doom-b7dbky6fv","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"python,backend,sql","timeRequired":"PT2M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hackaday","item":"https://daily.dev/sources/hackaday"},{"@type":"ListItem","position":3,"name":"Abusing SQL To Play DOOM"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/abusing-sql-to-play-doom-b7dbky6fv#faq","mainEntity":[{"@type":"Question","name":"How did CedarDB manage to run DOOM using SQL queries?","acceptedAnswer":{"@type":"Answer","text":"They stored the WAD game data in database tables and implemented the renderer using roughly 1300 lines of SQL across 89 common table expressions, with the entire project totaling about 4000 lines of SQL. Python handled peripheral tasks like keyboard input, frame timing (targeting the original 35 fps), and displaying the generated bitmap output. Explore how far SQL's query language can be pushed on daily.dev if you enjoy unconventional uses of databases."}}]}
```

