sqlite-utils publishes 4.0rc1 release candidate for Python CLI library
Simon Willison released sqlite-utils 4.0rc1 on June 21, 2026, the first release candidate for major version 4 of his widely used Python CLI and library for working with SQLite databases. The RC adds a native database migrations system (absorbing the standalone sqlite-migrate plugin) and a db.atomic() context manager for nested transactions using SQLite savepoints. It also finalizes v4's backwards-incompatible changes flagged in earlier alphas, including switching auto-detected float columns from FLOAT to REAL and requiring db.view() instead of db.table() for SQL views. Willison is soliciting real-world testing via GitHub Issues and Discord before committing to a stable 4.0 release; no firm release date has been announced.
For practitioners who use sqlite-utils to script SQLite-backed data pipelines, notebooks, or ETL jobs, this release candidate closes two long-standing gaps: there was previously no built-in way to version schema changes, and multi-step write operations could silently commit an in-progress transaction. Both are now handled natively, which matters for anyone with scripts that batch-transform tables or deploy sqlite-utils-based tooling where schema drift needs to be tracked over time.
What happened
Simon Willison released sqlite-utils 4.0rc1 on June 21, 2026, the first release candidate for the library's v4 major version. sqlite-utils is Willison's combined Python library and CLI tool for working with SQLite databases, providing higher-level operations on top of Python's built-in sqlite3 module, including complex table transformations and automatic table creation from JSON data. The RC adds two significant new features beyond the earlier 4.0 alpha releases: a database migrations system and a db.atomic() nested-transaction context manager.
Technical context
The migrations system, defined via a new sqlite_utils.Migrations class, is a ported and slightly modified version of Willison's standalone sqlite-migrate package, which he is now folding directly into sqlite-utils after several years of production use in his LLM project and others. Migrations are defined as decorated functions in a migrations.py file and applied via sqlite-utils migrate or the Python API; the design deliberately excludes reverse migrations, requiring a new forward migration to undo mistakes. The db.atomic() context manager uses SQLite savepoints to support nested transactions, borrowing the "atomic" naming convention from Django and Peewee, and internal multi-step operations like table.transform() now use it to avoid unexpectedly committing a caller's in-progress transaction. Per the GitHub release notes, other changes include Database objects usable as context managers that auto-close connections, a fix for CSV/TSV files with only a header row crashing insert/memory commands, and a dependency bump to Click 8.3.1+.
For practitioners
Because 4.0 carries several backwards-incompatible changes accumulated across the 4.0a0 and 4.0a1 alphas (db.table() now only accesses tables, not views; auto-detected float columns now use REAL instead of FLOAT; upserts default to INSERT ... ON CONFLICT SET syntax), teams with existing sqlite-utils pipelines should test against 4.0rc1 before the final release rather than upgrading blind. Installing with pip install sqlite-utils==4.0rc1, or trying the CLI ad hoc via uvx --with sqlite-utils==4.0rc1 sqlite-utils --help, are both low-risk ways to validate compatibility.
What to watch
Willison is explicitly soliciting bug reports and real-world testing on the RC via GitHub Issues and the project's Discord before locking in the stable 4.0 release; no firm date for that release has been announced.
Key Points
- 1Simon Willison released sqlite-utils 4.0rc1, the first release candidate for the SQLite Python library's major v4 version.
- 2The RC adds a native database migrations system and a db.atomic() context manager for nested transactions via savepoints.
- 3Existing pipelines should test against several backwards-incompatible v4 changes, like FLOAT-to-REAL columns, before the final stable release.
Scoring Rationale
A substantive open-source release for a widely used Python/SQLite data-tooling library (2.1k GitHub stars) directly relevant to LDS's SQL/Python practitioner audience: native migrations and safe nested transactions are meaningful for anyone scripting SQLite-backed pipelines. Held at solid tier; not higher because it is a release candidate for a niche developer tool, not a broad industry event.
Sources
Primary source and supporting public references used for this report.
Practice interview problems based on real data
1,625 SQL & Python problems across 15 industry datasets — the exact type of data you work with.
Try 250 free problems
