v0.5.0
tursodatabase/tursov0.5.0Mar 4, 2026by github-actions[bot]
AI Summary
A major feature release marking the introduction of MVCC mode, encryption support, and various SQL enhancements like CHECK constraints and FTS.
Key Highlights
- MVCC (Multi-Version Concurrency Control) mode support
- Encryption support for local and remote databases
- CHECK constraints implementation
- Full Text Search (FTS) support
- RAISE() function and Materialized views
New Features
- MVCC mode support
- Encryption support for local and remote databases
- CHECK constraints
- Full Text Search (FTS)
- RAISE() function
- Materialized views support
- CTE (Common Table Expressions) support
- Named savepoints
- REGEXP operator support
- PRAGMA synchronous=NORMAL
Full Release Notes
## Release Notes ### Added * github/release: Add retry logic to network-dependent install steps (Pekka Enberg") * github/release: Add retry logic to network-dependent install steps (Pekka Enberg) * Add JS and Python concurrent write examples (Avinash Sajjanshetty) * perf/react-native: add c++ getAllRows() helper (Jussi Saurio) * perf: add compiler branching hints (Preston Thorpe) * Add concurrent writes example in Rust (Avinash Sajjanshetty) * Add SQLAlchemy dialect for Python bindings (Orthel Toralen) * mvcc: add test that asserts no ghost commits after Busy errors happen (Jussi Saurio) * core: Support views in MVCC mode (RJ Barman) * add return type checking for Function calls for `CHECK` constraints (Pedro Muniz) * Add mobibench to gitignore (Preston Thorpe) * Add native TCL extension for in-process SQLite test harness (Ahmad Alhour) * bindings/rust: Add statement and row column inspection APIs (Pekka Enberg) * cli/sync: add read timeout to prevent deadlock on Windows (Orthel Toralen) * add SQL language reference documentation (Glauber Costa) * add stable PRAGMA capture_data_changes_conn name and keep old one around for compatibility (Nikita Sivukhin) * Improve Elle, add rw-register model and chaotic workloads (Avinash Sajjanshetty) * Add Mobibench evaluation: SQLite vs Turso (Pekka Enberg) * core/io: Add POSIX fallback for io_uring ftruncate (Pekka Enberg) * temporarily remove new windows simulation runs (Preston Thorpe) * feat: support encryption keys for attached databases via URI params (Glauber Costa) * Finish implementing RAISE (Preston Thorpe) * autofix: implement FkCheck opcode to prevent RETURNING rows after FK violations (Jussi Saurio) * Support custom types (Glauber Costa) * tests/fuzz: add fuzz_iterations helper and cut CI fuzz iters to 50% (Jussi Saurio) * Add STRICT table support to differential fuzzer (Glauber Costa) * Add support for RAISE() function (Glauber Costa) * Add ATTACH support to simulator (Glauber Costa) * partially implement FULL OUTER + LEFT and RIGHT hash joins (Preston Thorpe) * EXPLAIN QUERY PLAN: fix incorrect join order, add missing annotations, convert some snapshot tests to EQP-only (Jussi Saurio) * bindings/rust: add old multithreaded bug reproducers as mvcc regression tests (Jussi Saurio) * core/mvcc: Implement Hekaton commit dependency tracking (Pere Diaz Bou) * tests: add CTE regression tests for issue #4637 (Jussi Saurio) * add serial test crate to make `fuzz_pending_byte_database` serial for mvcc and wal (Pedro Muniz) * Add more tests to foreign_keys.sqltest (Jussi Saurio) * tests: add regression tests for expression index UPDATE correctness (Pedro Muniz) * Implement named savepoints (Preston Thorpe) * feat: Add materialized views support to Rust bindings and test runner (Martin Mauch) * Fix STRICT ADD COLUMN default type validation (Kumar Ujjawal) * Fix freelist_count dirty leak and add regression test (Kumar Ujjawal) * core: reimplement PRAGMA integrity_check as VDBE and add sqlite parity corpus (Jussi Saurio) * Restore new antithesis assertions (Mikaël Francoeur) * Use new Antithesis assertions (Mikaël Francoeur") * fix: NEW.rowid_alias in UPDATE Trigger WHEN Clause Evaluates to NULL (Jussi Saurio) * Add MVCC Antithesis stress test configurations (Pekka Enberg) * add tests verifying check constraints are evaluated before ON CONFLICT clauses (Jussi Saurio) * Improve support for attach databases (Glauber Costa) * translate: support row-valued comparison expressions (Jussi Saurio) * fix: add `changes` support to MVCC and adjust code to always emit it in one place only (Pedro Muniz) * Add regression tests for correlated subqueries using MULTI-INDEX AND plans (Jussi Saurio) * add tests verifying INSERT RETURNING does not skip index updates (Jussi Saurio) * btree: add property tests & make a few functions not panic on corruption (Jussi Saurio) * Use new Antithesis assertions (Mikaël Francoeur") * add regression tests for correlated subqueries registers fix (Pedro Muniz) * Use new Antithesis assertions (Mikaël Francoeur) * Add regression tests for concurrent commit deadlock in VDBE yield-spin loop (Avinash Sajjanshetty) * Add TPC-H benchmark README and plotting scripts (Pekka Enberg) * fix: Panic on ALTER TABLE ADD COLUMN With Invalid Collation Name #5305 (Jussi Saurio) * ci: add license checker to disallow GPL dependencies (Srinivas A) * Add some makefile commands for test runner in repo root (Preston Thorpe) * add exp-index-method to rust backend and for testing (Pavan Nambi) * Add support for FROM-clause subquery materialization and CTE materialization (Jussi Saurio) * Add new antithesis assertions (Mikaël Francoeur) * concurrent-simulator: Add UPDATE and DELETE workloads (Pekka Enberg) * Implement PRAGMA function_list with enum-derived function probing (Glauber Costa) * Add hermitage tests (Avinash Sajjanshetty) * Fix corruption errors caused by stale cursor positioning + add upsert support to simulator (Pavan Nambi) * make transactions supported in compat.md (Glauber Costa) * Add REGEXP operator support (Glauber Costa) * Add test case for MVCC dual cursor transaction isolation (Jussi Saurio) * Implement CHECK constraints (Glauber Costa) * Replace panic/todo/unimplemented with proper errors (Mikaël Francoeur) * testing/runner: Add @skip-if sqlite directive (Preston Thorpe) * Implement multi-index scan access method (Preston Thorpe) * add tests for ORDER BY aggregate not in SELECT with GROUP BY (Mikaël Francoeur) * github: Add workflow to publish crates to crates.io on tags (Pekka Enberg) * javascript: Add support for Statement.reader property (Pekka Enberg) * javascript: Fix implicit connect support (Pekka Enberg) * Add busy timeout and Connector pattern for go bindings (Preston Thorpe) * core/mvcc: add to destroyed_tables when insert+delete in same checkpoint (Pere Diaz Bou) * core/vdbe: fix newrowid Start state change on IO (Pere Diaz Bou) * add duration and fix notebook name (Mikaël Francoeur) * Add support for PRAGMA synchronous=NORMAL (Jussi Saurio) * Use new Antithesis trigger action (Mikaël Francoeur) * core/mvcc: update schema root pages with new allocated btree pages (Pere Diaz Bou) * add --experimental-attach flag to test runner backends (Mikaël Francoeur) * add index knowledge skill (Pedro Muniz) * Implement `vacuum_into` op (Avinash Sajjanshetty) * fix: only initialize result registers for subqueries that have not been evaluated yet (Pedro Muniz) * fix: add bounds checking to `cell_interior_read_left_child_page` (Avinash Sajjanshetty) * Add Namespace field for go-sync package (Preston Thorpe) * Add "release-official" compilation profile (Jussi Saurio) * Add support for local encryption in SDKs (Avinash Sajjanshetty) * fix build.rs rebuilding every time due to always getting new timestamp (Jussi Saurio) * add turso test runner to workspace member (Pedro Muniz) * fix dockerfile to add dbhash tool (Pedro Muniz) * add ReadableName strategy for differential fuzzer so that we mostly generate readable identifiers (Pedro Muniz) * implement `PRAGMA temp_store` optimization (Preston Thorpe) * Add `dbhash` tool calculate hash of logical db content (Avinash Sajjanshetty) * Add local encryption support for Go (Avinash Sajjanshetty) * mac: introduce PRAGMA fullfsync (Jussi Saurio) * Reintroduce record header caching (Jussi Saurio") * Add new insert/write performance benchmarks (Preston Thorpe) * compat.md: add generated + md reformat (Pere Diaz Bou) * Add support for remote encryption in sync operations (Avinash Sajjanshetty) * core/mvcc: add savepoints to mvcc with `begin/end_statment` (Pere Diaz Bou) * Add benchmark for hash table/spilling performance (Preston Thorpe) * Reintroduce record header caching (Jussi Saurio"' from Jussi Saurio) * Reintroduce record header caching (Jussi Saurio") * Reintroduce record header caching (Jussi Saurio) * Implement remaining ON CONFLICT ResolveTypes for INSERT and UPDATE statements (Preston Thorpe) * feat(cli): add .read command to execute SQL from a file (i cook code) * add bench feature to run benchmarks in nyrkio (Pedro Muniz) * Implement partial ON CONFLICT support for UPDATE statements (Preston Thorpe) * Support CTE visibility in VALUES+RETURNING subqueries and allow explicit col names (Preston Thorpe) * Add ECS task to run sqlancer nightly along with simulator (Preston Thorpe) * implement simple strategy to restart WAL log if possible (Nikita Sivukhin) * Add VSCode syntax highlighter for .sqltest files (Jussi Saurio) * DEFAULT value handling of NON-NULL columns in ADD COLUMN (Preston Thorpe) * Implement Full Text Search feature (Preston Thorpe) * add codspeed (Pedro Muniz) * core/mvcc: Add support for synchronous off mode (Pekka Enberg) * Add support for subqueries in the WHERE position for DML statements (Preston Thorpe) * Add vibecoded stress-go testing tool (Jussi Saurio) * fix: implement IS TRUE/IS FALSE with correct SQLite semantics (Jussi Saurio) * Add shuttle tests for IO trait (Pedro Muniz) * bindings/rust: support `prepare_cached` (Pere Diaz Bou) * Add more comprehensive PRAGMA integrity_check, and add PRAGMA quick_check (Jussi Saurio) * tests: add some shuttle tests (Pedro Muniz) * benchmarks: add micro benchmarks with divan (Pedro Muniz) * AGENTS.MD: add some magic words about max-turns (Jussi Saurio) * Add more instructions to AGENTS.MD and use Opus model instead of Claude for github bot (Jussi Saurio) * bindings/dotnet: implement IsDBNull check (Alex) * Implement json_object(*) to create JSON object from all columns (Martin Mauch) * Add some more guidelines to AGENTS.MD (Jussi Saurio) * Add id-token: write permission to claude action for OIDC (Jussi Saurio) * Add claude code github action and CLAUDE.MD file (Jussi Saurio) * antithesis: Add test case for WAL checkpointing (Pekka Enberg) * implement .dbtotxt and dbpage vtab (Pavan Nambi) * bindings/java: Add transaction support (Kim Seon Woo) ### Updated * core/mvcc: disable autoincrement for MVCC (Pere Diaz Bou) * testing/stress: Allow --seed parameter for non-deterministic runs (Pekka Enberg) * Update authors in Cargo.toml (Preston Thorpe) * refactor: reorganize emitter.rs into its own module (Preston Thorpe) * core/vector: Avoid simsimd on Windows AArch64 (Marc-André Moreau) * core/storage: Reject non-UTF-8 encoded databases on open (Mikaël Francoeur) * core/mvcc: Atomic timestamps when preparing commit (Avinash Sajjanshetty) * Differential fuzzer: detect more false positive with limit and order by (Pedro Muniz) * core/mvcc: move `payload_size` to frame header (Avinash Sajjanshetty) * Fast path no-op update in vdbe (Preston Thorpe) * Rename experimental_mvcc to mvcc (Eren Türkoğlu) * Update or replace ordering (Preston Thorpe) * Hash joins: partition spilling improvements (Preston Thorpe) * core/translate: Apply explicit view column aliases (Karthik Koralla) * core/translate: cache GROUP BY compound expressions properly (Jussi Saurio) * core: per-database MVCC transactions for attached databases (Glauber Costa) * Logical log tweaks (Jussi Saurio) * Assert that no two transaction timestamps are ever same (Avinash Sajjanshetty) * Update sqlite_sequence on ALTER TABLE ... RENAME TO (Kumar Ujjawal) * core/mvcc: Increase op count and tx payload size in logical log tx record format (Jussi Saurio) * core/translate: Use usable constraint even if preceded by unusable constraint on same column (Jussi Saurio) * Preserve BLOB-vs-no-affinity semantics in comparison coercion (Kumar Ujjawal) * compat: defer CTE column count check until its used (Pedro Muniz) * Improve SQLite3 tests (Pekka Enberg) * Accept trailing named column constraints in column defs (Kumar Ujjawal) * Enable index method table access for DML stmts (Preston Thorpe) * update unique_sets when renaming a column to prevent schema corruption (Glauber Costa) * Pretty print elle status progress (Avinash Sajjanshetty) * Decorrelate simple EXISTS / NOT EXISTS subqueries as semi/antijoins (Jussi Saurio) * Disable index-method access for DML (Kumar Ujjawal) * Avoid panic in DecrJumpZero on non-integer register (Kumar Ujjawal) * core/io: Track write buffer in completion (Jussi Saurio) * core/schema: Emit table-level UNIQUE constraints in BTreeTable::to_sql() (Jussi Saurio) * Avoid modulo-by-zero in WAL frame API fuzz rollback (Kumar Ujjawal) * enable async io in rust bindings (Pedro Muniz) * Make strict mode non-experimental (Glauber Costa) * Update misleading comment in MVCC (Avinash Sajjanshetty) * core/mvcc: Monotonic lockfree rowid allocation (Jussi Saurio) * core/mvcc: Use hash set to track commit dependencies (Avinash Sajjanshetty) * core/mvcc: check conflict delete btree resident tombstone (Pere Diaz Bou) * Adjust React Native example app instructions (Jussi Saurio) * Update example for VFS extensions in extensions/core/README.md (Preston Thorpe) * Enable partial indexes in MVCC mode (Preston Thorpe) * Enable Expression indexes in MVCC mode (Preston Thorpe) * Gate sqlite_dbpage writes behind --unsafe-testing (Kumar Ujjawal) * Enable FTS for JavaScript SDK (Nikita Sivukhin) * Sqltest cross check integrity (Jussi Saurio) * properly split sql statements for JS runner backend + enable triggers (Pedro Muniz) * Differential fuzzer improvements (Pedro Muniz) * core/translate: Remove spurious Affinity instruction from integrity_check (Pekka Enberg) * Remove some clones from MVCC code (Preston Thorpe) * remove `Arc<RwLock<Statement>>` from `Insn::Program` (Pedro Muniz) * ci: split bench into multiple jobs (Jussi Saurio) * Refactor core_tester fuzz module (Preston Thorpe) * Replace panic! and assert! with turso_macros assertions (Mikaël Francoeur) * SQLite compat: restrict ANY affinity special-casing to STRICT tables (Hossam Khero) * Enable MVCC for a bunch of fuzz tests (Preston Thorpe) * JS SDK: remote writes experimental (Nikita Sivukhin) * Reject triggers on virtual tables (Kumar Ujjawal) * serverless: Export Session and SessionConfig types (Nikita Sivukhin) * prevent scalar blob into JSONB (김선우) * install-sqlite: dont fail at get_download_url if sqlite3 already installed (Jussi Saurio) * refactor: stop using `connection.with_schema` inside `translate` module (Pedro Muniz) * Reject duplicate CTE names in WITH clause (Kumar Ujjawal) * Comment out flaky vector jaccard test (Preston Thorpe) * mvcc: disable cross-incompatible features (Jussi Saurio) * Random code cleanups to lib.rs (Pekka Enberg) * Reject column-level multi-column FK refs in ALTER TABLE (Kumar Ujjawal) * core: Make version functions non-deterministic (ratnesh mishra) * Experimental SQLRight setup (Mikaël Francoeur) * Reject FILTER clauses in view definitions (Kumar Ujjawal) * test/mvcc: re-enable database reopen logic in MVCC transaction fuzzer (Jussi Saurio) * perf: optimizations for FTS (Preston Thorpe) * CDC v2: transaction IDs and per-statement COMMIT records (Nikita Sivukhin) * Enable using Search for WHERE rowid= predicate instead of full scan (Preston Thorpe) * Reject reserved JSONB element types (Kumar Ujjawal) * core/mvcc: reparse schema on get_index_info (Pere Diaz Bou) * refactor: change translate functions to accept `&mut ProgramBuilder` (Pedro Muniz) * testing/stress: Remove multi-threading warning (Pekka Enberg) * github: Improve license check (Pekka Enberg) * core/mvcc: check for unique conflicts (Pere Diaz Bou) * Btree dump vtab (Nikita Sivukhin) * Cdc version table (Nikita Sivukhin) * vector8 + vector1bit (Nikita Sivukhin) * stress: Use single Database object (Pekka Enberg) * continue execution if IO was completed immediately (Nikita Sivukhin) * Lower Windows CI test timeout from 60 to 20 minutes (Pekka Enberg) * Multi index operator constraint (Pedro Muniz) * bench: gate nanosecond-level tests behind nanosecond-bench feature (Jussi Saurio) * use full link in JS SDK README so that links will be correct at npm (Nikita Sivukhin) * adjust is_constant check for `IN` and `emit_no_constant_insn` to avoid panic in VDBE cursor (Pedro Muniz) * concurrent-simulator: Explore in fast mode (Pekka Enberg) * Rewrite printf for full SQLite compatibility (Glauber Costa) * Pragmas (Glauber Costa) * testing/stress: Re-enable reopen and reconnect in stress tester (Pekka Enberg) * make `Numeric` the source of truth for number comparisons (Pedro Muniz) * Mvcc garbage collection (Jussi Saurio) * Remove unmaintained dart bindings (Avinash Sajjanshetty) * Convert antithesis from feature to cfg flag (Mikaël Francoeur) * core/storage: Remove unused FxHashSet import in btree.rs (Pekka Enberg) * core/mvcc: check integer primary key conflicts (Pere Diaz Bou) * use blocking IO for local databases for now (Nikita Sivukhin) * Make Github actions even more robust (Pekka Enberg) * bindings/wasm: Switch to notification-based I/O completion (Pekka Enberg) * Clippy more rules (Nikita Sivukhin) * properly handle url callback in react native bindings (Nikita Sivukhin) * Reduce antithesis stdout logging and log sql/tracing to files (Mikaël Francoeur) * Make Github workflows more robust (Pekka Enberg) * Change crate types in Dockerfile to restore Antithesis instrumentation (Mikaël Francoeur) * Whopper elle (Pedro Muniz) * allow url as function in react native bindings (Nikita Sivukhin) * JavaScript serverless driver improvements (Pekka Enberg) * MVCC: enable autocheckpoint at 1000 * 4120 bytes logical log size (Jussi Saurio) * Validate header (Nikita Sivukhin) * avoid unnecessary slow worker tasks in JS (Nikita Sivukhin) * do not cache chunks for .tantivy-meta.lock file (Nikita Sivukhin) * Destroy any custom index methods while dropping parent table (Preston Thorpe) * Stress progress bars (Pedro Muniz) * More snapshot tests (Pedro Muniz) * pin compiler and runner versions for codspeed benchmark (Pedro Muniz) * Move test runner to `testing/runner` (Pedro Muniz) * remove flaky test (Preston Thorpe) * Updates to COMPAT.MD (Jussi Saurio) * mark attach as experimental (Jussi Saurio) * run test with llvm-cov at linux (Nikita Sivukhin) * sim: generate unique constraints and verify statement rolls back correctly on failure (Pavan Nambi) * Bump urllib3 from 2.5.0 to 2.6.3 (app/dependabot) * Bump crossbeam-channel from 0.5.14 to 0.5.15 (app/dependabot) * JIT query generation in turso_stress (Mikaël Francoeur) * update determinism to match SQLite (Mikaël Francoeur) * core: database open is now async (Nikita Sivukhin) * bump claude code max turns (Pedro Muniz) * return NULL when there is no record in `op_column` (Pedro Muniz) * `strftime` should accept any kind of input not only text (Pedro Muniz) * React native example more tests (Nikita Sivukhin) * Document Rust sync API (Mikaël Francoeur) * Tpch snapshot testing (Pedro Muniz) * test runner: Snapshot testing (Pedro Muniz) * agressively black box benchmarks (Pedro Muniz) * Go driver time (Nikita Sivukhin) * `CHAR` should return `\0` for `NULL` (Pedro Muniz) * core/mvcc: use dual_peek in exists (Pere Diaz Bou) * update npm for trusting publishing features (Nikita Sivukhin) * Separate Connection from a prepared statement to enable proper caching (Preston Thorpe) * substitute HashMap for FxHashMap in core (Pedro Muniz) * adjust agents.md to call tursodb cli correctly (Pedro Muniz) * remove NODE_AUTH_TOKEN (Nikita Sivukhin) * React native (Nikita Sivukhin) * sql_generation: reduce likelihood of index name collisions (Jussi Saurio) * retry on reader contention for `TursoRwLock::read` (Pedro Muniz) * differential fuzzer + general purpose sql generation (Pedro Muniz) * cleanup: centralize optimizer params and make them loadable from json (Jussi Saurio) * remove accesses_db flag (Nikita Sivukhin) * Migrate more tcl tests (Pedro Muniz) * testing/system: allow specifying rowcounts for gen-bigass-database.py (Jussi Saurio) * tests/fuzz/cte_fuzz: try to prevent pathological queries (Jussi Saurio) * improvements of the whopper (Nikita Sivukhin) * Some Insert performance improvements (Preston Thorpe) * Performance improvements for hash joins (Preston Thorpe) * WAL auto truncation: increase epoch to prevent stale pages reuse (Nikita Sivukhin) * core/mvcc: reparse schema after stream of schema changes (Pere Diaz Bou) * Reduce CLI release build time by ~60% (Jussi Saurio) * cleanup/vdbe: remove unused IndexKeyOwned and remove unused IndexKeyUnpacked::cursor_id (Jussi Saurio) * Refactor: remove encryption key field from Database struct (Avinash Sajjanshetty) * Migrate more TCL tests (Pedro Muniz) * convert agent docs to skills (Pedro Muniz) * Some optimizations for tpc-h queries (Pavan Nambi) * Refactor AggContext to use flat payload representation (Jussi Saurio) * more testing cleanups - move simulators (Pedro Muniz) * more testing cleanups (Pedro Muniz) * react-native: prepare (Nikita Sivukhin) * Move stress to `testing/stress` (Pedro Muniz) * Move tcl test to `testing/system` (Pedro Muniz) * ci/bench: increase timeout to 45mins as workaround (Jussi Saurio) * Remove fts/tantivy as default dependency in turso-core (Preston Thorpe) * Move antithesis test to `testing/antithesis` (Pedro Muniz) * feat/perf: use HashTable machinery for DISTINCT instead of ephemeral btree (Jussi Saurio) * ci: split simulator into separate jobs (Jussi Saurio) * CI: Reduce iterations in cte fuzzer (Preston Thorpe) * ci: longer timeout for cargo nextest on windows (Jussi Saurio) * fuzz/cte: reduce iterations (Jussi Saurio) * docs: split AGENTS.MD into separate agent-guides files (Jussi Saurio) * Js test runner (Jussi Saurio) * refactor/pager: small cleanups (Jussi Saurio) * sim: only run turso integrity check 10% of the time (Jussi Saurio) * Rewrite BETWEEN statements for partial indexes in DML paths (Preston Thorpe) * Create global directive for skipping mvcc in test runner (Preston Thorpe) * stress: run stress with shuttle (Pedro Muniz) * Validate Send + Sync for `ProgramState` + change registers to hold a `Box<[Register]>` (Pedro Muniz) * test-runner: rust backend (Pedro Muniz) * test-runner: start migrating TCL tests (Pedro Muniz) * Give Antithesis tests better names (Mikaël Francoeur) * core/vdbe: Allow leading + sign in numeric string parsing (Pere Diaz Bou) * core/vdbe: trim return text with integer and float (Pere Diaz Bou) * Reset ProgramState::once on statement reset (Mikaël Francoeur) * return blob if we concat blobs (Nikita Sivukhin) * Replace GPL-2.0 bloom crate with MIT-licensed fastbloom (Jussi Saurio) * Refactor core/lib.rs Connection impl out to its own file (Preston Thorpe) * Disallow WITHOUT ROWID tables (Jussi Saurio) * core: Use fast monotonic time when possible (Pekka Enberg) * core/vdbe: move mutable fields from Program to ProgramState (Pere Diaz Bou) * replace custom SmallVec with smallvec crate (Ankush) * Open autovacuum databases in readonly mode when experimental flag not set (app/copilot-swe-agent) * remove unused lints, variables and functions (Pedro Muniz) * separate Sync module (Pedro Muniz) * Btree: optimize defragment_page (Khashayar Fereidani) * avoid recursive read locks (Nikita Sivukhin) * Track WAL state in savepoints for proper rollback (Pavan Nambi) * vdbe: Resize deferred_seeks on program state reset (Pekka Enberg) * Reset checkpoint state when PRAGMA wal_checkpoint fails (Jussi Saurio) * Increase test_eval_param_only_once timeout threshold for CI reliability (app/copilot-swe-agent) * stress: switch to WAL mode before SQLite integrity check (Pekka Enberg) * planner: hash-join planning with safe build-side materialization (Preston Thorpe) * core/mvcc: rollback index rows (Pere Diaz Bou) * core/vdbe: check negative root pages with `integrity_check` (Pere Diaz Bou) * antithesis/stress: run in verbose mode (Jussi Saurio) * docs: change test build instructions (Mason Hall) * btree: `get_prev_record` and `get_next_record` automatically invalidate_record (Pedro Muniz) * bindings/dotnet: allow setting TursoParameter.Direction (Alex) * VDBE micro-optimizations for read path (Jussi Saurio) ### Fixed * concurrent-simulator: Fix DDL inside BEGIN CONCURRENT transactions (Pekka Enberg) * core/json: Fix stale cursor crash in json_tree correlated subqueries (Pekka Enberg) * Avoid panic on unresolved qualified column in DO UPDATE (Kumar Ujjawal) * Fix unsound schema access when loading extensions (Preston Thorpe) * Fix unresolved IfNot label in scalar count(*) subqueries (Kumar Ujjawal) * core/translate: Fix non-literal defaults in Column instruction (Jussi Saurio) * core/mvcc: Fix header-only write durability (Jussi Saurio) * fix: IN(subquery) data corruption in ungrouped aggregates with NOT NULL columns (Vimal Prakash) * temporarily remove big sqltest to fix all the CI errors (Preston Thorpe) * Fix regression improperly consuming hash join WHERE terms (Preston Thorpe) * fix: UPDATE OR REPLACE does not fire FK CASCADE on implicitly-deleted row (Pedro Muniz) * Fix wal truncate on shutdown even after restart (Kumar Ujjawal) * fix: UPDATE RETURNING correlated subquery uses pre-UPDATE values (Pedro Muniz) * Make MVCC Elle check errors fail CI build (Pekka Enberg) * Overflow fix (Nikita Sivukhin) * fix: Window function with GROUP BY and ORDER BY causes optimizer assertion failure #5552 (Pedro Muniz) * Fix sync replay generator (Nikita Sivukhin) * fix: always reset pager state for attached databases (Pedro Muniz) * Fix three FULL OUTER JOIN bugs (Jussi Saurio) * fix snapshot isolation in MVCC (Preston Thorpe) * fix: clean up db-log and fix WAL extension for attached DBs in simulator (Glauber Costa) * fix: Expression index with correlated EXISTS subquery causes panic #5551 (Pedro Muniz) * Fix --experimental-strict incorrectly enabling custom types (Glauber Costa) * autofix: Aggregate COLLATE leaks to subsequent aggregates in same query (Jussi Saurio) * fix/mvcc: prevent persistent "Database is busy" after failed IO during checkpoint (Jussi Saurio) * autofix: CTE with UNION ALL corrupts first-column literals when any branch has aggregates (Jussi Saurio) * autofix: Triggers during FK CASCADE see pre-delete state of parent table (Jussi Saurio) * autofix: Correlated subquery with explicit JOIN returns wrong results after first row (Jussi Saurio) * autofix: LEFT JOIN incorrectly converted to INNER JOIN when WHERE uses CASE/IIF (Jussi Saurio) * autofix: Row value IN expression crashes with register allocation error (Jussi Saurio) * fix: BEFORE UPDATE trigger corrupts outer cursor position for correlated subqueries (Jussi Saurio) * autofix: DELETE with LIMIT ignores OFFSET clause (Preston Thorpe) * fix: UPSERT ON CONFLICT fails to match expression indexes #5550 (Preston Thorpe) * fix/optimizer: enable multi-index OR scans more widely and fix bad CTE query plans (Jussi Saurio) * Fix REAL affinity to preserve non-numeric text (Kumar Ujjawal) * Fix rowid resolution for views/WITHOUT ROWID (Kumar Ujjawal) * fix: Use pure-rust for macos for aegis to prevent macos compilation issues (Amodh Dhakal) * fix RETURNING, Statement::reset() and Program::abort() (Jussi Saurio) * Fix DEFAULT affinity handling (Jussi Saurio) * Improve I/O error message (Pekka Enberg) * fix: Handle IVM old record capture when REQUIRE_SEEK is set (Martin Mauch) * fix: MVCC cursor ignored left join null flag (Jussi Saurio) * fix: adjust `jump_if_null` branch offset as incorrectly failed NULL in check constraints in integrity checks (Pedro Muniz) * fix: emit RealAffinity when reading subquery columns from ephemeral indexes (Jussi Saurio) * fix: default `generate_series` STOP to SQLite Default (4294967295) when omitted (Damian Melia) * fix: mvcc: DDL statement inside BEGIN CONCURRENT returns a confusing error #3380 (Pedro Muniz) * fix: do not do unchecked indexing to non-static page offsets #4736 (Pedro Muniz) * fix: use consistent M_PI constant in degrees/radians for test parity with SQLite (Pedro Muniz) * fix: Register DBSP state index in schema for integrity_check (Martin Mauch) * fix: Panic on correlated subquery in IN clause referencing outer table alias #5213 (Pedro Muniz) * fix(wal): release WAL read lock on rollback to prevent checkpoint busy (Ahmad Alhour) * sqlite3: Fix segfault in sqlite3_free_table() (Pekka Enberg) * fix: OR in Partial Index WHERE Clause Causes Unresolved Label Panic (Jussi Saurio) * fix: No-op UPDATE causes datatype mismatch #5410 (Jussi Saurio) * fix: Expression Index Key Computed From Pre-Affinity Value During UPDATE (Jussi Saurio) * fix: ALTER TABLE RENAME COLUMN Does Not Update Partial Index WHERE Clauses (Jussi Saurio) * fix: Create materialized view in same transaction as source (Martin Mauch) * fix: "Cursor not found" when delete has a correlated subquery #5434 (Jussi Saurio) * fix: INSERT INTO With CTE + Compound SELECT Produces Garbled Data #5425 (Jussi Saurio) * fix: DELETE with correlated subquery sees in-flight deletions #5426 (Jussi Saurio) * fix: Panic When CTE Is Used in UPDATE SET Clause on Keyed Table (Jussi Saurio) * Fix FTS LIMIT 0/-1 handling to avoid Tantivy overflow (Kumar Ujjawal) * fix/correctness: use ephemeral table for UPDATE when expression index refers to updated columns (Mikaël Francoeur) * fix: update changes() and total_changes() inside explicit transactions (Damian Melia) * Fix: Fully enable foreign keys for MVCC (Preston Thorpe) * fix(cli): prevent extra space in multiline readline input (Karthik Koralla) * Fix materialized view re-entrancy bug (Martin Mauch) * fix affinity handling in check constraint evaluation (Jussi Saurio) * fix affinity calculation for index seeks, subqueries and ctes (Jussi Saurio) * fix: COLLATE Specification Lost in Concatenation with CHECK #5171 (Jussi Saurio) * fix: INSERT OR IGNORE + CHECK Failure Does Not Update sqlite_sequence (Jussi Saurio) * fix: Subquery in Trigger Body UPDATE SET Creates Poison Trigger (Jussi Saurio) * fix: WHERE clause returns wrong result for INT64_MAX compared against overflowed float (Jussi Saurio) * Fix prepare panic on comment/whitespace-only SQL (Kumar Ujjawal) * fix: Panic on Scalar Subquery Referencing CTE by Original Name After Alias (Jussi Saurio) * Fix SUM() type for BLOB inputs to return REAL (Kumar Ujjawal) * Unify error codes in LibsqlError for serverless package (Pekka Enberg) * Fix panic with duplicate expressions in window PARTITION BY (Mikaël Francoeur) * Fix panic and wrong results for window function in EXISTS subquery (Mikaël Francoeur) * fix: handle NULL properly in composite index seek/termination (Jussi Saurio) * fix: panic in PRAGMA integrity_check with expression indexes #5117 (Sanjeev) * fix: avoid cursor panic in SUM(TRUE IS TRUE) (Jussi Saurio) * Fix CLI exit code on query failure (Ahmad Alhour) * Fix MVCC trigger recovery rootpage handling (Jussi Saurio) * Fix collation with reordered hash joins (Preston Thorpe) * fix/btree: return error instead of panic if parent is unexpectedly a leaf (Jussi Saurio) * Fix panic on duplicate ORDER BY expressions with GROUP BY (Jussi Saurio) * fix: Align REAL→INTEGER cast with SQLite clamp semantics (Kumar Ujjawal) * fix: INSERT with auto-assigned rowid skips explicit index on IPK column (Jussi Saurio) * Fix affinity conversion of nan/inf text in numeric columns (Kumar Ujjawal) * fix: Correlated Subquery + Window Function in WHERE Hoisted Before Scan Loop (Jussi Saurio) * fix: more recursive read locks detected by shuttle with mvcc (Pedro Muniz) * fix/mvcc: dropped_root_pages tracking must survive restart (Jussi Saurio) * core/mvcc: Fix MVCC checkpoint panic when deleting index keys in inte… (Pekka Enberg) * fix: backward table scan skips rows on deep B-trees (ORDER BY DESC) (Pedro Muniz) * Phantom row fix (Pedro Muniz) * Insert or fix (Pedro Muniz) * fix: Panic on SELECT with 32767+ Columns (No SQLITE_MAX_COLUMN Limit) (Jussi Saurio) * fix: GROUP BY With Constant Expression Causes Infinite Loop #5300 (Jussi Saurio) * fix: propagate affinity for `IN` Subquery (Pedro Muniz) * fix(optimizer): fix correctness bugs in LEFT->INNER join optimization (Jussi Saurio) * fix/mvcc: fix test_logical_log_header_reserved_bytes_rejected test (Jussi Saurio) * Fix livelock in MVCC commit when pager_commit_lock is contended (Jussi Saurio) * Fix: handle multiplication overflow in time_date (Zohaib) * Fix panic on ROLLBACK TO by replacing assert! with bail_parse_error (codingbot24-s) * fix: Panic on CREATE TABLE with UNIQUE ... ON CONFLICT IGNORE #5221 (Jussi Saurio) * mvcc: define crash recovery / correctness semantics, rewrite logical log (Jussi Saurio) * Fix UPDATE incorrectly changing last_insert_rowid() (Kumar Ujjawal) * Fix panic in sum() with large floating-point values (Jussi Saurio) * fix(core): Handle PRAGMA cache_size overflow (fixes #5250) (ratnesh mishra) * fix: allow CTEs to shadow schema objects (Jussi Saurio) * fix: Panic on INSERT INTO t(nonexistent) SELECT ... FROM t #5226 (Jussi Saurio) * fix: Panic on Unresolved Table Reference in UPSERT DO UPDATE SET #5281 (Jussi Saurio) * core/storage: Fix pager commit completion (Pekka Enberg) * Fix throughput plot colors and hatching to match TPC-H plot (Pekka Enberg) * fix: Panic on 3+ Way MULTI-INDEX AND Query (RowSet State Violation) #… (Jussi Saurio) * fix: u16 Overflow in page_free_array Panics on 65536-Byte Pages #5276 (Jussi Saurio) * fix: handle PRAGMA database_list with argument without panicking (creativcoder) * fix: INSERT ... RETURNING panics with multi-column scalar subquery #5243 (Jussi Saurio) * fix: Panic When IN Subquery Used in LIMIT Expression #5247 (Jussi Saurio) * fix: ALTER TABLE RENAME COLUMN Fails on Case Mismatch #5246 (Jussi Saurio) * fix: read non-aggregate columns during AggStep for mixed expressions (Glauber Costa) * fix: null coroutine registers in ungrouped aggregate empty-result path (Glauber Costa) * fix: json_valid() With Zero Arguments Panics Instead of Returning Error (Jussi Saurio) * fix: LIMIT With i64::MIN Panics Due to Subtract Overflow in DecrJumpZ… (Jussi Saurio) * Fix missing dot in NOT NULL constraint error (Eren Türkoğlu) * fix: Materialized View Panics on Arithmetic With Text Column Values #… (Jussi Saurio) * fix: Panic on Scalar Subquery Referencing Rowid of Derived Table #5249 (Jussi Saurio) * Fix MVCC savepoint rollback leaving stale write set entries (Pekka Enberg) * fix: varint_len returned 10 for values with 58-64 significant bits (Jussi Saurio) * fix: do not apply numeric affinity of converted float is a NaN (Pedro Muniz) * try to fix js ci (Nikita Sivukhin) * fix: QUOTE should emit float in scientific notation (Pedro Muniz) * fix: GROUP BY sort order for extra columns (Pedro Muniz) * fix(core): fix ColumnUsedMask::is_only for overflow indices beyond vector length (Pedro Muniz) * Clear bloomfilters on rewind + hash table fix (Preston Thorpe) * fix: correctly jump to second OR expression if first expression is NULL (Pedro Muniz) * bindings/go: Fix spurious test failures from port conflicts (Pekka Enberg) * Fix changes() value for DELETE (Preston Thorpe) * core/mvcc: Fix transaction end version visibility check (Pere Diaz Bou) * Rn locking fix (Nikita Sivukhin) * fix prevent AUTOINCREMENT on non-INTEGER PKs with mixed-case names (김선우) * fix: cannot use index seek if the constraining expression references the same table being scanned (Pedro Muniz) * fix: evaluate result rows on exists subquery with DISTINCT clause (Pedro Muniz) * Fix multiple index corruption bugs involving INSERT OR <conflict_resolution_mode> (Jussi Saurio) * scripts/release-status.py: Classify issues as bugs by default (Pekka Enberg) * Fix broken build (Pavan Nambi) * Fix segfault in uuid_str/uuid_ts with no arguments (Preston Thorpe) * fix build (Mikaël Francoeur) * Strict fixes (Glauber Costa) * fix: prevent overflow panic in JsonArrayLength with malformed JSONB (Jussi Saurio) * Fix LEFT JOIN with virtual tables producing wrong results (Glauber Costa) * Fix user-defined columns named oid/rowid/_rowid_ resolving to internal rowid (Glauber Costa) * Rn fixes 2 (Nikita Sivukhin) * fix: emit offset after Distinct deduplication (Pedro Muniz) * fix: increase tolerance in vector L2 distance test to match simsimd vs rust precision (Pedro Muniz) * fix/encryption: do not panic if accessing db with missing or incorrect keys (Avinash Sajjanshetty) * fix: overflow handling in `cast_real_to_integer` (Pedro Muniz) * fix: convert text and blobs into bytes for correct parsing of strings into numbers (Pedro Muniz) * fix: `handle_text_sum` treat certain text values as approximate (Pedro Muniz) * Fix ruff check errors (Avinash Sajjanshetty) * Fix panic when CTE with indexed subquery is referenced twice (Mikaël Francoeur) * Fix STRICT tables incorrectly rejecting NULL values (Glauber Costa) * fix: allow qualified column references in partial index WHERE clause functions (Jussi Saurio) * Fix deadlock in MVCC mode when loading extensions on file databases (Jussi Saurio) * fix: WHERE clause treats string literals with numeric prefixes correctly (Jussi Saurio) * fix(update): apply affinity before MakeRecord to prevent index corruption (Pedro Muniz) * fix: JSON path UTF-8 char boundary panic (Jussi Saurio) * MVCC: fix checkpoint consistency and durability bugs (Jussi Saurio) * Fix CLI ".open" command to preserve experimental flags (Jussi Saurio) * fix/pager: properly reuse last empty trunk page for page allocation (Jussi Saurio) * Fix Antithesis CI config (Mikaël Francoeur) * Fix missing STRICT keyword in BTreeTable::to_sql() (Glauber Costa) * fix/connection: release wal locks on connection drop to prevent DB from being permalocked (Jussi Saurio) * Fix JavaScript driver error message to match libSQL (Pekka Enberg) * MVCC fixes found using whopper (Jussi Saurio) * Fix bug when empty namespace is provided in go sync driver (Preston Thorpe) * Fix passing namespace in to config in Go sync driver (Preston Thorpe) * fix: -0.0 and 0.0 should have the same hash (Pedro Muniz) * core/mvcc: fix btree row verification (Pere Diaz Bou) * fix: group concat did not convert values to text on output (Pedro Muniz) * Fix datetime modifier UTF-8 slicing panic (Mikaël Francoeur) * fix `is_nonnull` check for primary key columns (Pedro Muniz) * page cache: fix aggressive spilling logic (Preston Thorpe) * Fix bug in hash join table mask calculations (Jussi Saurio) * Fix broken encryption SDK tests (Avinash Sajjanshetty) * Fix correlated subquery issues (Jussi Saurio) * fix: avoid exponential CTE re-planning during query compilation (Jussi Saurio) * ivm: Fix comparison of Integer <-> Float (Martin Mauch) * Fix cross-link in Claude skills (Ofek Lev) * mvcc: fix for schema conflict on COMMIT (Nikita Sivukhin) * Fix bugs in hash-join materialization subplans (Jussi Saurio) * fix: prevent integer overflow panic in JSONB serialization (Jussi Saurio) * sqlancer dockerfile fix (Jussi Saurio) * fix: infer subquery result list column types (Jussi Saurio) * fix/vdbe: fix QUOTE() - should convert ints&floats to text (Jussi Saurio) * fix/optimizer: fix output cardinality estimation for index seeks (Jussi Saurio) * fix: truncate ORDER BY after rowid when rowid is first (Jussi Saurio) * fix: PRINTF converts non-text format argument to string (Jussi Saurio) * fix: substr returns NULL when provided NULL length (Jussi Saurio) * fix docker builds (Pedro Muniz) * fix: handle EXISTS in expr_vector_size instead of panicing with todo!() (Jussi Saurio) * fix: move subqueries to ephemeral plan when WHERE clause is moved (Jussi Saurio) * fix: eagerly remove ORDER BY if single aggregate, no groups/windows (Jussi Saurio) * fix: IN/NOT IN subqueries return NULL when value not found and subquery contains NULLs (Jussi Saurio) * fix/optimizer/stats: fix incorrectly named distinct_per_prefix field (Jussi Saurio) * fix antithesis dockerfile: download libvoidstar.so in Dockerfile instead of COPY (Jussi Saurio) * Optimizer: fix bugs, improve cost model (Jussi Saurio) * Fix wal checkpoint (Nikita Sivukhin) * Busy snapshot bugfix (Nikita Sivukhin) * fix/translate: revert change that allowed index cursor with stale position to be read (Jussi Saurio) * try_for_float: use Dekker algorithm to avoid precision error (Jussi Saurio) * fix: type affinity comparison for TEXT columns with numeric literals (#4745) (Srinivas A) * fix sync-wasm package to properly handle case when no url is provided (Nikita Sivukhin) * Fix JSON panics and incompatibility issues (Jussi Saurio) * Fix misuse of encryption key in the database manager cache (Avinash Sajjanshetty) * Run cargo clippy --fix --all in turso-test-runner (Preston Thorpe) * Fix ON CONFLICT resolution propagation to trigger statements (Preston Thorpe) * Fix sqlancer-runner image name in GH action build (Preston Thorpe) * Fix misleading turso-test-runner comments regarding mvcc&readonly (Jussi Saurio) * turso-test-runner: fix flakiness with Rust bindings + MVCC combo (Jussi Saurio) * Fix datetime parse_modifier() panicing on multibyte utf-8 (Jussi Saurio) * Ci fixes (Jussi Saurio) * Scalarfunc fuzzer + fixes (Jussi Saurio) * bugfix: fix corruption by setting `reserved_bytes` if requested (Avinash Sajjanshetty) * fix(vdbe): CHAR() function should handle full Unicode range (Mikaël Francoeur) * do not call unlock_after_restart in case of error during wal truncation - because we already released these locks earlier (Nikita Sivukhin) * WAL: ignore error from auto-checkpoint and fix bug (Nikita Sivukhin) * fix: dont create nested aggregates in cte_fuzz (Jussi Saurio) * properly unlock WriteLock if restart failed and ignore Busy errors when attempt to restart WAL file failed (Nikita Sivukhin) * fix(parser): reject duplicate PRIMARY KEY clauses on a single column (Mikaël Francoeur) * Cte fixes (Jussi Saurio) * fix/connect: read page1 in transaction to prevent illegal WAL read (Jussi Saurio) * fix: dont panic if decryption or checksum verification fails (Jussi Saurio) * fix: fsync DB file before truncating WAL after checkpoint (Jussi Saurio) * Return error instead of panicing when 1. short read occurs 2. page type is invalid (Jussi Saurio) * Checkpoint restart fix (Nikita Sivukhin) * fix: nullif/instr/concat should alloc regs for both args upfront (Jussi Saurio) * core/vdbe/sorter: Propagate write errors instead of corrupting data (Preston Thorpe) * fix(parser): BETWEEN and LIKE operator precedence with IS NOT NULL (Jussi Saurio) * fix: allow CTEs to be referenced multiple times (Jussi Saurio) * fix(parser): reject ?0 parameter with proper error instead of panicking (Jussi Saurio) * more recursive read lock fixes (Pedro Muniz) * fix: allow float literals in ORDER BY clause (Jussi Saurio) * fix: correct operator precedence in replace() argument check (Jussi Saurio) * fix: reject literal-only index expressions and fix JNI panic (Jussi Saurio) * fix: handle CAST without type name for SQLite compatibility (Jussi Saurio) * fix/vdbe: convert BusySnapshot to Busy if conn rolled back (Jussi Saurio) * sdk-kit: Export busy snapshot error to callers (Pekka Enberg) * fix: return NULL instead of panicking in uuid7_timestamp_ms for invalid blobs (Jussi Saurio) * fix: handle parse errors gracefully in LIMIT clause (Jussi Saurio) * fix: prevent panic on multi-byte UTF-8 in datetime functions (Jussi Saurio) * fix: INSERT INTO ... SELECT ... UNION ... inserts all rows (Jussi Saurio) * Fix DEFAULT value handling in integrity check (Jussi Saurio) * Fix stale overflow page read bug and improper re-entrancy handling in integrity_check (Jussi Saurio) * Fix integrity_check NOT NULL validation false positive (Jussi Saurio) * Fix compilation after cross-pollution with unused vars PR and integrity check PR (Jussi Saurio) * fix: use `checked_cast_text_to_numeric` for `Numeric` cast in `exec_cast` (Pedro Muniz) * fix: resolve label in ungrouped aggregation with SELECT DISTINCT (Jussi Saurio) * fix/checkpoint: always read page1 from db file when truncating (Jussi Saurio) * whopper: Handle BusySnapshot error gracefully (Pekka Enberg) * Fix WAL truncate checkpoint discarding uncheckpointed frames (Jussi Saurio) * btree.rs: make #[instrument] conditional on debug_assertions (Jussi Saurio) * Fix path not fsyncing the DB file after truncate checkpoint (Preston Thorpe) * core: make datetime functions faster and fix bugs (Jussi Saurio) * Valueiterator with fixes (Jussi Saurio) * stress: handle I/O error gracefully instead of panicking (Pekka Enberg) * stress: dont panic if get BusySnapshot error (Jussi Saurio) * bindings/rust: return error on out of bounds Row::get access (Jussi Saurio) * vector: increase fuzz error tolerance on windows (Jussi Saurio) * sim: fix yet another apply_snapshot() edge case (Jussi Saurio) ## Install turso_cli 0.5.0 ### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.5.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.5.0/turso_cli-installer.ps1 | iex" ``` ## Download turso_cli 0.5.0 | File | Platform | Checksum | |--------|----------|----------| | [turso_cli-aarch64-apple-darwin.tar.xz](https://github.com/tursodatabase/turso/releases/download/v0.5.0/turso_cli-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.5.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.5.0/turso_cli-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.5.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.5.0/turso_cli-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.5.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.5.0/turso_cli-aarch64-unknown-linux-gnu.tar.xz) | ARM64 Linux | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.5.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.5.0/turso_cli-x86_64-unknown-linux-gnu.tar.xz) | x64 Linux | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.5.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> ```