v0.6.0

tursodatabase/tursov0.6.0May 14, 2026by github-actions[bot]

AI Summary

A significant release introducing multi-process database access, VACUUM INTO support, and extensive SQLite compatibility features.

Key Highlights

  • Initial support for multi-process database access
  • VACUUM INTO support with strict tables
  • Temporary tables support
  • SQLite TCL conformance tests
  • Python SQLAlchemy asyncio dialect

New Features

  • Multi-process database access support
  • VACUUM INTO support
  • Temporary tables
  • SQLite TCL conformance tests
  • Python SQLAlchemy dialect
  • Go driver sync example
  • CREATE TABLE AS SELECT support
  • INDEXED BY support
  • PRAGMA full_column_names and short_column_names

Full Release Notes

## 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

```sh
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

```sh
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](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-aarch64-apple-darwin.tar.xz.sha256) |
| [turso_cli-x86_64-apple-darwin.tar.xz](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-x86_64-apple-darwin.tar.xz.sha256) |
| [turso_cli-x86_64-pc-windows-msvc.zip](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-x86_64-pc-windows-msvc.zip.sha256) |
| [turso_cli-aarch64-unknown-linux-gnu.tar.xz](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-aarch64-unknown-linux-gnu.tar.xz) | ARM64 Linux | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-aarch64-unknown-linux-gnu.tar.xz.sha256) |
| [turso_cli-x86_64-unknown-linux-gnu.tar.xz](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-x86_64-unknown-linux-gnu.tar.xz) | x64 Linux | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.6.0/turso_cli-x86_64-unknown-linux-gnu.tar.xz.sha256) |

## 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](https://cli.github.com/manual/gh_attestation_verify):
```sh
gh attestation verify <file-path of downloaded artifact> --repo tursodatabase/turso
```

You can also download the attestation from [GitHub](https://github.com/tursodatabase/turso/attestations) and verify against that directly:
```sh
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
```