SQLite Query Plans Now Explain Themselves

Simon Willison has shipped an interactive SQLite Query Explainer, a browser-based tool that takes the output of EXPLAIN and EXPLAIN QUERY PLAN and translates it into something a human can actually read. Willison built it after reading Julia Evans’ post “Learning a few things about running SQLite,” where she wrote: “Maybe one day I’ll learn to read a query plan.” His response, as he put it: “Big same.”

That’s the whole origin story. Someone admitted a gap out loud, and a tool appeared a few hours later.

What it actually does

The tool runs entirely in your browser. No server, no account, no upload. Here’s the stack Willison describes, and it’s a bit of a russian doll:

  • SQLite running in Python
  • Python running in Pyodide
  • Pyodide running in WebAssembly
  • All of it running in the browser tab

On top of that sits an explanation layer. You paste a query, it runs both EXPLAIN (the low-level bytecode SQLite generates) and EXPLAIN QUERY PLAN (the higher-level summary of how tables get scanned and joined), then annotates the output in plain language.

Willison says he had Fable build it, which fits his pattern of shipping small AI-assisted utilities fast and writing about them publicly.

Why query plans are worth understanding

A query plan is the database telling you exactly how it intends to answer your question. Full table scan or index lookup. Nested loop or hash join. Temporary B-tree for that ORDER BY or not.

The difference between a query that returns in 3 milliseconds and one that takes 30 seconds is almost always sitting right there in the plan. The problem is that SQLite’s raw output reads like assembly. Opcodes, register numbers, jump addresses. It’s precise and nearly unreadable if you don’t already know what you’re looking at.

That’s the gap this fills. Not new capability, just translation.

Availability and access

Free. Open in a browser and use it. Because everything executes client-side through WebAssembly, your queries and schema never leave your machine, which matters if you’re debugging something against production-shaped data.

No pricing tier, no waitlist, no signup mentioned.

The caveat Willison flags himself

This is the part worth reading twice. Willison is upfront about the limitation: “Approach with caution, since I don’t know enough about SQLite query plans to verify the results myself, but it seems cromulent enough to me.”

So the explanation layer is AI-generated and unverified by a query plan expert. It looks right. It hasn’t been audited. If you’re using this to make a real optimization decision on a production database, treat the output as a starting hypothesis and confirm with timings, not as authoritative documentation.

What stands out here is the honesty. Plenty of launches would bury that disclaimer. Willison leads with it.

Why this matters beyond SQLite

This is a small tool, but it’s a clean example of a pattern showing up everywhere right now: someone hits friction, describes it, and a working tool exists the same day. The build cost has collapsed to near zero for this class of utility.

The second thing worth noting is the architecture. Running a full database engine plus a Python runtime inside a browser tab used to be a research demo. Now it’s the boring choice for a weekend project, and it comes with real privacy benefits since nothing gets uploaded.

The third thing is the trade-off. Fast AI-assisted tools solve real problems and ship with real uncertainty baked in. The useful move isn’t to reject them or trust them blindly. It’s to know which parts you can verify and which parts you can’t, the way Willison did.

Expect more of these. Micro-tools built in an afternoon, free, single-purpose, published with a note about what the author couldn’t check. That’s the shape of a lot of developer tooling going forward.

Full details are in Simon Willison’s original post.

Scroll to Top