Simon Willison's AI-Augmented Datasette Ecosystem: Agent, Apps, and Plugins
What's new in v4
Three substantive new developments this pass. Datasette 1.0a35 (June 23) introduces schema-editing interfaces and formalizes the template context as a stable API until Datasette 2.0 [12], marking the most significant core Datasette release in this arc. Willison is investigating OPFS-based browser-native persistent SQLite editing in Datasette Lite, building a cross-browser compatibility playground with Claude Code [13]. A browser-compat-db project is the first explicit instance in this thread of Willison using two different AI tools — Claude Code and Codex Desktop (GPT-5.5) — on separate tasks within the same project [9], adding a new dimension to the mixed-AI tool pattern.
What
Simon Willison is building AI-native Datasette plugins (datasette-agent [1], datasette-apps [3], datasette-agent-charts [2]) while advancing Datasette core: version 1.0a35 adds Create and Alter table interfaces backed by a JSON API and formalizes a stable template context API for custom templates until Datasette 2.0 [12]. sqlite-utils 4.0rc1 adds a migrations system and nested transaction support [11]. Willison is exploring browser-native persistent SQLite editing in Datasette Lite via the Origin Private File System [13], and used a mixed Claude Code + Codex Desktop (GPT-5.5) workflow to build a browsable Mozilla browser compatibility database in Datasette Lite [9].
Why it matters
The project is a running case study of AI-augmented solo development covering security trade-offs, vibe coding productivity vs. understanding, and now mixed-AI tool division of labor. The potential addition of browser-native persistent SQLite editing to Datasette Lite would extend Datasette's reach beyond server-dependent deployments.
Open questions
Will OPFS-based persistent SQLite editing land in Datasette Lite, and which browsers support it reliably? [13]
Column provenance mapping — tracking which source table.column each result column derives from — was identified via three candidate approaches [6]. Which will land in the codebase?
The --unsafe flag in datasette-agent bypasses all write-approval prompts [1]. How will the project manage the tension between the default safety-prompt model and demand for frictionless database modification?
Willison used Claude Code for an implementation script and Codex Desktop (GPT-5.5) for the GitHub Actions workflow on the same project [9]. Does this represent a deliberate division of AI tools by task type, or opportunistic experimentation?
Narrative
Simon Willison has been building Datasette — an open-source tool for exploring and publishing SQLite databases — since 2017. In 2026 he has layered AI capabilities into the ecosystem through a set of LLM-powered plugins, while using AI tools extensively as development, security, and infrastructure instruments.
The AI-native plugin set includes four components. datasette-agent is a chat interface letting an LLM interact with Datasette through defined tools; version 0.3a0 added an execute_write_sql tool that prompts for user approval before any database modification, with an --unsafe flag for power users who want to bypass approvals entirely [1]. datasette-agent-charts extends the agent with chart generation [2]. datasette-apps provides sandboxed HTML+JavaScript applications inside iframes; apps interact with the database only through pre-approved parameterized stored queries, and CSP configuration is restricted to users holding a dedicated apps-set-csp permission, with an optional allowed_csp_origins allow-list for non-privileged users [3][4]. A security evaluation using Claude Fable 5 found a path where a low-privileged user could exfiltrate data from an administrator who visited a malicious app; Willison fixed the vulnerability before public release [3]. datasette-tailscale arrived at 0.1a0 using Python bindings for the experimental tailscale-rs Rust library to expose a local Datasette server over a Tailnet [5].
Willison uses multiple AI tools across the project. Claude Code (Opus 4.8) has been applied to implementation research — including a three-approach investigation of SQLite column provenance mapping [6] — infrastructure work via Cloudflare WAF configuration [7], and vibe coding: a full port of the Moebius 0.2B image inpainting model to browser WebGPU where Willison read none of the generated code [8]. He acknowledged the trade-off directly: delegating all code generation without reviewing output means not learning the underlying technologies. A browser-compat-db project demonstrated a mixed-AI workflow where Claude Code generated a Python conversion script and Codex Desktop (GPT-5.5) built the GitHub Actions workflow, producing a SQLite database of Mozilla browser compatibility data browsable in Datasette Lite [9]. He has also amplified the argument that MCP's core value is isolating auth flows outside the agent context window rather than integrating tools or skills [10].
Datasette core has advanced alongside the plugin work. sqlite-utils 4.0rc1 ported the sqlite-migrate package's migrations system into the library and added a db.atomic() context manager for nested SQLite transactions using savepoints [11]. Datasette 1.0a35 introduced Create and Alter table interfaces backed by a JSON API — covering columns, primary keys, types, NOT NULL constraints, defaults, and single-column foreign keys — and committed to a stable template context API for custom templates until Datasette 2.0 [12]. Willison is also investigating whether Datasette Lite, which runs the full Python Datasette application in the browser via Pyodide and WebAssembly, might support persistent SQLite editing using the Origin Private File System [13].
Timeline
- 2026-05-20: datasette-agent-charts 0.1a1 released, adding chart generation to the agent toolset. [2]
- 2026-05-21: datasette-agent initial launch announced on the Datasette blog. [14][15]
- 2026-06-10: datasette-agent 0.2a0 released. [16]
- 2026-06-13: Willison publishes research on mapping SQLite result columns to source table.column using Claude Code (Opus 4.8), surfacing three candidate approaches. [6]
- 2026-06-15: datasette-agent 0.3a0 released: adds execute_write_sql tool with user-approval prompt and --unsafe auto-approve flag. [1]
- 2026-06-15: datasette-apps 0.1a3: CSP origin configuration restricted to new apps-set-csp permission; fragment-link navigation bug fixed. [17][4]
- 2026-06-16: datasette-tailscale 0.1a0 released as early alpha, using Python bindings for the experimental tailscale-rs Rust library. [5][18]
- 2026-06-16: Willison configures a Cloudflare WAF CAPTCHA rule scoped to faceted-search URLs via Claude Code, noting MCP could not edit WAF rules directly. [7]
- 2026-06-18: Full Datasette Apps announcement: sandboxing architecture, Claude Fable 5's security evaluation finding a privilege-escalation vulnerability, and the stored-query write-access model. [3]
- 2026-06-19: Willison amplifies Sean Lynch's argument that MCP's core value is auth isolation outside the agent context window, not tool integration. [10]
- 2026-06-21: sqlite-utils 4.0rc1 released: adds a migrations system and a db.atomic() nested-transaction context manager; drops Python 3.8, adds Python 3.13. [11][19]
- 2026-06-22: Willison ports Moebius 0.2B image inpainting model to browser WebGPU using Claude Opus 4.8 as a vibe-coding collaborator, without reading any of the generated code. [8]
- 2026-06-23: Datasette 1.0a35 released: Create and Alter table interfaces backed by a JSON API; template context variables formalized as a stable API until Datasette 2.0. [12]
- 2026-06-23: Willison builds an OPFS + Pyodide playground using Claude Code to test browser-native persistent SQLite editing compatibility across browsers. [13]
- 2026-06-24: browser-compat-db created: Claude Code (Opus 4.8) wrote the conversion script and Codex Desktop (GPT-5.5) built the GitHub Actions workflow; database browsable in Datasette Lite. [9]
Perspectives
Simon Willison
Building AI-native Datasette plugins at a steady pace while advancing Datasette core to 1.0a35, using LLMs for implementation research, security review, infrastructure work, and vibe coding; now explicitly combining multiple AI tools in a single workflow.
Evolution: His AI tool use has expanded from Claude Code as a sole collaborator to a mixed workflow involving Claude Code and Codex Desktop (GPT-5.5) on the same project, while the Datasette plugin work continues to apply deliberate AI-assisted security review.
Sean Lynch (Hacker News commenter, amplified by Willison)
MCP's distinctive value is isolating auth flows outside the agent's context window; the idealized form of MCP might be a pure authentication gateway with no other functionality.
Evolution: First appearance in this thread; Willison's amplification signals he finds the framing relevant to his datasette-agent MCP architecture.
Claude Fable 5 (Anthropic model, used as security evaluator)
Identified a real privilege-escalation vulnerability in datasette-apps before public release, where a low-privileged user could exfiltrate data by tricking an administrator into visiting a malicious app.
Evolution: Treated as an authoritative security evaluator by Willison, who fixed the vulnerability on its finding. Subsequently banned by the US government, removing it as a future resource for this project.
Tensions
- Write-access safety vs. usability: datasette-agent's default model requires explicit user approval before any SQL write executes, but the --unsafe flag bypasses all prompts, giving power users frictionless database modification via chat at the cost of the safety guarantee. [1]
- Privilege stratification in CSP configuration: non-privileged users in datasette-apps can only select from an admin-curated allowed_csp_origins allow-list, while users with the apps-set-csp permission can configure arbitrary network and CSP origins. [4][3]
Status: active and growing
Sources
- [1] datasette-agent 0.3a0 — Simon Willison (2026-06-15)
- [2] Release: datasette-agent-charts 0.1a1 — reactive:datasette-agent-launch
- [3] Datasette Apps: Host custom HTML applications inside Datasette — Simon Willison (2026-06-18)
- [4] datasette-apps 0.1a2 — Simon Willison (2026-06-15)
- [5] datasette-tailscale 0.1a0 — Simon Willison (2026-06-16)
- [6] Mapping SQLite result columns back to their source `table.column` — Simon Willison (2026-06-13)
- [7] Cloudflare CAPTCHA on at least one ampersand — Simon Willison (2026-06-16)
- [8] Porting the Moebius 0.2B image inpainting model to run in the browser with Claude Code — Simon Willison (2026-06-22)
- [9] simonw/browser-compat-db — Simon Willison (2026-06-24)
- [10] Quoting Sean Lynch — Simon Willison (2026-06-19)
- [11] sqlite-utils 4.0rc1 adds migrations and nested transactions — Simon Willison (2026-06-21)
- [12] datasette 1.0a35 — Simon Willison (2026-06-23)
- [13] OPFS + Pyodide test harness — Simon Willison (2026-06-23)
- [14] Datasette Agent — reactive:datasette-agent-launch
- [15] Datasette Agent, an extensible AI assistant for Datasette - Datasette Blog — reactive:datasette-agent-launch
- [16] Release: datasette-agent 0.2a0 — reactive:willison-datasette-ai-tools
- [17] Release: datasette-apps 0.1a3 — reactive:willison-datasette-ai-tools
- [18] Release: datasette-tailscale 0.1a0 — reactive:willison-datasette-ai-tools
- [19] sqlite-utils 4.0rc1 — Simon Willison (2026-06-21)