Datasette 1.0a27 released with major security improvements (modern CSRF headers), new RenameTableEvent for plugin compatibility, and various API enhancements including improved upsert handling and database locking fixes.
# Release: datasette 1.0a27 Source: https://simonwillison.net/2026/Apr/15/datasette/ Release datasette 1.0a27 (https://github.com/simonw/datasette/releases/tag/1.0a27)— An open source multi-tool for exploring and publishing data Two major changes in this new Datasette alpha. I covered the first of those in detail yesterday (https://simonwillison.net/2026/Apr/14/replace-token-based-csrf/) - Datasette no longer uses Django-style CSRF form tokens, instead using modern browser headers as described by Filippo Valsorda (https://words.filippo.io/csrf). The second big change is that Datasette now fires a new RenameTableEvent (https://docs.datasette.io/en/latest/events.html#datasette.events.RenameTableEvent) any time a table is renamed during a SQLite transaction. This is useful because some plugins (like datasette-comments (https://github.com/datasette/datasette-comments)) attach additional data to table records by name, so a renamed table requires them to react in appropriate ways. Here are the rest of the changes in the alpha: > - New `actor=` parameter (https://docs.datasette.io/en/latest/internals.html#internals-datasette-client-actor) for `datasette.client` methods, allowing internal requests to be made as a specific actor. This is particularly useful for writing automated tests. (#2688 (https://github.com/simonw/datasette/pull/2688)) - New `Database(is_temp_disk=True)` option, used internally for the internal database. This helps resolve intermittent database locked errors caused by the internal database being in-memory as opposed to on-disk. (#2683 (https://github.com/simonw/datasette/issues/2683)) (#2684 (https://github.com/simonw/datasette/pull/2684)) - The `/-/upsert` API (docs (https://docs.datasette.io/en/latest/json_api.html#tableupsertview)) now rejects rows with `null` primary key values. (#1936 (https://github.com/simonw/datasette/issues/1936)) - Improved example in the API explorer for the `/-/upsert` endpoint (docs (https://docs.datasette.io/en/latest/json_api.html#tableupsertview)). (#1936 (https://github.com/simonw/datasette/issues/1936)) - The `/.json` endpoint now includes an `"ok": true` key, for consistency with other JSON API responses. - `call_with_supported_arguments()` (https://docs.datasette.io/en/latest/internals.html#internals-utils-call-with-supported-arguments) is now documented as a supported public API. (#2678 (https://github.com/simonw/datasette/pull/2678))
Datasette 1.0a29 is released with new utility methods, UI improvements for empty tables, and bug fixes including a race condition resolved with help from Codex CLI.
Datasette 1.0a28 alpha release fixes compatibility bugs and resource management issues discovered in the previous alpha, including fixes for execute_write_fn() callbacks, database cleanup methods, and a new pytest plugin for automatic cleanup in tests.
Datasette 1.0a38 fixes a SQL injection vulnerability affecting instances that serve mixed public and private tables, with the fix also backported to Datasette 0.65.3.
Datasette 1.0a31 introduces the ability to execute write queries and save stored queries (renamed from canned queries) for users with appropriate permissions, enhancing data editing capabilities.