Original: Simon Willison · 11/02/2026
Summary
Charles explains his discomfort with the sqlite3 implementation at length - that library provides two different variants neither of which exactly match the autocommit mechanism in SQLite itself. Charles Leifer has been maintaining pysqlite3 - a fork of the Python standard library’ssqlite3 module that makes it much easier to run upgraded SQLite versions - since 2018.
Key Insights
“Charles explains his discomfort with the sqlite3 implementation at length - that library provides two different variants neither of which exactly match the autocommit mechanism in SQLite itself.” — Discussing the motivation behind cysqlite’s development, focusing on transaction handling improvements.
“I’m particularly excited about the support for custom virtual tables.” — Highlighting the new features in cysqlite that are not present in sqlite3.
“I also learned that wheels like this have to be built for the emscripten version used by that edition of Pyodide.” — Sharing insights from the process of making cysqlite available as a WASM build for Pyodide.
Topics
Full Article
cysqlite - a new sqlite driver
Author: Simon WillisonPublished: 2026-02-11
Source: https://simonwillison.net/2026/Feb/11/cysqlite/#atom-everything
cysqlite - a new sqlite driver Charles Leifer has been maintaining pysqlite3 - a fork of the Python standard library’s
sqlite3 module that makes it much easier to run upgraded SQLite versions - since 2018.
He’s been working on a ground-up Cython rewrite called cysqlite for almost as long, but it’s finally at a stage where it’s ready for people to try out.
The biggest change from the sqlite3 module involves transactions. Charles explains his discomfort with the sqlite3 implementation at length - that library provides two different variants neither of which exactly match the autocommit mechanism in SQLite itself.
I’m particularly excited about the support for custom virtual tables, a feature I’d love to see in sqlite3 itself.
cysqlite provides a Python extension compiled from C, which means it normally wouldn’t be available in Pyodide. I set Claude Code on it (here’s the prompt) and it built me cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl, a 688KB wheel file with a WASM build of the library that can be loaded into Pyodide like this:
Wheel was built with Emscripten v3.1.46 but Pyodide was built with Emscripten v3.1.58 error.)
You can try my wheel in this new Pyodide REPL i had Claude build as a mobile-friendly alternative to Pyodide’s own hosted console.
I also had Claude build this demo page that executes the original test suite in the browser and displays the results:
Key Takeaways
Notable Quotes
Charles explains his discomfort with the sqlite3 implementation at length - that library provides two different variants neither of which exactly match the autocommit mechanism in SQLite itself.Context: Discussing the motivation behind cysqlite’s development, focusing on transaction handling improvements.
I’m particularly excited about the support for custom virtual tables.Context: Highlighting the new features in cysqlite that are not present in sqlite3.
I also learned that wheels like this have to be built for the emscripten version used by that edition of Pyodide.Context: Sharing insights from the process of making cysqlite available as a WASM build for Pyodide.
Related Topics
- [[topics/python-programming]]
- [[topics/webassembly]]
- [[topics/cython]]
- [[topics/sqlite]]
Related Articles
i ran Claude in a loop for three months, and it created a genz programming language called cursed
Geoffrey Huntley · explanation · 57% similar
Introducing the Codex app
Simon Willison · explanation · 56% similar
From Design doc to code: the Groundhog AI coding assistant (and new Cursor vibecoding meta)
Geoffrey Huntley · explanation · 56% similar
Originally published at https://simonwillison.net/2026/Feb/11/cysqlite/#atom-everything.