DOOMQL: игру в стиле Doom реализовали целиком на SQL

Разработчик Питер Гостев сделал проект DOOMQL, оттолкнувшись от нарочито абсурдного вопроса: что если SQLite будет не просто хранилищем данных игры, а самим игровым движком? Игру он написал с помощью нейросети GPT-5.6 Sol. Результат, небольшой оригинальный Doom-подобный шутер, в котором SQL-запросы к SQLite отвечают буквально за всё: перемещение персонажа, столкновения, поведение врагов, бой, прогресс игрока и даже цвет (RGB) каждого пикселя на экране. Рендеринг сцены реализован как полноценный трассировщик лучей (ray tracer), написанный в виде одного огромного SQL-запроса с рекурсивным CTE (common table expression).
Технически игра оформлена как Python-скрипт для терминала: она запускается командой uv run host/doomql.py после клонирования репозитория с GitHub (github.com/petergpt/doomql). При запуске скрипт создаёт файл базы SQLite .doomql/doomql.sqlite, в который в реальном времени записывается состояние игры.
Технологический блогер Саймон Уиллисон (Simon Willison) не просто рассказал про проект, а лично его опробовал и пошёл дальше: он открыл ту же SQLite-базу инструментом Datasette с новым плагином Datasette Apps, который позволяет создавать собственные HTML+JavaScript-приложения, выполняющие SQL-запросы прямо внутри интерфейса Datasette. Уиллисон вставил в чат с Claude (модель Fable 5) заранее заготовленный «copy-paste prompt» из документации DOOMQL и попросил построить приложение, которое раз в секунду отображает текущее состояние экрана игры на основе представления (view) frame_pixels с колонками x, y, r, g, b. Claude сразу собрал рабочее HTML+JS-приложение, показывающее картинку игры прямо в Datasette, пока Уиллисон играл в неё в терминале. Одной дополнительной командой «add a minimap» он попросил добавить миникарту, и получил её.
Ключевые факты
- Питер Гостев создал DOOMQL, Doom-подобную игру, написанную с помощью GPT-5.6 Sol, в которой SQL-запросы к SQLite реализуют весь игровой движок: движение, столкновения, врагов, бой, прогресс и графику.
- Рендеринг сцены, полноценный трассировщик лучей, написанный как один SQL-запрос с рекурсивным CTE.
- Игра запускается как Python-скрипт в терминале (
uv run host/doomql.py) и при работе пишет состояние в файл SQLite. - Саймон Уиллисон открыл эту базу через Datasette с новым плагином Datasette Apps и с помощью Claude (Fable 5) за пару текстовых команд собрал HTML+JS-приложение, показывающее экран игры и миникарту в реальном времени.
- Код готового приложения и инструкции по повторению эксперимента доступны в блоге Уиллисона и репозитории проекта на GitHub.
Почему это важно
DOOMQL, наглядная демонстрация того, до какого абсурда (в хорошем смысле) можно довести идею «база данных как вычислительная среда»: SQL здесь не хранит игру, а является игрой. Одновременно это витрина возможностей современных ИИ-инструментов для кодинга, сама игра написана с помощью GPT-5.6 Sol, а рабочее приложение для её визуализации в Datasette Саймон Уиллисон собрал буквально двумя текстовыми командами в чате с Claude. Новый плагин Datasette Apps, который для этого потребовался, тоже расширяет возможности Datasette как площадки для быстрых пользовательских приложений поверх любой SQL-базы.
Кому это важно
Разработчикам и энтузиастам, которые интересуются нестандартным применением SQL и SQLite, пользователям и авторам плагинов Datasette, а также всем, кто следит за тем, что реально умеют делать современные модели-кодогенераторы вроде GPT-5.6 Sol и Claude при написании нетривиальных программ, от игрового движка до визуализации данных в реальном времени.
Как это применить
Проект открыт: код лежит в репозитории github.com/petergpt/doomql. Чтобы попробовать, нужно склонировать репозиторий и запустить uv run host/doomql.py, это создаст файл SQLite с состоянием игры. Дальше эту базу можно открыть командой uvx --prerelease=allow --with datasette-apps datasette /tmp/doomql/.doomql/doomql.sqlite -p 4444 --root --secret 1 --internal internal.db, которая поднимает Datasette с плагином Datasette Apps, после чего в интерфейсе можно создать собственное приложение на HTML+JavaScript, обращающееся к представлению frame_pixels, как это сделал Уиллисон с помощью Claude.
Можно ли доверять
Материал написан Саймоном Уиллисоном, известным разработчиком и автором Datasette, который лично воспроизвёл шаги (клонировал репозиторий, запустил игру, собрал приложение в Datasette) и привёл точные команды и код. Это хендс-он отчёт из первых рук со ссылкой на публичный репозиторий проекта, а не пересказ чужого анонса.
Риски и подводные камни
Это игровой эксперимент и демонстрация возможностей, а не production-инструмент: реализация игрового движка через рекурсивные SQL-запросы заведомо неэффективна и не претендует на практическую пользу, в этом и есть шутка идеи. Команда для запуска Datasette в примере использует флаги --root и --secret 1 (предсказуемый секрет), это нормально для локального одноразового эксперимента, но так нельзя оставлять сервис доступным извне или использовать в реальных проектах.
«DOOMQL начался с нарочито абсурдного вопроса: что если бы SQLite был не просто местом, где игра хранит данные, а самим игровым движком?»
— из описания проекта DOOMQL