releases.shpreview
Turso/Turso

Turso

Mon
Wed
Fri
JunJulAugSepOctNovDecJanFebMarAprMayJun
Less
More
Releases52Avg16/moVersionsv0.5.0 to v0.6.1
v0.6.1

Release Notes

Fixed
  • Apply virtual gen-col affinity in OLD probe and NEW key (Mikaël Francoeur)
  • core/mvcc: make MVCC integrity_check reprepare after checkpoint root publication (Avinash Sajjanshetty)
  • core/mvcc: rollback savepoint on abandoned statement (Pere Diaz Bou)
  • core/mvcc: check schema cookie during get_commit_timestamp (Pere Diaz Bou)
  • core/mvcc: yield on big serialization of transaction (Pere Diaz Bou)
  • core/mvcc: preserve rowid allocator watermark (Avinash Sajjanshetty)
  • core/mvcc: Rollback abandoned MVCC commits on cleanup (Mikaël Francoeur)
  • core/mvcc: fix MVCC checkpoint duplicate index entries for interior index keys (Avinash Sajjanshetty)

Install turso_cli 0.6.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.6.1/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.1/turso_cli-installer.ps1 | iex"

Download turso_cli 0.6.1

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

Install turso_cli 0.5.3

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.5.3/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.5.3/turso_cli-installer.ps1 | iex"

Download turso_cli 0.5.3

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>

Install turso_cli 0.5.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.5.2/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.5.2/turso_cli-installer.ps1 | iex"

Download turso_cli 0.5.2

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>
v0.5.1

Release Notes

Fixed
  • Fix INSERT failing on non-INTEGER PRIMARY KEY when column is omitted (Mikaël Francoeur)
  • core/mvcc: Disable no-op update optimisation (Avinash Sajjanshetty)
Optimized
  • optimizer: some finetuning for statsless heuristics + improve EXPLAIN QUERY PLAN (Jussi Saurio)

Install turso_cli 0.5.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.5.1/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.5.1/turso_cli-installer.ps1 | iex"

Download turso_cli 0.5.1

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>
v0.5.0

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

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>
v0.4.4

Release Notes

Added
  • Implement simple strategy to restart WAL log if possible (Nikita Sivukhin)
  • core/mvcc: Add support for synchronous off mode (Pekka Enberg)
Updated
  • Remove unused lints, variables and functions (Pedro Muniz)
  • WAL auto truncation: increase epoch to prevent stale pages reuse (Nikita Sivukhin)
  • Refactor core/lib.rs Connection impl out to its own file (Preston Thorpe)
  • Replace GPL-2.0 bloom crate with MIT-licensed fastbloom (Jussi Saurio)
  • core: Use fast monotonic time when possible (Pekka Enberg)
Fixed
  • Fix wal checkpoint (Nikita Sivukhin)
  • Busy snapshot bugfix (Nikita Sivukhin)
  • 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)
  • properly unlock WriteLock if restart failed and ignore Busy errors when attempt to restart WAL file failed (Nikita Sivukhin)
  • Checkpoint restart fix (Nikita Sivukhin)
  • core/vdbe/sorter: Propagate write errors instead of corrupting data (Preston Thorpe)
  • fix/connect: read page1 in transaction to prevent illegal WAL read (Jussi Saurio)
  • fix(parser): reject duplicate PRIMARY KEY clauses on a single column (Mikaël Francoeur)
  • fix: fsync DB file before truncating WAL after checkpoint (Jussi Saurio)
  • fix/vdbe: convert BusySnapshot to Busy if conn rolled back (Jussi Saurio)
  • sdk-kit: Export busy snapshot error to callers (Pekka Enberg)

Install turso_cli 0.4.4

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.4.4/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.4.4/turso_cli-installer.ps1 | iex"

Download turso_cli 0.4.4

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>
v0.4.3

Release Notes

Added
  • bindings/rust: support prepare_cached (Pere Diaz Bou)
Fixed
  • Disallow WITHOUT ROWID tables (Jussi Saurio)
  • core/vdbe: move mutable fields from Program to ProgramState (Pere Diaz Bou)
  • avoid recursive read locks (Nikita Sivukhin)

Install turso_cli 0.4.3

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.4.3/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.4.3/turso_cli-installer.ps1 | iex"

Download turso_cli 0.4.3

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>
v0.4.2

Release Notes

Fixed
  • core/mvcc: rollback index rows (Pere Diaz Bou)
  • core/vdbe: check negative root pages with integrity_check (Pere Diaz Bou)
  • Track WAL state in savepoints for proper rollback (Pavan Nambi)
  • Reset checkpoint state when PRAGMA wal_checkpoint fails (Jussi Saurio)
  • fix/checkpoint: always read page1 from db file when truncating (Jussi Saurio)
  • Fix WAL truncate checkpoint discarding uncheckpointed frames (Jussi Saurio)

Install turso_cli 0.4.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.4.2/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.4.2/turso_cli-installer.ps1 | iex"

Download turso_cli 0.4.2

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>
v0.4.1

Release Notes

Fixed
  • Fix path not fsyncing the DB file after truncate checkpoint (Preston Thorpe)

Install turso_cli 0.4.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.4.1/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.4.1/turso_cli-installer.ps1 | iex"

Download turso_cli 0.4.1

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>
v0.4.0

Release Notes

Added
  • stress: Add support for BEGIN CONCURRENT transactions (Pekka Enberg)
  • stress: add semi colon to transaction statements when printing to log file (Pedro Muniz)
  • Add scripts/corruption-debug-tools (Jussi Saurio)
  • add more asserts in balance operation (Pedro Muniz)
  • bindings/java: implement JDBC4 CharacterStream binding methods (Orange banana)
  • add --db-ref optional arg to run turso-stress against "template" database (Nikita Sivukhin)
  • support format() function (Fahd Ashour)
  • feat(extensions): add stddev aggregate function to percentile module (Kelvin)
  • simulator: add proper handling for deffered transactions in shadow state (Pedro Muniz)
  • feat: Add support for HAVING without GROUP BY (Nuno Gonçalves)
  • Implement foreign key actions (Preston Thorpe)
  • implement pragma cache spill (Preston Thorpe)
  • Add multiverse debugging instructions (Mikaël Francoeur)
  • Implement busy handlers/callbacks (Preston Thorpe)
  • add readonly checks to ensure we do not change the header (Pedro Muniz)
  • implement state machine for op_journal_mode (Pedro Muniz)
  • Add io_uring option for IO backend to simulator (Preston Thorpe)
  • core/storage: implement Cache Spilling (Preston Thorpe)
  • Add dotnet bindings to Turso (Kopylov Dmitriy)
  • fix bug in the sync engine wasm implementation (Nikita Sivukhin)
  • feat(hash-join): add hash matching for equivalent integer and real values (Nuno Gonçalves)
  • implement state machine for parsing input in CLI (Pedro Muniz)
  • add rust-analyzer component to toolchain (Pedro Muniz)
  • Add script to run SQLancer against turso + fix some bugs found by doing so (Jussi Saurio)
  • Add greedy join ordering for large queries (>12 tables) (Jussi Saurio)
  • core/mvcc/cursor: add missing reset state in next (Pere Diaz Bou)
  • Add PR template (Preston Thorpe)
  • fix: JSON_INSERT now correctly inserts new keys in nested objects (Mikaël Francoeur)
  • Remove unused parameter in limbo_exec_rows and add ergonomic ExecRows trait for testing (Pedro Muniz)
  • translate/optimizer: Finish implementing ANALYZE (Preston Thorpe)
  • core/mvcc/cursor: implement count (Pere Diaz Bou)
  • support libsql:// protocol as a sync url in python driver (Nikita Sivukhin)
  • initialize global header on bootstrap (Pedro Muniz)
  • Rust binding add prepare to transaction (Dave Warnock)
  • add turso bot config (Pedro Muniz)
  • feat: adding check for unquoted literals in values() (Rohith Suresh)
  • Improved Python driver with opt-in asyncio support (Nikita Sivukhin)
  • tcl,makefile: add tcl test infraestructure for mvcc (Pere Diaz Bou)
  • core/mvcc: fix bounds check new rowid (Pere Diaz Bou)
  • Added dot product vector distance (Tejas)
  • sim: add binary tool that converts plan.sql to rust test file (Jussi Saurio)
  • Add explanation for concurrent transactions (Pekka Enberg)
  • testing/fuzz: Add new fuzzer for joins (Preston Thorpe)
  • add lib-release profile (Nikita Sivukhin)
  • planner/vdbe: implement Hash Joins as an alternative to Ephemeral Indexes (Preston Thorpe)
  • Add sync support to the SDK kit (Nikita Sivukhin)
  • fix/mvcc: always reinitialize index iterator on seek (Jussi Saurio)
  • translate/vdbe: add bloom filter (Preston Thorpe)
  • mvcc: implement logical log recovery for indexes + checkpointing of indexes (Jussi Saurio)
  • Docs: add table of contents to CONTRIBUTING.md (Fahd Ashour)
  • finish implementing "quote" scalar function for blob types (Preston Thorpe)
  • add alias to colnames explicitly as column-N (Pavan Nambi)
  • Add #[turso_macros::test] to automatically create tests that can run MVCC with minimal code changes (Pedro Muniz)
  • mvcc: introduce stateful "dual cursor" (Jussi Saurio)
  • introduce program execution state in order to run stmt to completion in case of finalize or reset (Nikita Sivukhin)
  • mvcc: add some plumbing for index support (Jussi Saurio)
  • core/mvcc/tests: add fuzz test for mvcc with checkpoint and with CRUD ops (Pere Diaz Bou)
  • translate/planner: Implement Index creation on arbitrary expressions (Preston Thorpe)
  • Support table xinfo (Nikita Sivukhin)
  • core/mvcc/cursor: implement prev and last (Pere Diaz Bou)
  • Trigger support (Jussi Saurio)
  • translate/insert: Implement INSERT OR REPLACE (Preston Thorpe)
  • Add ColDef struct to make schema::Column creation more ergonomic (Preston Thorpe)
  • Support DELETE ... RETURNING (Jussi Saurio)
  • Refactor RETURNING to support arbitrary expressions (Jussi Saurio)
  • bindings/java: implement JDBC4 InputStream binding methods (ASCII/Binary, no-length and long overloads) (Orange banana)
  • Add RowSet<Add/Read/Test> instructions and rowset implementation (Jussi Saurio)
  • bindings/java: implement stream binding methods (int, InputStream, int) in JDBC4PreparedStatement (Orange banana)
  • workflows: Add GITHUB_TOKEN to all Nyrkiö steps (Henrik Ingo)
  • extensions/vtabs: implement remaining opcodes (Preston Thorpe)
  • Throw an error when adding generated columns via an alter table (Rohith Suresh)
  • add some docs for index method (Nikita Sivukhin)
  • bindings/java: Implement setObject(int, Object) in JDBC4PreparedStatement (Orange banana)
