DOOMQL nació de una pregunta deliberadamente irrazonable: ¿y si SQLite fuera el motor del juego y no solo el lugar donde un juego guarda sus datos? El resultado es un pequeño Doom original en el que SQL controla el movimiento, las colisiones, los enemigos, el combate, la progresión y cada píxel RGB en pantalla.
El proyecto es obra de Peter Gostev, quien lo construyó apoyándose en GPT-5.6 Sol. El desarrollador Simon Willison lo destacó en su blog de enlaces el 13 de julio de 2026 y lo describió como "muy entretenido".
¿Cómo se juega DOOMQL?
Está implementado como un script de terminal en Python. Para probarlo basta con clonar el repositorio y ejecutarlo con uv:
cd /tmp
git clone https://github.com/petergpt/doomql
cd doomql
uv run host/doomql.pyEl corazón técnico está en una enorme consulta SQL que implementa un ray tracer completo dentro de SQLite usando una CTE recursiva. Es decir, el trazado de rayos que dibuja la escena en primera persona no ocurre en el código de la aplicación, sino en la propia base de datos.
Explorar el estado del juego con Datasette
Al ejecutar el script se crea una base de datos SQLite en /tmp/doomql/.doomql/doomql.sqlite, que se puede explorar con Datasette:
uvx --prerelease=allow --with datasette-apps datasette \
/tmp/doomql/.doomql/doomql.sqlite \
-p 4444 --root --secret 1 --internal internal.dbLa opción --with datasette-apps instala el plugin Datasette Apps, que permite crear aplicaciones HTML y JavaScript capaces de ejecutar consultas SQL directamente dentro de la interfaz de Datasette.
Willison creó una app nueva, pegó el prompt de copiar y pegar en Claude chat (Fable 5) y le pidió lo siguiente:
"Construye una app que muestre el estado actual de la pantalla usando la vista frame_pixels con sus columnas x, y, r, g, b. Que se refresque una vez por segundo."
El resultado fue una aplicación HTML y JavaScript funcional dentro de Datasette que reflejaba el estado del juego en tiempo real mientras se jugaba desde la terminal.

El código de la app HTML está disponible para pegarlo en cualquier instancia propia de Datasette y probarlo.


