Release Notes
Added
- add a test for xfer optimization bug in sqlite (Pavan Nambi)
- Add regression test case for SQLite xfer optimization bug (Pavan Nambi)
- core/mvcc: Add regression test for DESC index scan under concurrent insert (Pekka Enberg)
- add proper benchmark names for create index benchmark functions (Pedro Muniz)
- bindings/rust: Dynamic auth token support for sync engine (Nikita Sivukhin)
- Make
WITHOUT ROWIDsupport experimental (Pekka Enberg) - add dbtest paper! (Alperen Keleş)
- testing/sqltests: Add regression test for self-referential trigger after ALTER TABLE RENAME (Pekka Enberg)
- testing: Add regression test for MVCC update on btree-only row (Pekka Enberg)
- testing: Add recovery-heavy MVCC profile in Whopper (Mikaël Francoeur")
- testing: Add recovery-heavy MVCC profile in Whopper (Mikaël Francoeur)
- sqlite3: implement sqlite3_stricmp and sqlite3_complete (Lucas Schwalm Silva)
- route FK NEW-image key reads through ColumnLayout (Mikaël Francoeur)
- Add regression tests for pager panic after savepoint rollback with overflow (Jussi Saurio)
- Add bind parameter support to Database API (Pekka Enberg)
- testing/sqltests: Add regression tests for "index cursor should have a record" bug (Jussi Saurio)
- tests/integration: Add regression test for
VACUUM INTOpanic (Jussi Saurio) - testing: Add regression tests for pragma_table_list() panic (Jussi Saurio)
- add tests for table-valued functions (Mikaël Francoeur)
- Add savepoint rollback DST coverage and fix rollback cache invalidation (Yassine Elyaakoub)
- add a tool to measure stack usage (Pedro Muniz)
- Implement PRAGMA foreign_key_list (Mikaël Francoeur)
- core: Add initial support of
vaccumop (Avinash Sajjanshetty) - concurrent-simulator: Add a coverage runner config (Pekka Enberg)
- core/translate:
UPDATE FROMsupport (Pekka Enberg) - core: support non-MVCC WITHOUT ROWID tables (Marc-André Moreau)
- ci: add stack size workflow (Pedro Muniz)
- bindings/python: Add SQLAlchemy asyncio dialect (Akira Noda)
- Add STRUCT and UNION composite types for STRICT tables (Glauber Costa)
- Bump activesupport from 7.2.3 to 7.2.3.1 in /examples/react-native (app/dependabot)
- Add Go driver sync example to examples (Preston Thorpe)
- core/connection: add a small helper to check if db is in-memory (Avinash Sajjanshetty)
- add some sqltests (Pavan Nambi)
- bindings/python: Add named parameter support (Akira Noda)
- docs: add multiprocess access to sql-reference (Preston Thorpe)
- fossier: add bot_policy = allow to prevent blocking dependabot (Preston Thorpe)
- Bump addressable from 2.8.8 to 2.9.0 in /examples/react-native (app/dependabot)
- add checkpoint flag for
perf/memory(Pedro Muniz) - core: Implement initial support for multi-process database access (Preston Thorpe)
- Introduce BTree constructor and RAII mutation guard (Mikaël Francoeur)
- add series blob profile in
perf/memory(Pedro Muniz) - Add CREATE DOMAIN / DROP DOMAIN support (Glauber Costa)
- Add README for the turso npm package (Glauber Costa)
- Add CREATE TABLE AS SELECT support (Glauber Costa)
- serverless/javascript: Interactive transaction support (Pekka Enberg)
- Fix encryption cipher mapping in promise API and add tests (Glauber Costa)
- fix: support bracket-quoted JSON path keys in json_extract (Srinivas A)
- Implement Temporary tables (Preston Thorpe)
- Add tests that we store canonical schema for attached db (Avinash Sajjanshetty)
- cli: sqlite-backed sqltests support for .schema and .tables (Rupesh Harode)
- Add npm packaging for Turso CLI (
npx turso) (Glauber Costa) - fix: enforce FK constraints on columns added via ALTER TABLE ADD COLUMN (Harin)
- Add SQLite TCL conformance tests to CI (Pekka Enberg)
- core/translate: Support compound SELECT in WHERE-clause subqueries (Pekka Enberg)
- bindings/rust: Allow passing custom IO implementation to Builder (Hugues Morisset)
- fix: implement .dbconfig dqs_dml to control double-quoted string fallback (Srinivas A)
- bindings/tcl: Add prepared statement cache and Tcl variable binding (Pekka Enberg)
- sqlite3: Implement
sqlite3_stmt_status(Pedro Muniz) - sqlite3: Implement
sqlite3_stmt_readonly(Pedro Muniz) - sqlite3: Implement
sqlite3_progress_handler+sqlite3_interrupt(Pedro Muniz) - add top 30 current contributors to the vouch file (Preston Thorpe)
- bindings/react-native: Add invalidate hook on iOS (Nikita Sivukhin)
- Add new benchmark in core for triggers (Preston Thorpe)
- core: Add read-only support for
locking_modepragma (Pekka Enberg) - core/connection: Improve
ATTACHto properly initialize fresh databases (Avinash Sajjanshetty) - core: Add unistr_quote(X) scalar function (Edward)
- core/translate: Add emit_table_column for transparent virtual column reads (Glauber Costa)
- Add TPC-C benchmark (Preston Thorpe)
- core: Implement PRAGMA full_column_names and short_column_names (Pekka Enberg)
- Add script to clean up old RC versions from PyPI (Pekka Enberg)
- Add statement origin tracking (Avinash Sajjanshetty)
- Sync add column idempotent replay (Nikita Sivukhin)
- bindings/javascript: Add per-connection and per-statement query timeout (Pekka Enberg)
- Add more tests for generated columns (Mikaël Francoeur)
- serverless: add query timeout support with AbortSignal (Pekka Enberg)
- core/translate: Implement ORDER BY NULLS FIRST/LAST (Glauber Costa)
- simulator: introduce yield injections 💉 for mvcc at safe resumable boundaries (Avinash Sajjanshetty)
- sqlite3: Add Diesel-required C API functions (phase 2: value lifecycle) (João Lucas)
- Add .NET support to README.md (Amodh Dhakal)
- testing/sqltests: Add named window function test cases (Mikaël Francoeur)
- Implement ALTER TABLE for virtual columns (Mikaël Francoeur)
- add unistr(X) scalar function (Edward)
- core/mvcc: add result to on_checkpoint_end (Pere Diaz Bou)
- implement generated columns (Mikaël Francoeur)
- Added VACUUM INTO tests with strict tables (Harin").)
- Support ROW_NUMBER() (Kumar)
- Support ROW_NUMBER() (Kumar Ujjawal").)
- Add test to ensure compaction after vaccum into (Edgar Latorre)
- sqlite3: support cache=shared for named in-memory URI databases (João Lucas)
- Add DEFAULT keyword support in INSERT VALUES expressions (Glauber Costa)
- core: implement ORDER BY for compound SELECT statements (Glauber Costa)
- Add Linux aarch64 and macOS x86_64 to Python wheel build targets in CI (Kilian Hu)
- Drop support for Python 3.9 and add Python 3.14 (Kilian Hu)
- test: add integration test for VACUUM INTO on encrypted databases #5851 (Ratnesh Mishra)
- Support ROW_NUMBER() (Kumar Ujjawal)
- translate: implement INDEXED BY (Jussi Saurio)
- perf: Implement Grace algorithm for hash joins to improve disk-spilling performance (Preston Thorpe)
- core/regex: Add non text data for pattern matchin in regexp (Vartan Babayan)
- sqlite3: implement URI filename parsing in sqlite3_open_v2 (João Lucas)
- refactor: Add typed enum for SortComparitorType to replace heap String (Preston Thorpe)
- Added VACUUM INTO tests with strict tables (Harin)
- sqlite3: add Diesel-required C API functions (phase 1) (João Lucas)
- docs: Removed unsupported macOS mold linker instructions (Amodh Dhakal)
- add mvcc repl (Mikaël Francoeur)
- perf/core/vdbe: add setters to Register to reuse the underlying allocation as much as possible (Jussi Saurio)
- Add graph query benchmark with complex multijoins (Jussi Saurio)
- fix(sqlite3): prevent sqlite3_initialize abort when tracing subscriber exists (João Lucas)
- Add quick output diffing script for AI agents (Jussi Saurio)
- translate/triggers: support subqueries in WHEN position (Preston Thorpe)
- fix: Support ON CONFLICT definitions for PRIMARY KEY and UNIQUE columns (Jussi Saurio)
- core: implement sqlite minmax optimization & unify simple agg handling & fix ordering cost model bug (Jussi Saurio)
- Add TLA+ specification for SQLite WAL mode transactions (Pekka Enberg)
- Add shuttle tests for MVCC scenarios (Avinash Sajjanshetty)
- optimizer: support IN (list / uncorrelated subquery) as driver of scan+seek (Jussi Saurio)
- Add instructions on how to run elle locally (Avinash Sajjanshetty)
- Rewrite NEW/OLD inside nested trigger subqueries (Kumar Ujjawal)
- Add PRAGMA to require UPDATE/DELETE queries to have a WHERE clause (Avinash Sajjanshetty)
- docs: add CLI reference (getting started, options, shell commands) (Glauber Costa)
- core/translate: Fix sqlite_sequence table initialization (Preston Thorpe)
Updated
- core/mvcc: Ensure committed timestamp watermark is monotonic (Avinash Sajjanshetty)
- core/mvcc: publish schema roots after checkpoint pager commit (Avinash Sajjanshetty)
- concurrent-simulator: give reopen drain its own budget (Pekka Enberg)
- Sync engine update pull time (Nikita Sivukhin)
- concurrent-simulator: bound reopen drain loop with max_steps (Pekka Enberg)
- update discord link in fossier workflow (Preston Thorpe)
- core/vacuum: reenable disabled vacuum tests (Avinash Sajjanshetty)
- github: Pin nyrkio/change-detection to commit SHA (Pekka Enberg)
- github: Pin cargo-bins/cargo-binstall to commit SHA (Pekka Enberg)
- github: Pin PThorpe92/fossier to commit SHA (Pekka Enberg)
- bindings/rust: expose experimental_index_method on sync Builder (Mark Hinshaw)
- core/mvcc: Deduplicate row versions by arc pointer and leave write set in transaction (Mikaël Francoeur)
- Stabilize self-reading WHERE subqueries (Kumar Ujjawal)
- core/io: improve io_uring IO backend by removing serialization (Preston Thorpe)
- core/mvcc: remove clone of write_buf in logical log (Pere Diaz Bou)
- bindings/tcl: accumulate rows across statements in
db eval(Pekka Enberg) - core/schema: always get db id specific indices (Avinash Sajjanshetty)
- core/mvcc: clean up faulted auto-checkpoints (Jussi Saurio)
- core/fts: always load pager from db index (Avinash Sajjanshetty)
- update production readiness FAQ to reflect current state (Glauber Costa)
- core/vdbe: Shift IndexColumn.expr column refs after DROP COLUMN (Mikaël Francoeur)
- core/mvcc: few perf improvements in write path (Pere Diaz Bou)
- bench: create index on big table with mvcc (Pere Diaz Bou)
- build(deps): bump openssl from 0.10.78 to 0.10.79 (app/dependabot)
- bindings/javascript: Make Database.prepare() return a promise (Pekka Enberg)
- Refresh cached sql when renaming columns (Mikaël Francoeur)
- rewrite expression-index keys on RENAME COLUMN (Mikaël Francoeur)
- core/vdbe: Prevent BEGIN IMMEDIATE with existing BEGIN CONCURRENT (Mikaël Francoeur)
- split
translate_exprcode into separate files (Pedro Muniz) - core/io: Respect pwrite() and pwritev() size limit (Pekka Enberg)
- core/mvcc: skip redundant eq-only seek during range deletes (Mikaël Francoeur)
- core/vdbe: Allow users specify vacuum temp dir path (Avinash Sajjanshetty)
- build(deps-dev): bump js-yaml from 3.14.1 to 3.14.2 in /testing/conformance/javascript (app/dependabot)
- build(deps-dev): bump postcss from 8.5.6 to 8.5.13 in /examples/javascript/database-wasm-vite (app/dependabot)
- serverless/javascript: preserve zero lastInsertRowid (Akira Noda)
- core/vdbe: propagate yield-completions across nested-statement IO yields (Mikaël Francoeur)
- optimizer: Properly use partial indexes for more query plans (Preston Thorpe)
- docs: update vacuum and multiprocess status in compat.md (Avinash Sajjanshetty)
- iterate schema rows in order in recovery (Mikaël Francoeur)
- build(deps-dev): bump postcss from 8.5.6 to 8.5.12 in /examples/javascript/sync-wasm-vite (app/dependabot)
- build(deps): bump tar-fs from 2.1.3 to 2.1.4 in /bindings/javascript/perf (app/dependabot)
- core/IO: remove unnecessary Mutex on File IO (Preston Thorpe)
- deps: upgrade tantivy and make default feature in sdk-kit (Preston Thorpe)
- Make file lock FreeBSD compatible (Alexandr Jeliuc)
- build(deps): bump tar-fs from 2.1.3 to 2.1.4 in /testing/conformance/javascript (app/dependabot)
- Move JavaScript conformance tests (Pekka Enberg)
- core/translate: UPDATE OR REPLACE conflict delete should not increment changes() (Ethan Balakumar)
- core/mvcc: allow speculative reads in is_btree_invalidating_version (Pere Diaz Bou)
- core/translate: Rewrite row payload when ALTER COLUMN changes affinity (Pekka Enberg)
- core/storage: Clear stale overflow-read state and return corrupt on mismatch (ongyimeng)
- Improve Turso database sync (Nikita Sivukhin)
- sim: verify table contents after REOPEN_DATABASE fault (Ben Zaid)
- core/io: improve windows IO back-end (Preston Thorpe)
- Refactor
ProgramStateopcode state into single enum + Box commit state machines (Pedro Muniz) - Complete Windows multiprocess WAL port (Marc-André Moreau)
- core/translate: reduce stack usage by boxing (Pere Diaz Bou)
- core/storage: Reset syncing flag when sync submission fails (Pekka Enberg)
- build(deps): bump openssl from 0.10.75 to 0.10.78 (app/dependabot)
- Bump pygments from 2.19.1 to 2.20.0 (app/dependabot)
- core/connection: consolidate usage of
is_memory_likeandis_memory_path(Avinash Sajjanshetty) - Bump glob from 10.4.5 to 10.5.0 in /serverless/javascript (app/dependabot)
- core/vdbe: Transform root_page in MVCC for open read index (Pere Diaz Bou)
- Bump requests from 2.32.5 to 2.33.0 (app/dependabot)
- Bump bytes from 1.11.0 to 1.11.1 (app/dependabot)
- core/connection: Prevent DETACH on databases with active transactions (Yassine Elyaakoub)
- Compute virtual columns in topological order to avoid double-evaluation (Mikaël Francoeur)
- never overwrite virtual columns with NULL (Mikaël Francoeur)
- Bump json from 2.18.0 to 2.19.2 in /examples/react-native (app/dependabot)
- Update rand crate to 0.9.4 (Pekka Enberg)
- Compute virtual columns when checking deferred FKs (Mikaël Francoeur)
- perf/latency: Remove stale Cargo.lock files (Pekka Enberg)
- Honor USING deduplication in outer query refs (Jussi Saurio)
- Use correct statement origin for pragma vtab helpers (Jussi Saurio)
- Bump rustls-webpki from 0.103.8 to 0.103.13 (app/dependabot)
- Bump time from 0.3.41 to 0.3.47 (app/dependabot)
- Update drizzle-orm package (Pekka Enberg)
- github: Switch macOS runners to Blacksmith (Pekka Enberg)
- sqlite3: Expose sqlite3_search_count to TCL test harness (Pekka Enberg)
- core/translate: Handle transitive unique constraints on upserts (Mikaël Francoeur)
- core/translate: Make
BitSetstruct generic (Mikaël Francoeur) - bindings/javascript: Replace Promise<any> with proper TableColumn[] type (ericfjl)
- Update reqwest crate (Pekka Enberg)
- core/translate: Avoid reallocating TableReferences on extend (Pedro Muniz)
- bindings/javascript: Make Database.prepare() return a promise (Pekka Enberg)
- core: minor refactoring and slop-removal (Preston Thorpe)
- Update pytest to 9.0.3 (Pekka Enberg)
- Compute and cache generated column dependencies eagerly (Mikaël Francoeur)
- Update rand crate to 0.8.6 (Pekka Enberg)
- Update rand crate (Pekka Enberg")
- Update better-sqlite3 (Pekka Enberg)
- Update rich dependency (Pekka Enberg)
- Reduce allocations in multi-index analysis optimizer (Pedro Muniz)
- Update rand crate (Pekka Enberg)
- testing/javascript: regression test for stale query timeout guards (Pekka Enberg)
- replace container types with BitSet (Mikaël Francoeur)
- core/translate: remove some clones (Pere Diaz Bou)
- testing/javascript: Update ava package version (Pekka Enberg)
- Update oneshot crate (Pekka Enberg)
- replace HashSet<usize> with ColumnMask (Mikaël Francoeur)
- update fossier config (Preston Thorpe)
- Evict stale cursor after btree_destroy during mvcc checkpoint (Harin)
- Minor virtual column improvements (Mikaël Francoeur)
- compute before image for virtual columns (Mikaël Francoeur)
- core/vdbe: refactor
vacuum intostate machine (Avinash Sajjanshetty) - use key register for virtual column evaluation (Mikaël Francoeur)
- replace TableMask with BitSet (Mikaël Francoeur)
- ci: restrict PR labeler to main branch (Glauber Costa)
- Enforce NOT NULL when updating virtual columns (Mikaël Francoeur)
- core/mvcc: Serialize schema rows before data rows in MVCC logical log (Pere Diaz Bou)
- Allow
VACUUM INTOon attached databases (Vartan Babayan) - build example app in CI (Nikita Sivukhin)
- core/translate: Enforce FK constraints on virtual generated columns with UNIQUE INDEX (Mikaël Francoeur)
- core/mvcc: Make MVCC encryption less memory hungry with chunking (Avinash Sajjanshetty)
- Enable fts in sdk-kit (Preston Thorpe)
- cli: includes trigger in .schema like SQLite (Rupesh Harode)
- core/mvcc: Pre-fetch record in delete() to avoid IO re-entrancy (Pekka Enberg)
- core/translate: Track scope depth in outer query references (Pekka Enberg)
- Update tar to 7.5.13 (Pekka Enberg)
- bindings/rust: discard local sync server child stdio in tests (Pekka Enberg)
- Update vite to 7.3.2 (Pekka Enberg)
- Update lz4_flex to 0.11.6 (Pekka Enberg)
- Update rollup to 4.60.1 and picomatch to 4.0.4 (Pekka Enberg)
- Update lodash to 4.18.1 (Pekka Enberg)
- core: Drop
DATABASE_MANAGERlock after lookup (Pedro Muniz) - Empty result callbacks pragma (Pekka Enberg)
- bindings/tcl: Enable generated columns (Pekka Enberg)
- core/translate: Validate NOT NULL constraints on virtual generated columns in integrity_check (Mikaël Francoeur)
- parser: Reject "#" as illegal token (Pekka Enberg)
- core/vdbe: Trigger performance optimizations (Preston Thorpe)
- Improve savepoint verification (Pekka Enberg)
- core/mvcc: Recover insert-delete cycles in sqlite_schema table (Mikaël Francoeur)
- core: Clean up ephemeral temp files (H0TB0X420)
- perf/memory: Memory usage benchmark (Pedro Muniz)
- github: Fossier integration for reducing potential AI slop PRs (Preston Thorpe)
- core/translate: Apply declared collation of virtual generated columns in WHERE (Glauber Costa)
- core: Switch to file ID for database registry mapping (Pekka Enberg)
- core/mvcc: Enable encryption with MVCC (Avinash Sajjanshetty)
- github: Publish .Net bindings to NuGet (Amodh Dhakal)
- c-api: handle null statement ptr in sqlite3_reset (Preston Thorpe)
- make OnSerializationComplete Callback return a
Result<()>(Pedro Muniz) - Validate version in update-versions.py (Mikaël Francoeur)
- core/translate: Allow duplicate table aliases, detect ambiguity at column resolution (Pekka Enberg)
- Convert Python bindings to declarative PyO3 module syntax (Kilian Hu)
- core/vdbe: Regenerate SQL when altering column with triggers (Preston Thorpe)
- core: Represent MonotonicInstant as u128 (Elina)
- translate/upsert: use emit_column_or_rowid for DO UPDATE row snapshot (ongyimeng)
- core/translate: Allow trigger names their own namespace (Preston Thorpe)
- return Result from Logical Log checkpoint callbacks (Pedro Muniz)
- testng/sqltests: Update window-over-grouped snapshot after aggregate order change (Pekka Enberg)
- core/translate: plan correlated subqueries at correct scope during window restructuring (Flanderzz)
- Update COMPAT.md (Pekka Enberg)
- Preserve rowid values in VACUUM INTO output (Kumar)
- update napi-rs and js deps to latest versions (Nikita Sivukhin)
- core/translate: Reject negative and out-of-range ORDER BY column indices (Pekka Enberg)
- Strengthen VACUUM INTO coverage for partial and mixed indexes (Kumar Ujjawal)
- core/translate: Handle ORDER BY/GROUP BY +N as column index reference (Pekka Enberg)
- core/translate: Reject misuse of aggregate functions in ORDER BY (Pekka Enberg)
- Upgrade PyO3 to 0.28.2 and maturin to 1.12.6 (Kilian Hu)
- Reject outer-scope refs in GROUP BY subquery trees (Kumar Ujjawal)
- core: Adapt null handling in json_string_to_db_type (Patrick Pichler)
- simulator: gracefully rollback when a dependent txn aborts (Avinash Sajjanshetty)
- storage/wal: minor refactoring to prep for multi-process (Preston Thorpe)
- Local sync server no checkpoint (Nikita Sivukhin)
- disable auto checkpoint for connections in sync engine (Nikita Sivukhin)
- core/translate: avoid
BETWEENexplosion in partial index (Duy Dang) - Preserve rowid values in VACUUM INTO output (Kumar Ujjawal)
- rename
testing/runner->testing/sqltests(Pedro Muniz) - core/translate: prevent dropping columns referenced by triggers (Preston Thorpe)
- Rust Bindings: remove unnecessary String allocations using
Cow(Fahd Ashour) - Preserve cached expression collations without leaking aggregate/window state (Kumar Ujjawal)
- Apply column affinity in WHEN register comparisons (Kumar Ujjawal)
- Hide deleted rows from reverse secondary index scans (Kumar Ujjawal)
- Reset DISTINCT aggregate state in correlated subqueries (Kumar Ujjawal)
- core/stroage: Make buffer pool/slot bitmap lock-free (Preston Thorpe)
- deps: replace unmaintained
pastewithpastey(Ulrich Hornung) - core/translate/perf: avoid redundant Copy instructions for cached aggregate args (Jussi Saurio)
- core/translate: allow some datetime functions as expr indexes (Preston Thorpe)
- Natural joins fallback to cross join if no common columns (Gaurav Sarma)
- Reject unusable hidden-arg constraints in json_each/json_tree (Kumar Ujjawal)
- core/translate/perf: GROUP BY - deduplicate column reads and shrink sorter size (Jussi Saurio)
- Optimizer spring cleaning (Jussi Saurio)
- translate/insert: Halt directly on FK conflict for single INSERT (Preston Thorpe)
- core/mvcc: encryption plumbing for MVCC logical log (Avinash Sajjanshetty)
- optimizer: rework CTE materialization logic and subquery cost estimation (Jussi Saurio)
- core/translate: Rewrite trigger bodies on ALTER TABLE ddl stmts (Preston Thorpe)
- Harden sqlite_schema predicates for quoted identifiers (Kumar Ujjawal)
- core/mvcc: checkpoint and log serialization callbacks (Pere Diaz Bou)
- parser/triggers: Reject RETURNING inside of trigger bodies (Preston Thorpe)
- Adjust PR template (Preston Thorpe)
- core/translate: Enable CROSS JOINs (Preston Thorpe)
- optimizer: restructure access path selection to unify single-index and multi-index paths (Jussi Saurio)
- Remove weird test that accepted views referencing attached dbs, but only in tursodb (Jussi Saurio)
- core/mvcc: Log
begin_tswhen a txn is started (Avinash Sajjanshetty) - core/translate: Disallow cross-database view definitions (Flanderzz)
- core/translate: Rename in-memory autoindex names on schema changes (Preston Thorpe)
- return columns with correct casing (Mikaël Francoeur)
- Eliminate sort when composite index satisfies ORDER BY (David Matějka)
- perf: only use statement subjournal when it is actually required (Jussi Saurio)
- core/mvcc: injectable DurableStorage trait for mvcc storage (Pere Diaz Bou)
- Reject unreferenced CTE qualified columns without panic (Kumar Ujjawal)
- Arrays (Glauber Costa)
- compat: deny bare columns in
TRIGGERWHENclause (Pedro Muniz) - turso-serverless/compat: Serialize concurrent execute() calls with AsyncLock (Pekka Enberg)
- core/mvcc: Disable no-op update optimisation (Avinash Sajjanshetty)
- core/translate: main_loop refactor (Preston Thorpe)
- enable triggers in differential fuzzer (Pedro Muniz)
- go: use uintptr to exclude pointers from garbage collection (Piotr Sarna)
- Bag of little perf tunings (Jussi Saurio)
- core: Optimize prepared statement recompilation check (Jussi Saurio)
- Optimize step() (Pekka Enberg)
- Remove experimental flag from triggers, enable by default (Preston Thorpe)
- Antithesis longer weekend run (Mikaël Francoeur)
- optimizer: some finetuning for statsless heuristics + improve EXPLAIN QUERY PLAN (Jussi Saurio)
- core/vdbe: Pass &Arc<Pager> instead of Arc<Pager> to Program::step() (Pekka Enberg)
- Preserve explicit LIMIT 0 in scalar subqueries instead of forcin… (Vartan Babayan)
- serverless: Serialize concurrent execute() calls on a connection (Pekka Enberg)
- core/mvcc: Remove test_batch_writes test case (Pekka Enberg)
- bindings/rust: Use the proper Column decl_type (Preston Thorpe)
- Validate sqlite_schema before AUTOINCREMENT schema writes (Kumar Ujjawal)
Fixed
- Fix breaking test with a diff yield point (Avinash Sajjanshetty)
- Fix MVCC lock leaks (Jussi Saurio)
- Switch to debug-level logging (Pekka Enberg)
- core/translate: Fix RENAME COLUMN rewriting ORDER BY alias references in triggers (Pekka Enberg)
- core/translate: fix UNION ALL dropping result columns when IN subquery present (Preston Thorpe)
- core/translate: fix hash joins emitting incorrect cross products (Preston Thorpe)
- windows: fix failing tests and disable some (Avinash Sajjanshetty)
- core/mvcc: fix stale MVCC checkpoint bounds (Avinash Sajjanshetty)
- github: Fix broken Rust workflow (Avinash Sajjanshetty)
- core/mvcc: fix MVCC insert preserving stale B-tree cursor residency (Avinash Sajjanshetty)
- core/storage: Fix savepoint rollback under cache pressure (Pedro Muniz)
- core/storage: Fix WAL savepoint rollback on stale snapshot (Pedro Muniz)
- fix/optimizer: resolve indexes per table reference, not by table name (fixes attach) (Jussi Saurio)
- fix intendation rust workflow (Pavan Nambi")
- fix intendation rust workflow (Pavan Nambi)
- docs: fix javascript documentation reference (Josh Lyon)
- core: Fix various gencol affinity test failures (Mikaël Francoeur)
- Fix DELETE panic for indexed virtual generated columns (Mikaël Francoeur)
- fix(update): populate chained virtual gen col registers before index rebuild (Mikaël Francoeur)
- core/translate: Fix
GROUP BYinfinite loop (H) - fix: UPDATE skips rows when an FK cascade trigger mutates the target table mid-statement (Jussi Saurio)
- core/translate: Fix panic in window-to-subquery rewrite with multiple window functions (Jussi Saurio)
- core/translate: Fix stale indexes on ALTER COLUMN on virtual generated columns (Jussi Saurio)
- core/storage: Fix pager panic with AFTER INSERT trigger (Jussi Saurio)
- core/vdbe: Fix stale column name in trigger body after column rename (Jussi Saurio)
- core: Fix cast numeric (Jean Arhancet)
- core/translate: fix missing affinity for IN with compound subquery (Hossam Khero)
- core/vdbe: Fix AVG() function precision for large integers (Hossam Khero)
- Fix sync checkpoint bug (Nikita Sivukhin)
- core/schema: expose corrupt error instead of unwrapping malformed catalog (Preston Thorpe)
- Fix race in sdk-kit preventing multiprocess access from bindings (Preston Thorpe)
- Fix UPDATE Halloween bug for mutable index scans (Mikaël Francoeur)
- core/mvcc: Fix pager read lock panics after BEGIN DEFERRED then BEGIN CONCURRENT (Artur Kantorczyk)
- JavaScript conformance test fixes (Pekka Enberg)
- core/storage: fix WAL savepoint rollback corruption after cache spill (Ben Zaid)
- bindings/go: Fix named parameter binding (Glauber Costa)
- translate/refactor: remove resolve_label() footgun (Jussi Saurio)
- serverless/javascript: Fix prepare() losing transaction baton (Glauber Costa)
- Fix infinite loop on INSERT with two partial indexes (Jussi Saurio)
- serverless/javascript: Fix empty blob decoding returning
null(Glauber Costa) - parser: Fix parameter column names to match SQLite behavior (Glauber Costa)
- serverless/javascript: Fix empty blobs and falsy rowids (Glauber Costa)
- Fix INSERT OR IGNORE incorrectly rejecting omitted NOT NULL column (Ethan Balakumar)
- core/vdbe: Fix string truncation for substr() and like (Rohith Suresh)
- Fix MVCC integrity_check false positives when stale dropped-root bookkeeping overlaps with live schema rootpages (Preston Thorpe)
- core/translate: Fix out of bounds caused by spurious covering index (Mikaël Francoeur)
- Fix compatibility issues with Toasty (Glauber Costa)
- Fix perf_nightly.yml (OpenByte)
- core/translate: Fix concat() function error message (Pekka Enberg)
- Misc build fixes (Jussi Saurio)
- Fix CTE sharing decisions for correlated subqueries (Jussi Saurio)
- core/translate: Fix integrity check panic (Mikaël Francoeur)
- vdbe: Fix bug blocking pager IO incorrect/duplicate instance (Preston Thorpe)
- Fix npm publish workflow asset name mismatch (Glauber Costa)
- core/translate: Fix UPDATE rowid with indexed generated column (Mikaël Francoeur)
- core/translate: fix UPDATE with FK when virtual generated column precedes non-rowid-alias PK (Mikaël Francoeur)
- Expression index and integrity check fixes. (Glauber Costa)
- translate: fix incorrect immediate FK violation when REPLACE restores a parent with the same key (Jussi Saurio)
- translate: fix deferred FK violation counting (Jussi Saurio)
- fix: allow dropping user-created UNIQUE indexes (#6359) (Srinivas A)
- Fix trigger change accounting (Kumar Ujjawal)
- Fix deferred FK mismatch on savepoint release (Pedro Muniz)
- Fix Javascript examples by using
awaitwhile executing stuff (aryaveersr) - MVCC stale row version fix during Checkpoint (Pedro Muniz)
- Fix DELETE with index generated column (Mikaël Francoeur)
- cli: Fix ".tables" to include views like in SQLite (Rupesh Harode)
- core/translate: Fix GROUP BY out-of-range error message to say "GROUP BY" (Pekka Enberg)
- deps: Bump aegis to 0.9.8 to fix build with clang 22 (Preston Thorpe)
- fix: unhex(X, Y) ignores separator characters inside the input (Rupesh Harode)
- Use dist precise-builds to fix release CI (Mikaël Francoeur)
- core/translate: Fix INSERT column-count mismatch error message to match SQLite (Pekka Enberg)
- Fix/6078 join limit offset false corruption (H0TB0X420)
- Fix lack of reproducibility in builds (Mike Marcacci)
- core: resolve compound SELECT ORDER BY against all constituent SELECTs (Pekka Enberg)
- parser: match SQLite error messages for parse errors (Pekka Enberg)
- core/storage: Fix savepoint rollback for dirty pages (ongyimeng)
- fix: mark expression-index columns in col_used_mask during UPDATE planning (Mikaël Francoeur)
- sync engine: INFO -> DEBUG, turso_core: DEBUG -> INFO (Nikita Sivukhin)
- core/vdbe: fix wasm compatibility by making schema parsing re-entrant (Preston Thorpe)
- fix: enforce CHECK constraints on virtual/generated columns (Mikaël Francoeur)
- core/pragma: fix treating busy_timeout incorrectly as write transaction (Preston Thorpe)
- Fix column quoting issues (Mikaël Francoeur)
- Fix Mixed Case AutoIncrement Leaving Stale SQLite Sequence ROws (Zaid Humayun)
- Fix: BEFORE UPDATE trigger panics on UPDATE with falsey TEXT literal (Amodh Dhakal)
- Fix aggregate bare columns returning stale values when 0 rows match WHERE (Glauber Costa)
- core/translate: Fix column names of unaliased expressions (Pekka Enberg)
- core/translate: Fix upsert ignored when PK has ON CONFLICT IGNORE (Mikaël Francoeur)
- core/translate: Match SQLite error format for ambiguous column names (Pekka Enberg)
- Fix CI sccache setup to gracefully handle network failures (Pekka Enberg)
- sdk-kit: Fix Database.close() not finalizing statements (Pekka Enberg)
- core/translate: Propagate error from function resolution (Pekka Enberg)
- bindings/tcl: Fix turso_tcl.c compilation (Pekka Enberg)
- bindings/javascript: Fix Database.close() not finalizing statements (Pekka Enberg)
- core/translate: Fix AUTOINCREMENT handling of BEFORE INSERT triggers (Preston Thorpe)
- Fix unsound ON CONFLICT handling by restructuring it (Jussi Saurio)
- core/mvcc: Fix abandoned transactions leaving their effects (Avinash Sajjanshetty)
- fix agg functions panic on extreme float values (Alberto Moretti)
- core/translate: Prevent CREATE VIEW and CREATE MATERIALIZED VIEW using reserved name prefixes (Vartan Babayan)
- core/translate: Fix GROUP BY alias resolution precedence (Alberto Moretti)
- fix: strip JSON subtypes at subquery/view boundaries (V. Can Keklik)
- MATCH operator on non-FTS tables should error (Gaurav Sarma)
- fix obvious mixup with global atomic in buffer pool (Preston Thorpe)
- fix: last_insert_rowid() corrupted by INSERTs inside trigger bodies (Preston Thorpe)
- core/json: Fix json_array_length(NULL) returns 0 instead of NULL (Artur Kantorczyk)
- core/mvcc: Fix speculative delete conflict (Avinash Sajjanshetty)
- fix dumb test bug (Jussi Saurio)
- core/vdbe: Fix
unicode(char(0))to return NULL (Artur Kantorczyk) - perf/translate: more optimizer bugfixes (Jussi Saurio)
- fix(sqlite3): use-after-free in sqlite3_value_blob (João Lucas)
- core/translate: Fix subquery evaluation timing (Preston Thorpe)
- fix: replace possible NULL value in user provided rowid in BEFORE INSERT triggers (Preston Thorpe)
- fix: unescape JSON string escape sequences in JSON_EXTRACT and ->> operator (Mikaël Francoeur)
- fix: BEFORE INSERT trigger sees raw values without column type affinity (Preston Thorpe)
- fix: Outer statement conflict resolution not propagated to trigger body (Preston Thorpe)
- fix: BEFORE UPDATE trigger does not fire when OR IGNORE suppresses violation (Preston Thorpe)
- fix: Allow virtual table functions in trigger bodies (Preston Thorpe)
- fix: Trigger SQL serialization strips identifier quoting #5868 (Preston Thorpe)
- fix: RAISE() rejects non-literal string expressions for error message (Preston Thorpe)
- fix: Duplicate trigger names accepted instead of being rejected (Preston Thorpe)
- Display consistent error message for
i_am_a_dummypragma (Avinash Sajjanshetty) - Fix CLI creating wrong file when path contains query parameters (Glauber Costa)
- core/translate: Two small trigger fixes (Preston Thorpe)
- fix: json_group_array/json_group_object return [] / {} on empty input (Abhishek)
- fix/mvcc: NullRow in MVCC cursors (Jussi Saurio)
- fix: CREATE INDEX corrupting materialized views with sqlite_master data (Martin Mauch)
- fix(json): return unquoted strings as plain SQL text (ratnesh mishra)
- Fix multiple hash join bugs (Jussi Saurio)
- Fix INSERT index vs NOT NULL DEFAULT mismatch (Martin Mauch)
- fix: do not allow CREATE TRIGGER that references tables from different databases (Pedro Muniz)
- core/pragma: clear dirty pages after changing page_size and fix handling of journal_mode (Preston Thorpe)
- Fix window aggregate row value (practicat)
- core/translate: Fix panic when PRAGMA query_only receives float literal (Sergio)
- Fix view rewrites for rename column with subqueries and attached DBs (Kumar Ujjawal)
- core/storage: Fix stale b-tree count cache (Glauber Costa)
- Fix simple_count optimization not triggering case-insensitively (Jussi Saurio)
- core/vdbe: Fix SUBSTR() with negative offsets for multi-byte UTF-8 strings (ratnesh mishra)
- core/translate: Handle list_types=1 pragma with error instead of panic (Aly Abdelmoneim)
- fix: Savepoint rollback of DDL causes I/O error instead of rolling back (Preston Thorpe)
- Fix GROUP BY COLLATE sort-elision with implicit BINARY indexes (Kumar Ujjawal)
- Fix INSERT failing on non-INTEGER PRIMARY KEY when column is omitted (Mikaël Francoeur)
Install turso_cli 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-installer.ps1 | iex"
Download turso_cli 0.6.0
| File | Platform | Checksum |
|---|---|---|
| turso_cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| turso_cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| turso_cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| turso_cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| turso_cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo tursodatabase/turso
You can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>Fetched May 14, 2026