Updated
  • Minor cleanups in function.rs and refactoring allocations (Preston Thorpe)
  • WAL: Stop copying page buffers during checkpoint (Preston Thorpe)
  • test runner: Test Converter (Pedro Muniz)
  • core/storage: Eliminate buffer copy in begin_write_btree_page() (Pekka Enberg)
  • Test runner Foundation (Pedro Muniz)
  • show failure output in the end with cargo nextest (Pedro Muniz)
  • core/storage: Zero remaining buffer bytes in begin_write_btree_page() (Pekka Enberg)
  • core/storage: Make PagerInner::buffer use Arc<Buffer> (Pekka Enberg)
  • Adjust merge script to truncate the PR template (Preston Thorpe)
  • Improvements to turso_stress (Mikaël Francoeur)
  • Page management cleanups (Pekka Enberg)
  • btree: reset AdvanceState after last state transition (Pedro Muniz)
  • Make BTree and MVCC cursor Send + Sync (Pedro Muniz)
  • Raise log level polling frequency (Mikaël Francoeur)
  • btree/pager: performance tuning (Preston Thorpe)
  • chore/btree: remove unused code (Jussi Saurio)
  • Modify bench-profile to allow generating better flamegraphs (Jussi Saurio)
  • all-mvcc: uncomment working tests (Pere Diaz Bou)
  • perf/sorter: sort pointers instead of records, use arena allocation (Jussi Saurio)
  • Remove TursoDBFactory (Mikaël Francoeur)
  • Save sync configuration (Nikita Sivukhin)
  • Optimized RecordCursor, Remove read_varint_fast (Khashayar Fereidani)
  • Run statements to completion on reset (Martin Mauch)
  • adjust tpc-h bench script to more easily compare results (Preston Thorpe)
  • stress: use multithreaded runtime (Jussi Saurio)
  • Conflict end txn (Nikita Sivukhin)
  • Accept SQL query using AsRef<str> instead of &str (Arto Bendiken)
  • core: remove mutex from ImmutableRecord::cursor (Jussi Saurio)
  • Enable tokio-unstable in Antithesis image (Mikaël Francoeur)
  • Prevent dropping columns that contain fk references (Preston Thorpe)
  • lint/perf: deny eager fallback function calls (ok_or, map_or, unwrap_or) (Jussi Saurio)
  • reset statement in query() (Mikaël Francoeur)
  • User rust-gdb instead of gdb (Mikaël Francoeur)
  • Antithesis observability improvements (Mikaël Francoeur)
  • Rust bindings sync (Nikita Sivukhin)
  • Refactor/improve performance of commit path (Preston Thorpe)
  • Sdk kit rust bindings (Nikita Sivukhin)
  • Yet another refactor of INSERT translation (Preston Thorpe)
  • stress: Make SQLite integrity check more explicit (Pekka Enberg)
  • Sdk kit refactoring (Nikita Sivukhin)
  • perf/vdbe: reuse&clear ephemeral cursor on repeat invocations (Jussi Saurio)
  • perf/prepare: various optimizations (Jussi Saurio)
  • Improve lexer performance by using SIMD (Khashayar Fereidani)
  • Remove unnecessary Cell and RefCell for better multithreaded safety (Pedro Muniz)
  • Partial sync experimental (Nikita Sivukhin)
  • remove unneeded Result in exec unixepoch (Juan V. García)
  • Lexer/Parser Optimization and refactoring (Khashayar Fereidani)
  • tcl: run PRAGMA journal_mode=experimental_mvcc with mvcc (Pere Diaz Bou)
  • SDK tweaks (Nikita Sivukhin)
  • core/mvcc: set_null_flag(false) when seek is called (Pere Diaz Bou)
  • Mark triggers as experimental (Jussi Saurio)
  • Set all testing dbs to WAL journal mode (Preston Thorpe)
  • Remove run once from Statement (Pedro Muniz)
  • Use u64::from instead of .into() (Elina)
  • remove the warning directive to allow environment filter to work (Pedro Muniz)
  • core/execute: use same code for generating rowid in mvcc as in btree (Pere Diaz Bou)
  • Improve MVCC DX by dropping --experimental-mvcc flag (Pekka Enberg)
  • aws/sim: disable io-uring (Jussi Saurio)
  • Local sync server (Nikita Sivukhin)
  • Simplify slot bitmap to remove complex unused optimizations (Preston Thorpe)
  • clean up core tester to use conn.execute and conn.exec_rows for parsing correctly the expected values from select queries (Pedro Muniz)
  • Connection small refactor (Dave Warnock)
  • Enable MVCC with PRAGMA journal_mode (Pedro Muniz)
  • propagate partial sync settings in the web (Nikita Sivukhin)
  • Consider Order by expressions collation when deciding candidate index for iteration (Pedro Muniz)
  • Checkpoint cleanup (Jussi Saurio)
  • use cmath from system libraries only in tests in order to be more portable (Nikita Sivukhin)
  • No tempfiles on wasm (Nikita Sivukhin)
  • core: Make Pager thread-safe (Pekka Enberg)
  • update go mod name as we will serve module through custom proxy (Nikita Sivukhin)
  • Install sqlite locally to run tests and other scripts (Pedro Muniz)
  • rename speculative load to prefetch (docs already uses this terminology) (Nikita Sivukhin)
  • docs: update clippy command in CONTRIBUTING.md to match CI job (Nuno Gonçalves)
  • stress: Make random seed configurable (Pekka Enberg)
  • Devcontainer setup (Nikita Sivukhin)
  • core/mvcc/cursor: return previous max id (Pere Diaz Bou)
  • Update wording of AI section of PR template (Jussi Saurio)
  • whopper: Simulate time (Pekka Enberg)
  • increase lantency check for flaky test in test_read_path.rs (Preston Thorpe)
  • run get(...) to completion - otherwise INSERT ... RETURNING will be executed incorrectly (Nikita Sivukhin)
  • ci: run TCL tests for MVCC under CI (Pere Diaz Bou)
  • Get mutable reference to table in Schema so we can modify it with Arc::make_mut (Pedro Muniz)
  • also check for None checkpointed_txid_max_old when determining if RowVersion exists in the Db (Pedro Muniz)
  • Go driver (Nikita Sivukhin)
  • Minor improvements and refactoring in btree.rs (Preston Thorpe)
  • revert change in index_scan_compound_key_fuzz (Pedro Muniz)
  • Make checkpointed_txid_max_old be an Optional<NonZeroU64> (Pedro Muniz)
  • Remove some useless clones in pager.rs (Preston Thorpe)
  • upgrade cargo dist to 0.30.2 (Nikita Sivukhin)
  • Partial sync improvements (Nikita Sivukhin)
  • Prevent concurrent tx ctrl and write (Nikita Sivukhin)
  • core/mvcc/cursor: ignore non visible rows on "last" (Pere Diaz Bou)
  • core/mvcc/tests: un-ignore seek tests (Pere Diaz Bou)
  • CI: simulator tweaks (Jussi Saurio)
  • chore: remove experimental_indexes feature flags (Jussi Saurio)
  • do not propagate the MvStore to opcodes (Pedro Muniz)
  • Run BEFORE and AFTER update triggers on upserts (Mikaël Francoeur)
  • Ignore SQLITE_BUSY during auto-checkpoint (Mikaël Francoeur)
  • Allocate Page 1 in pager on open (Pedro Muniz)
  • Prevent creating index on rowid pseudo-column (Mikaël Francoeur)
  • Improve Android compatibility (Martin Mauch)
  • Simulator Roadmap (Alperen Keleş)
  • guard subjournal access within single connection (Nikita Sivukhin)
  • Turso sdk kit version (Nikita Sivukhin)
  • Automatically Propagate Encryption options (Pedro Muniz)
  • core/mvcc: state machines for prev, next, exists, rewind, last (Pere Diaz Bou)
  • btree/balance: assert that if multiple overflow cells, they are adjacent sequential (Jussi Saurio)
  • simulator: generate more INSERT INTO ... SELECT self-inserts (Mikaël Francoeur)
  • Arc swap MvStore + centralize MvStore acquisition (Pedro Muniz)
  • mvcc: do not store index data twice in Row (Jussi Saurio)
  • Col name in trigger subquery (Rohith Suresh)
  • Update AEGIS crate version (Avinash Sajjanshetty)
  • SDK kit (Nikita Sivukhin)
  • Ensure LIKE is case-sensitive for non-ASCII characters (Tejas)
  • sim/aws: memory IO 100% of the time, differential 50% of the time (Jussi Saurio)
  • mvcc: reconstruct index rows on logical log recovery (Jussi Saurio)
  • More mvcc index stuff (Jussi Saurio)
  • mvcc: make more MvccLazyCursor ops compatible with indexes (Jussi Saurio)
  • drop triggers if table drops (Pavan Nambi)
  • Kill unwrap() calls in MVCC module (Pekka Enberg)
  • Kill unwrap() in vector module (Pekka Enberg)
  • Kill unwrap() calls in VDBE module (Pekka Enberg)
  • Tidied imports in Rust binding example without unwrap (Dave Warnock)
  • Rust binding example without unwrap (Dave Warnock)
  • Kill unwrap() calls in JSON module (Pekka Enberg)
  • use i64 for registers p1,p2,p3,p5 in EXPLAIN output (Mikaël Francoeur)
  • Kill unwrap() in macros (Pekka Enberg)
  • Kill unwrap in incremental module (Pekka Enberg)
  • mvcc: refactor RowID.row_id to be either i64 or a record (Jussi Saurio)
  • Kill unwrap() calls in extensions (Pekka Enberg)
  • SQLite C API improvements (Nikita Sivukhin)
  • simulator: only check all tables if we have any tables to check (Pedro Muniz)
  • core: Switch to parking_lot::Mutex (Pekka Enberg)
  • Simulator: refactor and simplify InteractionPlan (Pedro Muniz)
  • Enable nested self-inserts in simulator (Mikaël Francoeur)
  • correct order in column creation in join tests (Pavan Nambi)
  • Nyrkiö: Set all comment-on to false (Henrik Ingo)
  • Partial sync basic (Nikita Sivukhin)
  • Use AsValueRef in more functions (Pedro Muniz)
  • treat parameters as "constant" within a query (Nikita Sivukhin)
  • Completion: make it Send + Sync (Nikita Sivukhin)
  • core/mvcc: use btree cursor to navigate rows (Pere Diaz Bou)
  • core: update aegis (Daeho Ro)
  • Refactor affinity conversions for reusability (Pedro Muniz)
  • Create AsValueRef trait to allow us to be agnostic over ownership of Value or ValueRef (Pedro Muniz)
  • Move value functions to separate file (Pedro Muniz)
  • Avoid heavy macro (Nikita Sivukhin)
  • Stop blob json parsing at null terminator (Duy Dang)
  • core/translate: Remove unused ParamState (Preston Thorpe)
  • Toy index improvements (Nikita Sivukhin)
  • use dyn DatabaseStorage instead of DatabaseFile (Nikita Sivukhin)
  • Prevent DROP TABLE when table is referenced by foreign keys (Joao Faria)
  • core/vdbe Handle renaming child FK definitions in rename table stmt (Preston Thorpe)
  • Prevent misuse of subqueries that return multiple columns (Jussi Saurio)
  • Optimize and refactor schema::Column type (Preston Thorpe)
  • Clean up Connection::from_uri() by using DatabaseOpts (Rohith Suresh)
  • Select correct collation sequence for compound select (Pedro Muniz)
  • core: Disable autovacuum by default (Pekka Enberg)
  • Make mimalloc dependency optional (Pekka Enberg)
  • Update Java package version in scripts/update-version.py (Pekka Enberg)
