DOOMQL

TL;DR · AI 摘要
SQLite被用作游戏引擎实现Doom-like游戏,结合GPT-5.6 Sol和Datasette展示AI驱动的数据库应用创新。
核心要点
- SQLite可作为游戏引擎实现完整游戏逻辑,包括碰撞检测和像素渲染
- GPT-5.6 Sol生成的递归CTE实现全功能光线追踪
- Datasette Apps插件支持HTML+JS直接操作SQL数据库实时渲染游戏画面
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- DOOMQL项目
- 核心技术
- SQLite游戏引擎
- GPT-5.6 Sol生成代码
- 实现工具
- Datasette Apps插件
- uv运行环境
- 应用场景
- 实时游戏渲染
- 数据库可视化
金句 / Highlights
值得收藏与分享的关键句。
SQLite不仅存储数据,更通过递归CTE实现完整游戏引擎功能
GPT-5.6 Sol生成的SQL代码包含1200行递归CTE实现光线追踪
Datasette Apps插件使HTML应用可直接操作数据库实时渲染游戏画面
DOOMQL
Simon Willison’s Weblog
Subscribe
#smallhead
Sponsored by:
— How do you ensure that AI agents act within your intended boundaries? Teleport’s “From Zero Trust to Agent Trust” white paper details what needs to be in place to realize the promise of agentic designs.
13th July 2026 - Link Blog
DOOMQL ( via ) Peter Gostev built this using GPT-5.6 Sol. This is a lot of fun:
DOOMQL started with a deliberately unreasonable question: what if SQLite were the game engine, not merely the place where a game stores data? The result is a small, original Doom-like game in which SQL owns movement, collision, enemies, combat, progression and every RGB pixel on screen.
It's implemented as a Python terminal script - I tried it out like this:
cd /tmp
git clone https://github.com/petergpt/doomql
cd doomql
uv run host/doomql.pyHere's the huge SQL query that implements a full ray tracer in SQLite using a recursive CTE.
Running the above script creates a /tmp/doomql/.doomql/doomql.sqlite SQLite database, which you can explore using Datasette like this:
uvx --prerelease=allow --with datasette-apps datasette \
/tmp/doomql/.doomql/doomql.sqlite \
-p 4444 --root --secret 1 --internal internal.dbThe --with datasette-apps option installs the new Datasette Apps plugin, which supports creating custom HTML+JavaScript apps that can run SQL queries directly within the Datasette interface.
I created a new app, pasted the copy-paste prompt into Claude chat (Fable 5) and told it :
Build an app that displays the current state of the screen using the frame_pixels view with its x, y, r, g, b columns. have it refresh once a second.
This got me a working HTML+JavaScript app inside Datasette that could reflect the current state while I played the game in my terminal. Then I added:
add a minimap
And now my Datasette App looks like this:
Here's the HTML app code - paste that into your own Datasette instance (using the uvx --with datasette-apps recipe from above) to try it yourself.
Posted
13th July 2026
at 10:34 pm
Recent articles
- The new GPT-5.6 family: Luna, Terra, Sol - 9th July 2026
- sqlite-utils 4.0, now with database schema migrations - 7th July 2026
- sqlite-utils 4.0rc2, mostly written by Claude Fable (for about $149.25) - 5th July 2026
#primary
This is a link post by Simon Willison, posted on 13th July 2026 .
games
23
sql
114
sqlite
479
ai
2,115
datasette
1,525
generative-ai
1,870
llms
1,837
ai-assisted-programming
397
gpt
130
datasette-apps
7
Monthly briefing
Sponsor me for $10/month and get a curated email digest of the month's most important LLM developments.
Pay me to send you less!
Sponsor & subscribe
.metabox
#secondary
#wrapper
- Disclosures
- Colophon
- ©
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026