releases.shpreview
Turso/Turso/v0.6.0

0.6.0 -- 2026-05-14

v0.6.0

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 ROWID support 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 INTO panic (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 vaccum op (Avinash Sajjanshetty)
  • concurrent-simulator: Add a coverage runner config (Pekka Enberg)
  • core/translate: UPDATE FROM support (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_mode pragma (Pekka Enberg)
  • core/connection: Improve ATTACH to 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_expr code 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 ProgramState opcode 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_like and is_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 BitSet struct 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 into state 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 INTO on 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_MANAGER lock 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 BETWEEN explosion 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 paste with pastey (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_ts when 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 TRIGGER WHEN clause (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 BY infinite 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 await while 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_dummy pragma (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

FilePlatformChecksum
turso_cli-aarch64-apple-darwin.tar.xzApple Silicon macOSchecksum
turso_cli-x86_64-apple-darwin.tar.xzIntel macOSchecksum
turso_cli-x86_64-pc-windows-msvc.zipx64 Windowschecksum
turso_cli-aarch64-unknown-linux-gnu.tar.xzARM64 Linuxchecksum
turso_cli-x86_64-unknown-linux-gnu.tar.xzx64 Linuxchecksum

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