Fixed
  • stress: Keep going on I/O errors instead of panicking (Pekka Enberg)
  • fix: lint warnings unused variable/import in release build (Khashayar Fereidani)
  • integrity check: do not throw errors if pending byte page is never used (Pedro Muniz)
  • fix(storage): improve error message for truncated database files (Srinivas A)
  • fix/pager&wal: ensure wal write lock held when rolling back frame_cache (Jussi Saurio)
  • Enable debug_assertions for antithesis profile (Pekka Enberg)
  • General improvements, micro-optimizations and bug fix for core/functions (Khashayar Fereidani)
  • fix dockerfiles (Jussi Saurio)
  • Fix DROP TABLE to properly handle FK actions and allow for orphaned/NULL FK refs (Preston Thorpe)
  • core/mvcc/logical_log: off by one error reading logical log encrypted (Pere Diaz Bou)
  • Fix squeue overflow issue in io_uring (Preston Thorpe)
  • Affinity fixes (Pedro Muniz)
  • Read only fixes (Pedro Muniz)
  • slightly adjust fixed unstable test (Nikita Sivukhin)
  • CI test setup fixes + fix GroupCompletion bug (Pedro Muniz)
  • pyturso: fix panic (Nikita Sivukhin)
  • fix(core/translate): apply affinity conversion to hash join build and probe keys (Nuno Gonçalves)
  • fix/core: fix transaction issues (Jussi Saurio)
  • sim: fix apply_snapshot for create table, create index, drop column (Jussi Saurio)
  • fix stack overflow in long unary expressions ("' from Jussi Saurio)
  • Fix RTRIM ignoring trailing tabs (Krishna Vishal)
  • Fix incorrect conversion from TEXT to INTEGER when text is a number followed by a trailing non-breaking space (Krishna Vishal)
  • fix stack overflow in long unary expressions (")
  • Sync fixes (Nikita Sivukhin)
  • fix(core): prevent ALTER COLUMN from resulting in tables with only generated columns (Nuno Gonçalves)
  • core/storage: fixes for the commit path and io_uring (Preston Thorpe)
  • aws/sim: fixes and tweaks (Jussi Saurio)
  • fix succeeded check (Pedro Muniz)
  • fix/sim: all alter table ops must be recorded and applied in order (Jussi Saurio)
  • fix coroutine panic: replace ended_coroutine Bitfield with vec (Jussi Saurio)
  • Fix: update schema if DDL commit succeeded but checkpoint failed (Jussi Saurio)
  • Fix race condition in WAL frame_cache update with io_uring (Mikaël Francoeur)
  • fix(json): properly serialize infinite values (Nuno Gonçalves)
  • fix(core/util): reject integer primary key underflow (Nuno Gonçalves)
  • fix/core: decouple autocheckpoint result from transaction durability (Jussi Saurio)
  • Fix StreamingWalReader behavior with checksums of uncommitted frames (Preston Thorpe)
  • Fix ignored completion in free_page (Preston Thorpe)
  • Fix more instances of marking pages dirty after modification (Jussi Saurio)
  • fix/pager: mark freelist trunk page dirty BEFORE modifying it (Jussi Saurio)
  • fix/sim: modify rows in ALTER TABLE properly (Jussi Saurio)
  • core: Fix integrity_check pragma code generation (Pekka Enberg)
  • antithesis: Fix unique constraint exception handling in stress-composer tests (Pekka Enberg)
  • Fix Github go workflow (Nikita Sivukhin)
  • sim: fix bug in apply_snapshot (Jussi Saurio)
  • Sync better error messages (Nikita Sivukhin)
  • Fix CTE scope propagation for compound SELECTs (Martin Mauch)
  • Sqlite3 compat fix (Nikita Sivukhin)
  • Sim transaction fixes (Jussi Saurio)
  • sim/aws: comment on existing issues instead of skipping duplicates (Jussi Saurio)
  • Fix complex unique sqlite3 compat (Nikita Sivukhin)
  • fix/btree: disable move_to_rightmost optimization with triggers (Jussi Saurio)
  • Fix descending index scan returning rows when seek key is NULL (Jussi Saurio)
  • Fix external sorter losing rows when chunks need async IO (Jussi Saurio)
  • sim: stop ignoring sql execution errors (Jussi Saurio)
  • Fix two bugs with compound selects (Jussi Saurio)
  • Fix IN operator translation logic (Nikita Sivukhin)
  • fix/mvcc: seek() must seek from both mv store and btree (Jussi Saurio)
  • Fix panic in optimizer when usable constraint refs is empty (Preston Thorpe)
  • optimizer: fix incorrect index_col_pos assigned when multiple constraints ref same join key (Preston Thorpe)
  • Bloom filter fixes (Preston Thorpe)
  • fix: escape backslashes in json_object string values (Martin Mauch)
  • fix/mvcc: use existing schema object in mvcc bootstrap (Jussi Saurio)
  • Mvcc bugfixes (Jussi Saurio)
  • Fix vtab memory leak (Nikita Sivukhin)
  • Fix comparison of large numbers (Mikaël Francoeur)
  • Fix to Google Books link in CONTRIBUTING (Juan V. García)
  • core/mvcc: fix exists to use BTreeCursor as fallback (Pere Diaz Bou)
  • core/io: Improve error handling (Pekka Enberg)
  • core/index_method: Improve error handling in toy_vector_spare_ivf.rs (Pekka Enberg)
  • Triggers: fix issues with ALTER TABLE (Jussi Saurio)
  • Return parse error if NULLS LAST used in ORDER BY (Jussi Saurio)
  • Fix: Drop internal DBSP table when dropping materialized view (Martin Mauch)
  • Fix seek not applying correct affinity to seek expr (Pedro Muniz)
  • Fix EXISTS on LEFT JOIN null rows (Duy Dang)
  • Fix error handling on provided insert column count mismatch (Jussi Saurio)
  • core/vdbe: Fix incorrect unreachable condition in op_seek_rowid (Preston Thorpe)
  • Update and fix nix build (Alexander Hirner)
  • Fix INSERT UNION ALL (Duy Dang)
  • Fix LEFT JOIN subqueries reusing stale right-side values (Duy Dang)
  • Throw an error in case duplicate CTE names are found (Rohith Suresh)
  • Fix self-insert SUM when table uses INTEGER PRIMARY KEY (Duy Dang)

Install turso_cli 0.4.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.4.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.4.0/turso_cli-installer.ps1 | iex"

Download turso_cli 0.4.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>
v0.3.2

Release Notes

Updated
  • core: Disable autovacuum by default (Pekka Enberg)
  • Update Java package version in scripts/update-version.py (Pekka Enberg)

Install turso_cli 0.3.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.3.2/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.3.2/turso_cli-installer.ps1 | iex"

Download turso_cli 0.3.2

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>
v0.3.1

Release Notes

Updated
  • Make mimalloc dependency optional (Pekka Enberg)

Install turso_cli 0.3.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.3.1/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.3.1/turso_cli-installer.ps1 | iex"

Download turso_cli 0.3.1

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>
v0.3.0

Release Notes

Added
  • Implement wasNull tracking in ResultSet getter methods (김민석)
  • Support subqueries in all positions of a SELECT statement (Jussi Saurio)
  • Initialize LIMIT after after ORDER BY / GROUP BY initialization (Jussi Saurio)
  • index_method: implement basic trait and simple toy index (Nikita Sivukhin)
  • Where clause subquery support (Jussi Saurio)
  • sqlite3: Add multi-statement support for sqlite3_exec() (Preston Thorpe)
  • Add DISTINCT support to aggregate operator (Glauber Costa)
  • docs: Add vector search section to database manual (Pekka Enberg)
  • Support statement-level rollback via anonymous savepoints (Jussi Saurio)
  • Add AtomicEnum proc macro to generate atomic wrappers to replace RwLocks (Preston Thorpe)
  • Fix git directory resolution in simulator to support worktrees (Jussi Saurio)
  • Add Miri support for turso_stress, with bash scripts to run (Bob Peterson)
  • tests: Add rowid alias fuzz test case (Pekka Enberg)
  • core/translate: throw parse error on unsupported GENERATED column constraints (Preston Thorpe)
  • translate/insert: more refactoring and support INSERT OR IGNORE (Preston Thorpe)
  • sql_generation: Fix implementation of LTValue and GTValue for Text types (Jussi Saurio)
  • core/mvcc: implement CursorTrait on MVCC cursor (Pere Diaz Bou)
  • Add test case for vector() format crash (Pedro Muniz)
  • Add correct unique constraint test for tcl (Pedro Muniz)
  • stress: Add busy timeout support with 5 second default (Pekka Enberg)
  • Add WINDOW functions to COMPAT.md (Jussi Saurio)
  • core/translate: Add if alias and allow iff to have more arguments (Pavan Nambi)
  • core/btree: try to introduce trait for cursors (Pere Diaz Bou)
  • bindings/java: Add support for publishing to Maven Central (Kim Seon Woo)
  • add Calendar-based timezone conversion support in JDBC4ResultSet (김민석)
  • Add Nightly versions of benchmarks that run on Nyrkiö runners (Henrik Ingo)
  • Add support for sqlite_version() star syntax (Glauber Costa)
  • core/translate: implement basic foreign key constraint support (Preston Thorpe)
  • Simulator: Add Drop and pave the way for Schema changes (Pedro Muniz)
  • core/io: remove new_dummy in place of new_yield (Pere Diaz Bou)
  • Add MVCC checkpoint threshold pragma (bit-aloo)
  • core/incremental: Implement "is null" and "is not null" tests for view filter (Glauber Costa)
  • core/mvcc: implement PartialOrd for RowId (Pere Diaz Bou)
  • core/io: Add completion group API for managing multiple I/O operations (Pekka Enberg)
  • Add short writes to unreliable-libc (FamHaggs)
  • add basic examples for database-wasm package (Nikita Sivukhin)
  • core/wal: introduce transaction_count, same as iChange in sqlite (Pere Diaz Bou)
Updated
  • antithesis: Upload config image in GitHub Actions workflow (Pekka Enberg)
  • perf/throughput: Improve reproducibility (Pekka Enberg)
  • translate: disallow correlated subqueries in HAVING and ORDER BY (Jussi Saurio)
  • Stmt reset cursors (Nikita Sivukhin)
  • reset move_to_right_state cached state in case of quick balancing (Nikita Sivukhin)
  • index_method: fully integrate into query planner (Nikita Sivukhin)
  • core: Switch to FxHash to improve performance (Pekka Enberg)
  • bindings/rust: Enable mimalloc as global allocator (Pekka Enberg)
  • index method syntax extension (Nikita Sivukhin)
  • Tighten Nyrkio p-value to 0.00001 (Henrik Ingo)
  • Strict numeric cast for op_must_be_int (bit-aloo)
  • core/vdbe: Reuse cursor in op_open_write() (Pekka Enberg)
  • core: Switch RwLock<Arc<Pager>> to ArcSwap<Pager> (Pekka Enberg)
  • Always returns Floats for sum and avg on DBSP aggregations (Glauber Costa)
  • perf/throughput: Use connection per transaction in rusqlite benchmark (Pekka Enberg)
  • Return null terminated strings from sqlite3_column_text (Preston Thorpe)
  • Order by heap sort (Nikita Sivukhin)
  • core/storage: Cache schema cookie in Pager (Pekka Enberg)
  • github: Run fuzz tests in a separate workflow (Pekka Enberg)
  • tests: Separate integration and fuzz tests (Pekka Enberg)
  • Vector speedup (Nikita Sivukhin)
  • parser: translate boolean values to literal when parsing column constraints (Preston Thorpe)
  • core/io: Make random generation deterministically simulated (Pedro Muniz)
  • core: move BTreeCursor under MVCC cursor (Pere Diaz Bou)
  • Move completion code to separate file (Pedro Muniz)
  • avoid unnecessary allocations (Nikita Sivukhin)
  • Make sure explicit column aliases have binding precedence in orderby (Pavan Nambi)
  • tests/integration: Reduce collation fuzz test iterations (Pekka Enberg)
  • Switch random blob creation to get_random (Pedro Muniz)
  • Shared WAL lock scoping (Pedro Muniz)
  • Remove tests that alter testing.db from views.test (Preston Thorpe)
  • tests/integration: Disable rowid alias differential fuzz test case (Pekka Enberg)
  • core/storage: Reduce logging level (Pekka Enberg)
  • cli: Improve manual page display (Pavan Nambi)
  • stress: prevent thread from holding write lock and then stopping (Jussi Saurio)
  • translate/select: prevent multiple identical non-aliased table references (Preston Thorpe)
  • Prevent on conflict column definitions on CREATE TABLE or opening DB (Preston Thorpe)
  • cli: .tables and .indexes to show data from attached tables aswell (Konstantinos Artopoulos)
  • bindings/rust: propagate the DropBehavior of a dropped tx to next access of DB, instead of panicing (Jussi Saurio)
  • Replace io_yield_many with completion groups (Pekka Enberg)
  • core/bree: remove duplicated code in BTreeCursor (Pere Diaz Bou)
  • core: Unsafe Send and Sync pushdown (Pekka Enberg)
  • Run SQLite integrity check after stress test run (Pedro Muniz)
  • Document ThreadSanitizer in CONTRIBUTING.md (Pekka Enberg)
  • tests/fuzz: Accept SEED env var for all fuzz tests (Preston Thorpe)
  • Make Rust bindings actually async (Pedro Muniz)
  • perf/throughput: force sqlite to use fullfsync (Pedro Muniz)
  • relax check in the vector test (Nikita Sivukhin)
  • Allow using indexes to iterate rows in UPDATE statements (Jussi Saurio)
  • Refactor INSERT translation to a modular setup with emitter context (Preston Thorpe)
  • increment Changes() only once conditionally (Pavan Nambi)
  • make comparison case sensitive (Pavan Nambi)
  • bindings/rust: Bump version recommendation to 0.2 (Kyle Kelley)
  • Run simulator under Miri (Bob Peterson)
  • Import workspace crates by name and not path (Pedro Muniz)
  • names shall not be shared between tables,indexs,vtabs,views (Pavan Nambi)
  • Get aliases to where shall they be used (Pavan Nambi)
  • remove cfg for MAP_ANONYMOUS (Pedro Muniz)
  • Simulator: Drop Index (Pedro Muniz)
  • Restrict joins to max 63 tables and allow arbitrary number of table columns (Jussi Saurio)
  • Simulator: persist files in sim memory IO for integrity check (Pedro Muniz)
  • Simulator: ALTER TABLE (Pedro Muniz)
  • Move all checksum tests behind the feature flag (Avinash Sajjanshetty)
  • Nyrkiö nightly: Reduce frequency to 1 per 24h (Henrik Ingo)
  • Vector improvements (Nikita Sivukhin)
  • Optimize sorter (Jussi Saurio)
  • Make sqlite_version() compatible with SQLite (Glauber Costa)
  • optimizer: optimize range scans to use upper and lower bounds more efficiently (Jussi Saurio)
  • translate: make bind_and_rewrite_expr() reject unbound identifiers if no referenced tables exist (Jussi Saurio)
  • Simulator: ignore Property::AllTableHaveExpectedContent when counting stats (Pedro Muniz)
  • When pwritev fails, clear the dirty pages (Pedro Muniz)
  • mvcc: Disable automatic checkpointing by default (Pekka Enberg)
  • Integrity check enhancements (Jussi Saurio)
  • Remove unsafe pointers (RawSlice) from RefValue (Levy A.)
  • Make table name not repeat in simulator (bit-aloo)
  • perf/throughput: Delete database before benchmark run (Pekka Enberg)
  • emit proper column information for explain prepared statements (Nikita Sivukhin)
  • core/mvcc/logical-log: switch RwLock to parking_lot (Pere Diaz Bou)
  • Modify Interactions Generation to only generate possible queries (Pedro Muniz)
  • eliminate the need for another Once in Completion (Pedro Muniz)
  • Rename Completion methods (Pedro Muniz)
  • Top level examples (Nikita Sivukhin)
  • docs: Explain BEGIN CONCURRENT (Pekka Enberg)
  • MVCC: do checkpoint writes in ascending order of rowid (Jussi Saurio)
  • core/mvcc: filter out seek results where is not same table_id (Pere Diaz Bou)
  • Simulator diff print (Pedro Muniz)
  • Improve simulator cli (bit-aloo)
  • core/mvcc: automatic logical log checkpointing on commit (Pere Diaz Bou)
  • remove dyn DatabaseStorage replace it with DatabaseFile (Pedro Muniz)
  • Actually enforce uniqueness in create unique index (Jussi Saurio)
  • core/wal: check index header on begin_write_tx (Pere Diaz Bou)
  • Disallow unexpected interop between WAL mode and MVCC mode (Jussi Saurio)
Fixed
  • Fix database state going back in time after sync (Nikita Sivukhin)
  • Fix foreign key constraint enforcement on UNIQUE indexes (Jussi Saurio)
  • bindings/javascript: Improve open error messages (Pekka Enberg)
  • core/storage: Fix WAL already enabled issue (Pekka Enberg)
  • Return better syntax error messages (Diego Reis)
  • core/vdbe: fix ALTER COLUMN to propagate constraints to other table references (Preston Thorpe)
  • core/translate: fix ALTER COLUMN to propagate other constraint references (Preston Thorpe")
  • core/translate: fix ALTER COLUMN to propagate other constraint references (Preston Thorpe)
  • Fix deferred FK violations check before committing to WAL (Jussi Saurio)
  • translate/select: Fix rewriting Rowid expression when no btree table exists in joined table refs (Preston Thorpe)
  • Throw parse error on CHECK constraint in create table (Preston Thorpe)
  • Fix: rolling back tx on Error should set autocommit to true (Jussi Saurio)
  • Fix: outer CTEs should be available in subqueries (Jussi Saurio)
  • Fix change counter incrementation (Jussi Saurio)
  • Fix another "should have been rewritten" translation panic (Jussi Saurio)
  • Simulator: fix alter table shadowing to modify index column name (Pedro Muniz)
  • fix backwards compatible rowid alias behaviour (Pedro Muniz)
  • Fix typo in manual.md (Yevhen Kostryka)
  • core/vdbe: Improve IdxDelete error messages with context (Pekka Enberg)
  • Fix disallow reserved prefixes in ALTER TABLE RENAME TO (xmchx)
  • Fix incorrectly using an equality constraint twice for index seek (Jussi Saurio)
  • Fix IN operator NULL handling (Diego Reis)
  • Cleanup Simulator + Fix Column constraints in sql generation (Pedro Muniz)
  • Fix rusqlite compatibility claim (Dave Warnock)
  • Fix re-entrancy of op_destroy (used by DROP TABLE) (Jussi Saurio)
  • Fix VDBE program abort (Nikita Sivukhin)
  • Fix attach I/O error with in-memory databases (Preston Thorpe)
  • core/incremental: Fix re-insertion of data with same key (Glauber Costa)
  • core/io/unix: Fix short writes in try_pwritev_raw() (FamHaggs)

Install turso_cli 0.3.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.3.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.3.0/turso_cli-installer.ps1 | iex"

Download turso_cli 0.3.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>
v0.2.2

Release Notes

Added
  • add basic examples for database-wasm package (Nikita Sivukhin)
  • core/incremental: Implement "is null" and "is not null" tests for view filter (Glauber Costa)
Updated
  • core/mvcc: filter out seek results where is not same table_id (Pere Diaz Bou)
Fixed
  • Fix attach I/O error with in-memory databases (Preston Thorpe)
  • core/incremental: Fix re-insertion of data with same key (Glauber Costa)

Install turso_cli 0.2.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.2.2/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.2.2/turso_cli-installer.ps1 | iex"

Download turso_cli 0.2.2

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-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>
v0.2.1

Release Notes

Added
Updated
  • Actually enforce uniqueness in create unique index (Jussi Saurio)
  • Disallow unexpected interop between WAL mode and MVCC mode (Jussi Saurio)
Fixed
  • core/io/unix: Fix short writes in try_pwritev_raw() (FamHaggs)

Install turso_cli 0.2.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.2.1/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.2.1/turso_cli-installer.ps1 | iex"

Download turso_cli 0.2.1

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-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>
v0.2.0

Release Notes

Added
  • docs: Add section on MVCC limitations (Pekka Enberg)
  • sim: add Profile::SimpleMvcc (Jussi Saurio)
  • Add encryption internals docs (Avinash Sajjanshetty)
  • core/storage: Apple platforms support (Charly Delaroche)
  • Reject unsupported FROM clauses in UPDATE (Mikaël Francoeur)
  • Add Database::indexes_enabled() (Jussi Saurio)
  • Add Mold linker setup to CONTRIBUTING.md (Pekka Enberg)
  • support multiple conflict clauses in upsert (Nikita Sivukhin)
  • stress: add option to choose how many tables to generate (Pere Diaz Bou)
  • add manual page about materialized views (Glauber Costa)
  • support mixed integer and float expressions in the expr_compiler (Glauber Costa)
  • github: Add 30 minute timeout to all jobs (Pekka Enberg)
  • Add CAST to fuzzer (Levy A.)
  • Implement json_tree (Mikaël Francoeur)
  • translate: disable support for UPDATE ... ORDER BY (Jussi Saurio)
  • MVCC: support alter table (Jussi Saurio)
  • mvcc: add blocking checkpoint (Jussi Saurio)
  • Add built-in manual pages for Turso (Glauber Costa)
  • Support referring to rowid as rowid or oid (Jussi Saurio)
  • translate: implement Sequence opcode and fix sort order (Preston Thorpe)
  • mvcc: add blocking checkpoint lock (Jussi Saurio)
  • translate/emitter: Implement partial indexes (Preston Thorpe)
  • Support UNION queries in DBSP-based Materialized Views (Glauber Costa)
  • Add encryption throughput test (Avinash Sajjanshetty)
  • Support JOINs in DBSP materialized views (Glauber Costa)
  • Fix C API compatibility tests and add a minimal CI (Andrea Peruffo)
  • Introduce instruction VTABLE (Lâm Hoàng Phúc)
  • core/mvcc: introduce with_header for MVCC header update tracking (Pere Diaz Bou)
  • Inital support for window functions (Piotr Rżysko)
  • Implement Min/Max aggregators (Glauber Costa)
  • Add quoted identifier test cases for ALTER TABLE (Levy A.)
  • add perf/throughput/rusqlite to workspace (Pedro Muniz)
  • add perf/throughput/turso to workspace (Pedro Muniz)
  • Add per page checksums (Avinash Sajjanshetty)
  • core/throughput: Add per transaction think time support (Pekka Enberg)
  • Fix simulator docker build chef by adding whopper directory (Preston Thorpe)
  • Implement the balance_quick algorithm (Jussi Saurio)
  • benchmark: introduce simple 1 thread concurrent benchmark for mvcc/sq… (Pere Diaz Bou)
  • perf: Add simple throughput benchmark (Pekka Enberg)
  • Add BEGIN CONCURRENT support for MVCC mode (Pekka Enberg)
  • add explicit usize type annotation to range iterator in test (Denizhan Dakılır)
  • whopper: A new DST with concurrency (Pekka Enberg)
  • serverless: Add Connection.reconnect() method (Mayank)
  • Return parse error for unsupported exprs (Jussi Saurio)
  • translate: return parse error for unsupported join types (Jussi Saurio)
  • Add scripts that help debug bugs from simulator (Jussi Saurio)
  • core: Support ceiling modifier in datetime (Ceferino Patino)
Updated
  • CI: run long fuzz tests and stress on every PR, use 2 threads for stress (Jussi Saurio)
  • Disallow INDEXED BY / NOT INDEXED in select (Jussi Saurio)
  • core/mvcc: Rename "-lg" to "-log" (Pekka Enberg)
  • docs: Document more CLI command line options (Pekka Enberg)
  • Update man pages for encryption (Avinash Sajjanshetty)
  • core/mvcc: Return completions from logical log methods (Pedro Muniz)
  • Improve MCP configuration docs (Jamie Barton)
  • Enable encryption properly in Rust bindings, whopper, and throughput tests (Avinash Sajjanshetty)
  • Enable checksums only if its opted in via feature flag (Avinash Sajjanshetty)
  • Sync engine defered sync (Nikita Sivukhin)
  • core/vdbe: Avoid cloning Arc<MvStore> on every VDBE step (Pekka Enberg)
  • mvcc: dont try to end pager tx on connection close (Jussi Saurio)
  • Allow workflow_dispatch for all CI to allow for re-running jobs (Preston Thorpe)
  • printf should truncates floats (Pavan Nambi)
  • simulator: reopen database with mvcc and indexes when necessary (Pedro Muniz)
  • core/storage: Switch page cache queue to linked list (Pekka Enberg)
  • Improve throughput benchmarks (Pekka Enberg)
  • Beta (Pekka Enberg)
  • make connect() method optional and call it implicitly on first query execution (Nikita Sivukhin)
  • mvcc: dont use mv store for ephemeral tables (Jussi Saurio)
  • Simulator: Concurrent transactions (Pedro Muniz)
  • Measure read/write latencies in encryption benchmarks (Avinash Sajjanshetty)
  • simplify exec_trim code + only pattern match on whitespace char (Pedro Muniz)
  • MVCC: Handle table ID / rootpages properly for both checkpointed and non-checkpointed tables (Jussi Saurio)
  • Make encryption opt in via flag (Avinash Sajjanshetty)
  • core/mvcc: Optimize exclusive transaction check (Pekka Enberg)
  • core: change root_page to i64 (Pere Diaz Bou)
  • core/storage: Remove unused import from encryption.rs (Pekka Enberg)
  • small improvement of stress testing tool (Nikita Sivukhin)
  • sum() can throw integer overflow (Duy Dang)
  • correct span in ParseUnexpectedToken (Lâm Hoàng Phúc)
  • Remove double-quoted identifier assert (Diego Reis)
  • substr scalar should also work with non-text values (Diego Reis)
  • core: Disallow CREATE INDEX when MVCC is enabled (Pekka Enberg)
  • javascript: Rename "browser" packages to "wasm" (Pekka Enberg)
  • core/vdbe: Wrap Program::n_change with AtomicI64 (Pekka Enberg)
  • use explicit null if it set instead of column default value (Nikita Sivukhin)
  • Improve encryption module (Avinash Sajjanshetty)
  • Remove vendored parser now that we have our own (Preston Thorpe)
  • core/storage: Wrap Pager::commit_info with RwLock (Pekka Enberg)
  • core/storage: Wrap WalFile::{max,min}_frame with AtomicU64 (Pekka Enberg)
  • core/storage: Wrap WalFile::max_frame_read_lock_index with AtomicUsize (Pekka Enberg)
  • core/storage: Mark Page as Send and Sync (Pekka Enberg)
  • Move turso.png image to assets directory (Preston Thorpe)
  • core/translate: rewrite default column value from identifier to string literal (Preston Thorpe)
  • core/translate: Persist NOT NULL column constraint to schema table (Preston Thorpe)
  • Sqlean fuzzy string (Danawan Bimantoro)
  • Make Sorter Send and Sync (Pekka Enberg)
  • length shall not count when it sees nullc (Pavan Nambi)
  • core/storage: Wrap WalFile::syncing with AtomicBool (Pekka Enberg)
  • Make MVCC code Send and Sync (Pekka Enberg)
  • core: recover logical log on Database::connect (Pere Diaz Bou)
  • core/storage: Display page category for rowid integrity check failure (Pekka Enberg)
  • translate: refactor arguments and centralize parameter context (Preston Thorpe)
  • translate: disallow creating/dropping internal tables (Jussi Saurio)
  • Improve DBSP view serialization (Glauber Costa)
  • Disallow multiple primary keys in table definition (Jussi Saurio)
  • Display nothing for .schema command when table not found (Preston Thorpe)
  • Make Connection Send (Pekka Enberg)
  • core/mvcc/logical-log: refactor get log path in tests (Pere Diaz Bou)
  • Disallow ORDER BY and LIMIT in a non-compound VALUES() statement (Jussi Saurio)
  • core: Wrap Connection::mv_tx with RwLock (Pekka Enberg)
  • Autoincrement (Pavan Nambi)
  • core/mvcc/logical-log: load logical log from disk (Pere Diaz Bou)
  • Normalize target table name identifier on table or column rename (Iaroslav Zeigerman)
  • use a different seed for gen_rng (Pedro Muniz)
  • core: Wrap Connection::attached_databases with RwLock (Pekka Enberg)
  • core/mvcc/logical-log: on disk format for logical log (Pere Diaz Bou)
  • Wrap more Connection fields with atomics (Pekka Enberg)
  • core/mvcc: Wrap Transaction::database_header with RwLock (Pekka Enberg)
  • core: Wrap Connection::capture_data_changes in RwLock (Pekka Enberg)
  • antithesis-tests: Rename "utils.py" to "helper_utils.py" (Pekka Enberg)
  • Make some Connection fields atomic (Pekka Enberg)
  • Simulator Runtime generation (Pedro Muniz)
  • Use SQL over HTTP batch statements for sync push (Nikita Sivukhin)
  • JavaScript bindings browser tests (Nikita Sivukhin)
  • core: Wrap Connection::transaction_state with RwLock (Pekka Enberg)
  • core: Wrap Connection::autocommit in AtomicBool (Pekka Enberg)
  • use wasm-runtime from NPM instead of patched sources (Nikita Sivukhin)
  • core: Wrap Connection::database_schemas in RwLock (Pekka Enberg)
  • core: Wrap Connection::schema in RwLock (Pekka Enberg)
  • Stop incrementing n_changes for idx delete (Preston Thorpe)
  • core: Wrap Connection::pager in RwLock (Pekka Enberg)
  • Disable extension loading at runtime (Preston Thorpe)
  • mvcc: simplify StateMachine (Jussi Saurio)
  • core: Wrap Pager::io_ctx in RwLock (Pekka Enberg)
  • Enable checksum tests if checksum feature is on (Kacper Kołodziej)
  • Wrap Pager vacuum state in RwLock (Pekka Enberg)
  • Enhancement to Sim Snapshot isolation code (Pedro Muniz)
  • core/io: Ensure callbacks are invoked once (Pedro Muniz)
  • Upgrade dist to 0.30.0 (Pekka Enberg)
  • Sync improvements (Nikita Sivukhin)
  • Remove some unnecessary unsafe impls (Pedro Muniz)
  • Pragma busy timeout (Nikita Sivukhin)
  • translate/optimize: centralize AST/expr traversal (Preston Thorpe)
  • prevent alter table with materialized views (Glauber Costa)
  • core/mvcc: Wrap LogicalLog in RwLock (Pekka Enberg)
  • mvcc: remove unused code related to is_logical_log() (Jussi Saurio)
  • Put the unused variable behind a flag as intended (Avinash Sajjanshetty)
  • whopper: Gracefully handle file size limits in simulator (Avinash Sajjanshetty)
  • core/storage: Wrap Pager::header_ref_state in RwLock (Pekka Enberg)
  • core/mvcc: Kill noop storage (Pekka Enberg)
  • core/mvcc: LogicalLog simple append serializer (Pere Diaz Bou)
  • core/storage: Wrap Pager::free_page_state with RwLock (Pekka Enberg)
  • core: Rename Connection::_db to db (Pekka Enberg)
  • core/storage: Switch Pager::max_page_count to AtomicU32 (Pekka Enberg)
  • core/storage: Use AtomicU16 for Pager::reserved_space (Pekka Enberg)
  • remove io.blocks from btree balancing code (Nikita Sivukhin)
  • core: Use sequential consistency for atomics by default (Pekka Enberg)
  • core/storage: Use AtomicU32 for Pager::page_size (Pekka Enberg)
  • Convert more Pager fields towards being Send (Pekka Enberg)
  • More async (Nikita Sivukhin)
  • Enable encryption option in Whopper (Avinash Sajjanshetty)
  • Compat: Translate the 2nd argument of group_concat / string_agg (Iaroslav Zeigerman)
  • Reduce allocations needed for break_predicate_at_and_boundaries (Lâm Hoàng Phúc)
  • Simulator Multiple Connections (Pedro Muniz)
  • translation: rewrite expressions and properly handle quoted identifiers in UPSERT (Preston Thorpe)
  • Remove serialization of normal write/commit path (Preston Thorpe)
  • core/vtab: Wrap InternalVirtualTable with RwLock (Pekka Enberg)
  • Clean up encryption feature flag usage (Avinash Sajjanshetty)
  • core/storage: Wrap Pager::checkpoint_state in RwLock (Pekka Enberg)
  • core: Wrap Pager dirty_pages in RwLock (Pekka Enberg)
  • core: Wrap MvCursor in Arc<RwLock<>> (Pekka Enberg)
  • core/incremental: Wrap ViewTransactionState in Arc (Pekka Enberg)
  • core/function: Wrap ExtFunc in Arc (Pekka Enberg)
  • core/vtab: Mark VTabModuleImpl as Send and Sync (Pekka Enberg)
  • core/vtab: Use AtomicPtr for table_ptr (Pekka Enberg)
  • Remove LimboResult enum and InsnFunctionStepResult::Busy variant (Jussi Saurio)
  • core: Wrap symbol table with RwLock (Pekka Enberg)
  • core/ext: Switch vtab_modules from Rc to Arc (Pekka Enberg)
  • core/storage: Clean up unused import warning in encryption.rs (Pekka Enberg)
  • core: Convert Rc<Pager> to Arc<Pager> (Pekka Enberg)
  • whopper: Handle write-write conflict (Pekka Enberg)
  • mvcc: handle properly the case where starting pager read tx fails with busy (Jussi Saurio)
  • core/mvcc: Specify level for tracing (Pekka Enberg)
  • Switch to GitHub runners for performance workflows (Diego Reis)
  • Move common dependencies to workspace (Pedro Muniz)
  • avoid unnecessary cloning when formatting Txn for Display (Avinash Sajjanshetty)
  • Busy handler (Pedro Muniz)
  • test/fuzz: improve maintainability/usability of tx isolation test (Jussi Saurio)
  • mvcc: Complete commit state machine early if write set is empty (Jussi Saurio)
  • make whopper run with checksums (Avinash Sajjanshetty)
  • Whopper + MVCC (Pekka Enberg)
  • Dont grab page cache write lock in a loop (Preston Thorpe)
  • perf/throughput/turso: Async transactions with concurrent mode (Pekka Enberg)
  • Handle partial writes in unix IO for pwrite and pwritev (Preston Thorpe)
  • remove Stmt clone (Lâm Hoàng Phúc)
  • core/storage: Remove unused import warning (Pekka Enberg)
  • Handle EXPLAIN QUERY PLAN like SQLite (Lâm Hoàng Phúc)
  • Update epoch on each checkpoint to prevent using stale pages for backfilling (Preston Thorpe)
  • MVCC: remove reliance on BTreeCursor::has_record() (Jussi Saurio)
  • Refactor UPSERT to use wal_expr_mut to walk AST. (Preston Thorpe)
  • Commit uncommitted whopper lockfile (Jussi Saurio)
  • core/schema: Optimize get_dependent_materialized_views() when no views (Pekka Enberg)
  • core/mvcc: Eliminate RwLock wrapping Transaction (Pekka Enberg)
  • bindings/java: PreparedStatement executeUpdate (zongkx)
  • handle EXPLAIN like sqlite (Lâm Hoàng Phúc)
  • Document DEFERRED and IMMEDIATE transaction modes (Pekka Enberg)
  • Refactor parseschema (Jussi Saurio)
  • Remove some traces in super hot paths in btree (Preston Thorpe)
  • Sync package opfs (Nikita Sivukhin)
  • Ensure that Connection::query() checks whether its schema is up to date (Jussi Saurio)
  • refactor cli: readline will write to input_buf (Lâm Hoàng Phúc)
  • check freelist count in integrity check (Jussi Saurio)
  • Enable the use of indexes in DELETE statements (Jussi Saurio)
  • core: Rename IO::run_once() to IO::step() (Pekka Enberg)
  • simulator: Clean up code to use extract_if() (Pavan Nambi)
Fixed
  • fix sync-engine bug when auth token is provided as dynamic function (Nikita Sivukhin)
  • Fix COLLATE (Jussi Saurio)
  • core/translate: fix rowid affinity (Preston Thorpe)
  • Improve error handling for cyclic views (Duy Dang)
  • Fix MVCC drop table (Jussi Saurio)
  • Fix MVCC startup infinite loop when using existing DB (Jussi Saurio)
  • Fix: JOIN USING should pick columns from left table, not right (Jussi Saurio)
  • fix/vdbe: reset op_transaction state properly (Jussi Saurio)
  • Resolve appropriate column name for rowid alias/PK (Preston Thorpe)
  • fix/mvcc: deserialize table_id as i64 (Jussi Saurio)
  • Substr fix UTF-8 (Pedro Muniz)
  • fix/mvcc: set log offset to end of file after recovery finishes (Jussi Saurio)
  • Fix index bookkeeping in DROP COLUMN (Jussi Saurio)
  • Fix self-insert with nested subquery (Mikaël Francoeur)
  • Fix SQLite database file pending byte page (Pedro Muniz)
  • Index search fixes (Nikita Sivukhin)
  • Anonymous params fix (Nikita Sivukhin)
  • core/vdbe: Fix BEGIN after BEGIN CONCURRENT check (Pekka Enberg)
  • sum should identify if there is num in strings/prefix of strings (Pavan Nambi)
  • remove UnterminatedBlockComment error (Lâm Hoàng Phúc)
  • core/printf: Compatibility tests and fixes for printf() (Luiz Gustavo)
  • Fix materialized views with complex expressions (Glauber Costa)
  • Fix column fetch in joins (Glauber Costa)
  • quoting fix (Nikita Sivukhin)
  • translate/upsert: fix explicit conflict target of non-rowid primary key in UPSERT (Preston Thorpe)
  • Fix zero limit (Nikita Sivukhin)
  • Correct spelling issue in ForeignKey ast node (Preston Thorpe)
  • resolve column alias after rewritting column access in the expression in returning insert clause (Nikita Sivukhin)
  • Fix materialized views where clause issues (Glauber Costa)
  • Fix various ALTER TABLE bugs (Jussi Saurio)
  • Fix offset variable handling (Nikita Sivukhin)
  • fix encryption config in the sync-client (Nikita Sivukhin)
  • fix avg aggregation (Nikita Sivukhin)
  • Fix CREATE INDEX with quoted identifiers (Iaroslav Zeigerman)
  • Fix ungrouped aggregate with offset clause (Preston Thorpe)
  • Fix incorrect "column is ambiguous" error with USING clause (Jussi Saurio)
  • parser: fix incorrect LIMIT/OFFSET parsing of form LIMIT x,y (Jussi Saurio)
  • Fix .schema command for empty databases (Diego Reis)
  • Fix JavaScript bindings (Nikita Sivukhin)
  • Fix result columns binding precedence (Jussi Saurio)
  • Fix program counter update in sequence test op (Preston Thorpe)
  • Fix INSERT INTO t DEFAULT VALUES (Jussi Saurio)
  • fix: CTE alias resolution in planner (Mayank)
  • Differential testing fixes (Pedro Muniz)
  • Fix busy handler (Lâm Hoàng Phúc)
  • DBSP: Return a parse error for a non-equality join (Glauber Costa)
  • sqlite3: Fix compatibility test error by canonicalizing path (Samuel Marks)
  • bugfix: clear reserved space for a reused page (Avinash Sajjanshetty)
  • Fix MVCC concurrency bugs (Jussi Saurio)
  • Fix math functions compatibility issues (Levy A.)
  • simulator: Fix shrinking (Pedro Muniz)
  • Fix some Rust compilation warnings (Samuel Marks)
  • translate/insert: fix program.result_columns when inserting multiple rows (Preston Thorpe)
  • stress: Retry sync on error to avoid a panic, take 2 (Pekka Enberg)
  • translate: couple fixes from testing with Gorm (Preston Thorpe)
  • Fix is_nonnull returns true on 1 / 0 (Lâm Hoàng Phúc)
  • Fix 3 different MVCC bugs (Jussi Saurio)
  • fix re-entrancy issue in Pager::free_page (Jussi Saurio)
  • stress: Retry sync on error to avoid a panic (Pekka Enberg)
  • move divider_cell_is_overflow_cell to debug assertions (Pedro Muniz)
  • Fix SharedWalFile deadlock in multithreaded context (Jussi Saurio)
  • Fix MVCC update (Jussi Saurio)
  • Various fixes to sync (Nikita Sivukhin)
  • mvcc: fix hang when CONCURRENT tx tries to commit and non-CONCURRENT tx is active (Jussi Saurio)
  • mvcc: fix two sources of panic (Jussi Saurio)
  • Fix MVCC rollback (Jussi Saurio)
  • Random fixes for MVCC (Jussi Saurio)
  • core: Panic on fsync() error by default (Pekka Enberg)
  • fix(btree): advance cursor after interior node replacement in delete (Jussi Saurio)
  • core/vdbe: Fix BEGIN CONCURRENT transactions (Pekka Enberg)
  • Fix incompatible math functions (Levy A.)
  • fix wasm-runtime package.json (Nikita Sivukhin)
  • fix CI for apple builds (Nikita Sivukhin)
  • hack imports of wasm due to the issues in Vite and Next.js build systems (Nikita Sivukhin)
  • Fix tests for views (Preston Thorpe)
  • Fixes views (Glauber Costa)
  • core: Fix reprepare to properly reset statement cursors and registers (Pedro Muniz)
  • Fix automatic indexes (Jussi Saurio)
  • Fix tx isolation test semantics after #3023 (Jussi Saurio)
  • Fix: read transaction cannot be allowed to start with a stale max frame (Jussi Saurio)
  • Fix value conversion for function parameters (Levy A.)
  • IO: handle errors properly in io_uring (Preston Thorpe)
  • core: Fix integer/float comparison (Pavan Nambi)
  • pager: fix incorrect freelist page count bookkeeping (Jussi Saurio)

Install turso_cli 0.2.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.2.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.2.0/turso_cli-installer.ps1 | iex"

Download turso_cli 0.2.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-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>
v0.1.5

Release Notes

Added
  • add missing module type for browser package (Nikita Sivukhin)
  • Implement 2-args json_each (Mikaël Francoeur)
  • Add OPFS support to JavaScript bindings (Nikita Sivukhin)
  • test/fuzz: add UPDATE/DELETE fuzz test (Jussi Saurio)
  • add gen-bigass-database.py (Jussi Saurio)
  • Add assertion: we read a page with the correct id (Jussi Saurio)
  • support float without fractional part (Lâm Hoàng Phúc)
  • expr: use more efficient implementation for binary condition exprs (Jussi Saurio)
  • Add json_each table-valued function (1-arg only) (Mikaël Francoeur)
  • Add io_uring support to stress (Pekka Enberg)
  • Refactor LIMIT/OFFSET handling to support expressions (bit-aloo)
  • Encryption: add support for other AEGIS and AES-GCM cipher variants (Frank Denis)
  • introduce package.json for separate *-browser package (both database and sync) (Nikita Sivukhin)
  • introduce eq/contains/starts_with/ends_with_ignore_ascii_case macros (Lâm Hoàng Phúc)
  • introduce match_ignore_ascii_case macro (Lâm Hoàng Phúc)
  • core: Make strict schema support experimental (Pekka Enberg)
  • core/printf: support for more basic substitution types (Luiz Gustavo)
  • Return sqlite_version() without being initialized (Preston Thorpe)
  • Support encryption for raw WAL frames (Gaurav Sarma)
  • bindings/java: Implement date, time related methods under JDBC4PreparedStatement (Kim Seon Woo)
  • Support cipher and encryption key URI options (William Souza)
  • Implement UPSERT (Preston Thorpe)
  • CLI: implement Line output .mode (Andrey Oskin)
  • add sqlite integrity check back (Pedro Muniz)
  • core: Initial pass on synchronous pragma (Pekka Enberg)
  • Introduce and propagate IOContext as required (Avinash Sajjanshetty)
  • Add some docs on encryption (Avinash Sajjanshetty)
  • sqlite3: Implement sqlite3_malloc() and sqlite3_free() (Pekka Enberg)
  • sqlite3: Implement sqlite3_next_stmt() (Pekka Enberg)
  • core/translate: Add support (Pekka Enberg)
  • sqlite3: Implement sqlite3_db_filename() (Pekka Enberg)
  • flake.nix: add uv dependency to nativeBuildInputs (Ceferino Patino)
  • sqlite3: Implement sqlite3_bind_parameter_index() (Pekka Enberg)
  • sqlite3: Implement sqlite3_clear_bindings() (Pekka Enberg)
  • sqlite3: Implement sqlite3_get_autocommit() (Pekka Enberg)
  • Add support for AEGIS encryption algorithm (Avinash Sajjanshetty)
  • bindings/java: Implement batch operations for JDBC4Statement (Kim Seon Woo)
  • Add syntax highlighting for EXPLAIN and ANALYZE (Alex Miller)
  • Add basic support for ANALYZE statement (Alex Miller)
  • correctly implement offset() in parser (Lâm Hoàng Phúc)
  • Switch to new parser in core (Levy A.)
  • github: Remove Intel Mac support (Pekka Enberg)
  • add remove_file method to the IO (Nikita Sivukhin)
  • Add libc fault injection to Antithesis (Pekka Enberg)
  • core/mvcc: support for MVCC (Pere Diaz Bou)
  • SQLite C API improvements: add column type and column decltype (Danawan Bimantoro)
  • Initial pass to support per page encryption (Avinash Sajjanshetty)
Updated
  • clean print_query_result (Lâm Hoàng Phúc)
  • update update-script to properly handle JS workspace (Nikita Sivukhin)
  • no need QueryStatistics if self.opts.timer is not set (Lâm Hoàng Phúc)
  • optimizer: convert outer join to inner join if possible (Jussi Saurio)
  • Handle case where null flag is set in op_column (Jussi Saurio)
  • remove &1 (Lâm Hoàng Phúc)
  • reduce cloning Arc<Page> (Lâm Hoàng Phúc)
  • Evaluate left join seek key condition again after null row (Jussi Saurio)
  • use mlugg/setup-zig instead of unmaintained action (Kingsword)
  • Prevent setting of encryption keys if already set (Gaurav Sarma)
  • Remove RefCell from Cursor (Pedro Muniz)
  • Page Cache: optimize and use sieve/Gclock hybird algorithm in place of LRU (Preston Thorpe)
  • core: handle edge cases for read_varint (Sonny)
  • Persistence for DBSP-based materialized views (Glauber Costa)
  • io_uring: prevent out of order operations that could interfere with durability (Preston Thorpe)
  • core: Simplify WalFileShared life cycle (Pekka Enberg)
  • prevent modification to system tables. (Glauber Costa)
  • mark completion as done only after callback will be executed (Nikita Sivukhin)
  • core/mvcc: make commit_txn return on I/O (Pere Diaz Bou)
  • windows iterator returns no values for shorter slice (Lâm Hoàng Phúc)
  • Unify resolution of aggregate functions (Piotr Rżysko)
  • replace some matches with match_ignore_ascii_case macro (Lâm Hoàng Phúc)
  • Make io_uring sound for connections on multiple threads (Preston Thorpe)
  • build native package for ARM64 (Nikita Sivukhin)
  • refactor parser fmt (Lâm Hoàng Phúc)
  • string sometimes used as identifier quoting (Lâm Hoàng Phúc)
  • CURRENT_TIMESTAMP can fallback TK_ID (Lâm Hoàng Phúc)
  • remove turso_sqlite3_parser from turso_parser (Lâm Hoàng Phúc)
  • Simulate I/O in memory (Pedro)
  • Simulate I/O in memory (Pedro Muniz)
  • Refactor encryption to manage authentication tag internally (bit-aloo)
  • Unify handling of grouped and ungrouped aggregations (Piotr Rżysko)
  • Evict page from cache if page is unlocked and unloaded (Pedro Muniz)
  • Use u64 for file offsets in I/O and calculate such offsets in u64 (Preston Thorpe)
  • Document how to use CDC (Pavan Nambi)
  • Upgrade Rust version in simulator build Dockerfile (Preston Thorpe)
  • Parse booleans to integer literals in expressions (Preston Thorpe)
  • Simulator Profiles (Pedro Muniz)
  • Change views to use DBSP circuits (Glauber Costa)
  • core/wal: cache file size (Pere Diaz Bou)
  • Remove some code duplication in the CLI (Preston Thorpe)
  • core/translate: parse_table remove unnecessary clone of table name (Pere Diaz Bou)
  • Update COMPAT.md to remove CREATE INDEX default disabled (Preston Thorpe)
  • core/translate: remove unneessary agg clones (Pere Diaz Bou)
  • core/vdbe: Micro-optimize "zero_or_null" opcode (Pekka Enberg)
  • translate: with_capacity insns (Pere Diaz Bou)
  • perf: avoid constructing PageType in helper methods (Jussi Saurio)
  • refactor/perf: remove BTreePageInner (Jussi Saurio)
  • Improve integrity check (Nikita Sivukhin)
  • translate/insert: Improve string format performance (Pere Diaz Bou)
  • core/schema: get_dependent_materialized_views_unnormalized (Pere Diaz Bou)
  • core/util: emit literal, cow instead of replace (Pere Diaz Bou)
  • core/translate: sanize_string fast path improvement (Pere Diaz Bou)
  • core/io: Switch Unix I/O to use libc::pwrite() (Pekka Enberg)
  • Update README.md for Go documentation (Preston Thorpe)
  • improve sync engine (Nikita Sivukhin)
  • Remove Go bindings (Preston Thorpe)
  • core/storage: Micro-optimize Pager::commit_dirty_pages() (Pekka Enberg)
  • Rename Go driver to turso to not conflict with sqlite3 (Preston Thorpe)
  • Refactor: Cell instead of RefCell to store CipherMode in connection (Avinash Sajjanshetty)
  • Improve documentation of page pinning (Jussi Saurio)
  • Remove double indirection in the Parser (Pedro Muniz")
  • Fail CI run if Turso output differs from SQLite in TPC-H queries (Jussi Saurio)
  • Decouple SQL generation from Simulator crate (Pedro Muniz)
  • Make fill_cell_payload() safe for async IO and cache spilling (Jussi Saurio)
  • Remove Windows IO in place of Generic IO (Preston Thorpe)
  • Improve encryption API (Avinash Sajjanshetty)
  • Remove double indirection in the Parser (Pedro Muniz)
  • Update TPC-H running instructions in PERF.md (Alex Miller)
  • Truncate the WAL on last connection close (Preston Thorpe)
  • DBSP projection (Pekka Enberg)
  • Use vectored I/O for appending WAL frames (Preston Thorpe)
  • Remove unnecessary argument from Pager::end_tx() (Nikita Sivukhin)
  • refactor/btree: rewrite the find_free_cell() function (Jussi Saurio)
  • refactor/btree: rewrite the free_cell_range() function (Jussi Saurio)
  • Remove Result from signature (Mikaël Francoeur)
  • Remove duplicated attribute in (bit-aloo)
  • reduce cloning Token in parser (Lâm Hoàng Phúc)
  • refactor encryption module and make it configurable (Avinash Sajjanshetty)
  • Replace a couple refcells for types that trivially impl Copy (Preston Thorpe)
  • wal-api: allow to mix frames insert with SQL execution (Nikita Sivukhin)
  • move check code into parser (Lâm Hoàng Phúc)
  • Serialize compat tests and use Mutex::lock() instead of Mutex::try_lock() in UnixIO (Jussi Saurio)
  • sim: remove "run_once faults" (Jussi Saurio)
  • should not return a Completion when there is a page cache hit (Pedro Muniz)
  • github: Reduce Python build matrix (Pekka Enberg)
  • Page cache truncate (Nikita Sivukhin)
  • Wal api checkpoint seq (Nikita Sivukhin)
  • Use more structured approach in translate_insert (Jussi Saurio)
  • Remove hardcoded flag usage in DBHeader for encryption (Avinash Sajjanshetty)
  • properly execute pragmas - they may require some IO (Nikita Sivukhin)
  • Wal checkpoint upper bound (Nikita Sivukhin)
  • Improve WAL checkpointing performance (Preston Thorpe)
  • core/mvcc: store txid in conn and reset transaction state on commit (Pere Diaz Bou)
  • core/mvcc: start first rowid at 1 (Pere Diaz Bou)
  • refactor/vdbe: move insert-related seeking to VDBE from BTreeCursor (Jussi Saurio)
Fixed
  • Fix clear_page_cache method and rollback (Preston Thorpe)
  • Fix read_entire_wal_dumb: incrementally build the frame cache (Preston Thorpe)
  • Fix merge script to prompt if tests are still in progress (Preston Thorpe)
  • SQL generation fixes (Pekka Enberg)
  • Fix affinity handling in MakeRecord (Pekka Enberg)
  • Fix infinite loop when IO failure happens on allocating first page (Preston Thorpe)
  • Fix crash in Next opcode if cursor stack has no pages (Jussi Saurio)
  • cli: Fix dump compatibility in "PRAGMA foreign_keys" (Pekka Enberg)
  • Small fixes (Nikita Sivukhin)
  • Avoid allocating and then immediately fallbacking errors in affinity (Jussi Saurio)
  • Fix float formatting and comparison + Blob concat (Levy A.)
  • Fix infinite loop when query starts comment token ("--") (Lâm Hoàng Phúc)
  • Fix sqlite3 test cases (Pekka Enberg)
  • Fix non-determinism in simulator (Pedro Muniz)
  • Fix column count in ImmutableRow (Glauber Costa)
  • Fix memory leak in page cache during balancing (Preston Thorpe)
  • Fix sim-schema command (Pedro Muniz)
  • Propagate decryption error from the callback (Avinash Sajjanshetty)
  • Fix sorter column deduplication (Piotr Rżysko)
  • Fix missing functions after revert (Pedro Muniz)
  • ci: fix merge-pr issue to escape command-line backticks (Ceferino Patino)
  • Fix several issues with integrity_check (Jussi Saurio)
  • core/io: Fix build on Android and iOS (Pekka Enberg)
  • WAL txn: fix reads from DB file (Nikita Sivukhin)
  • Fix blob type handling in JavaScript (Pekka Enberg)
  • Fix: all indexes need to be updated if the rowid changes (Jussi Saurio)
  • Fix: in UPDATE, insert rowid into index instead of NULL (Jussi Saurio)
  • Fix: normalize table name in DELETE (Jussi Saurio)

Install turso_cli 0.1.5

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.1.5/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.1.5/turso_cli-installer.ps1 | iex"

Download turso_cli 0.1.5

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-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>
Last Checked
4h ago
Latest
v0.6.1
Tracking since Sep 10, 2025