github tursodatabase/turso v0.8.0
0.8.0 -- 2026-09-28

latest releases: bindings/go/v0.8.1, v0.8.1, bindings/go/v0.8.0...
10 hours ago

Release Notes

Added

  • Add rule on helper functions (Mikaël Francoeur)
  • core/schema: Fix ALTER TABLE ADD/DROP COLUMN dropping column type size parameters (Sergei Iarymov)
  • testing: add an FTS stress workload and Antithesis singleton (Pedro Muniz)
  • core/translate: run ADD COLUMN DEFAULT type check only on STRICT tables (Ryan Lin)
  • perf/fts: add search benchmarks, CPU profiles, and peak heap measurements (Pedro Muniz)
  • core/vdbe: add AggStep fast paths for float sum, avg and count (Pekka Enberg)
  • sqlite/conformance: add generated-column coverage from the issue backlog (Glauber Costa)
  • simulator: add power loss (Pavan Nambi)
  • add valgrind to the devcontainer (Mikaël Francoeur)
  • Add aristo intent on partial writes (Mikaël Francoeur)
  • perf: add join optimizer benchmarks and metrics (Jussi Saurio)
  • postgres: support WITHIN GROUP aggregates (Joe Sluis)
  • Add per-seed timeouts to differential_fuzzer CI runs so pathological queries fail faster (Jussi Saurio)
  • bindings/c: implement sqlite3_strnicmp (Ishwar)
  • bindings/dotnet: support batches on embedded replicas (Marc-André Moreau)
  • fts/testing: add FTS workload to concurrent simulator (Preston Thorpe)
  • serverless/compat: add reconnect support (Ishwar)
  • serverless/js: fix broken README links and add repository field (Pure Tech)
  • bindings/c: implement sqlite3_total_changes64 (Ishwar)
  • bindings/dotnet: add connection-string embedded replicas (Marc-André Moreau)
  • postgres: support quit and exit commands in tursopg cli (Joe Sluis)
  • bindings/dotnet: add advanced sync database options (Marc-André Moreau)
  • core/schema: add collation property in to_sql output for btree table (thomas kim)
  • bindings/dotnet: add managed pull replica API (Marc-André Moreau)
  • postgres: implement pg_get_expr function (Joe Sluis)
  • core: make autovacuum an additive cargo feature (Pekka Enberg)
  • Add snapshot tests for multi-index with intersection (Mikaël Francoeur)
  • serverless/rust: add Builder::with_auth_token_fn for rotating tokens (Glauber Costa)
  • Add ARGS variable to run-cli Makefile target (Mikaël Francoeur)
  • Introduce Affinity::None (Mikaël Francoeur)
  • add sqltest instructions (Mikaël Francoeur)
  • Add EXPLAIN QUERY PLAN format=json (Mikaël Francoeur)
  • bindings/tcl: implement [db status] statement counters (Pekka Enberg)
  • core/storage: add more tests for codec interface (Avinash Sajjanshetty)
  • Support virtual columns in covering indexes (Mikaël Francoeur")
  • Support virtual columns in covering indexes (Mikaël Francoeur)
  • bindings/c: implement sqlite3_set_authorizer, sqlite3_db_config, sqlite3_extended_result_codes (Glauber Costa)
  • add select star benchmark (Mikaël Francoeur)
  • core: implement PRAGMA count_changes (roboturso)
  • add missing field to fix build (Mikaël Francoeur)
  • core: support NULLS FIRST/LAST in indexes (Mikaël Francoeur)
  • core/translate: add full window frame support (Jussi Saurio)
  • core/storage: add page codec interface (Avinash Sajjanshetty)
  • add missing argument to fix build (Mikaël Francoeur)
  • postgres: implement session information functions (Michael)
  • testing/antithesis: add VACUUM driver to stress-composer (Pekka Enberg)
  • add comprehensive prepare-time benchmarks across SQL statement shapes (Pedro Muniz)
  • core: add cume_dist()/percent_rank() window functions and add window funcs to fuzzer (Jussi Saurio)
  • core/schema: Fix ALTER TABLE ADD COLUMN with explicit NULL stored as NOT NULL (Matt Van Horn)
  • serverless/go: add serverless driver and conformance tests (Pekka Enberg)
  • serverless/python: add serverless driver and conformance tests (Pekka Enberg)
  • postgres: support CREATE TABLE AS and SELECT INTO (roboturso)
  • bindings/rust: add Concurrent to TransactionBehavior (Pekka Enberg)
  • Add serverless driver for Rust (Pekka Enberg)
  • serverless: add differential test suite for serverless drivers (Pekka Enberg)
  • Add SQL over HTTP protocol specification (Pekka Enberg)
  • core/types: add fallible reusable value cloning (Pedro Muniz)
  • core/benches: add targeted record-recycling benchmarks (Pedro Muniz)
  • core: add nth_value() window function (Jussi Saurio)
  • core: implement first_value() and last_value() window functions (Jussi Saurio)
  • core: implement dense_rank() window function (Jussi Saurio)
  • postgres: add sqltest pg backend and conformance corpus (Pekka Enberg)
  • Add more window function plumbing and implement rank() function (Jussi Saurio)
  • add LogTxFrameInfo with chaining crc32c in mvcc commit hook (Preston Thorpe)
  • Feat: Added IoBackend enum for vfs setting (Nur)
  • core/connection: add passive mode support in checkpoint api (Pere Diaz Bou)
  • postgres: Add upstream PostgreSQL regression test harness (Pekka Enberg)
  • Add PostgreSQL-compatible get_byte and set_byte functions (Glauber Costa)
  • Experimental Postgres support (Pekka Enberg)
  • Initial pass on SQL dialect support (Pekka Enberg)
  • bindings/dotnet: add HTTP client packages (Marc-André Moreau)
  • bindings/python: enable SQLAlchemy reflection now supported by turso, bump min version to 2.0.45 (Orthel Toralen)
  • core/mvcc: add tests for speculative checkpoint root mappings and add cleanup for journal mode checkpoint state (Pedro Muniz)

Updated

  • core/storage: read nbackfills under the checkpoint lock (Pekka Enberg)
  • core: make connect-time and post-ANALYZE stats refresh resumable (Nikita Sivukhin)
  • Refactor hash join selection (Mikaël Francoeur)
  • core/translate: evaluate row-dependent predicates through index methods (Pedro Muniz)
  • core/schema: omit empty parent column list when rebuilding FOREIGN KEY text (roboturso)
  • core/mvcc: stop copying and re-looking-up state in the commit state machine (Jussi Saurio)
  • core/mvcc: sync group commit log for FULL waiters (roboturso)
  • core/schema: keep DESC on primary keys when rebuilding CREATE TABLE text (roboturso)
  • core/schema: keep ON CONFLICT clauses when rebuilding CREATE TABLE text (roboturso)
  • core/vdbe: reduce work in common execution paths (Jussi Saurio)
  • optimizer: skip multi-index analysis when no candidate is possible (Jussi Saurio)
  • Use fast paths for common record values (Jussi Saurio)
  • Reuse buffers when decoding record TEXT (Jussi Saurio)
  • fts: inject allocation failures during builds and merges (Pedro Muniz)
  • core/storage: read table leaf header from one cell slice (Jussi Saurio)
  • core/storage: streamline page and varint reads (Jussi Saurio)
  • perf/latency: retry SQLite BEGIN IMMEDIATE on SQLITE_BUSY (Pekka Enberg)
  • core/storage: reduce work on cell write paths (Jussi Saurio)
  • core/storage: skip the leaf search after the last rowid (Jussi Saurio)
  • testing/stress: only fail the FTS workload on corruption (Pekka Enberg)
  • build(deps-dev): bump browserslist from 4.28.2 to 4.29.0 in /bindings/react-native (app/dependabot)
  • core/storage: reuse the current leaf when appending rows (Jussi Saurio)
  • sqlite/parser: quote identifiers that start with a digit when rendering names (roboturso)
  • core/vdbe: reduce work when matching LIKE operands (Jussi Saurio)
  • core/vdbe: reuse index key info during cursor reads (Jussi Saurio)
  • core/mvcc: advance log offset after on_log_write_complete (Pere Diaz Bou)
  • core: finalize external aggregates exactly once (Pekka Enberg)
  • core/storage: read index keys from pages without copying (Jussi Saurio)
  • docs: stop calling MVCC experimental (Pekka Enberg)
  • core/schema: quote identifiers in table-level PRIMARY KEY and FOREIGN KEY when rebuilding CREATE TABLE text (roboturso)
  • core/translate: refuse DROP TRIGGER and write pragmas in query_only mode (roboturso)
  • core/translate: decode blob literals in materialized view plans (roboturso)
  • testing/antithesis: use stable messages for stress composer assertions (Avinash Sajjanshetty)
  • optimizer: allow unnesting correlated subqueries with non-equality comparisons (Jussi Saurio)
  • sqlite/conformance: cover OFFSET paging past a join outer row (Ryan Lin)
  • ci: speed up python, rust and test-limbo; stop running codspeed nightly benchmarks on PRs (Jussi Saurio)
  • core/stats: publish refreshed ANALYZE stats to the shared schema (roboturso)
  • core/io: report why io_uring_setup failed (Pekka Enberg)
  • optimizer: improve join estimates for OR filters and hash joins (Jussi Saurio)
  • core/fts: benchmark warm queries under byte-cache pressure (Pedro Muniz)
  • simulator: accept checkpoint rejected by an open transaction (Pekka Enberg)
  • core/mvcc: schema-first forward collect (Pere Diaz Bou)
  • fts: use the database allocator for build buffers and metadata (Pedro Muniz)
  • testing/antithesis: check integrity outside unreliable-libc (Pekka Enberg)
  • github: give native library builds 60 minutes (Pekka Enberg)
  • bindings/dotnet: let native code own function callback handles (Pekka Enberg)
  • core/translate: avoid table reads after covering-index hash builds (Jussi Saurio)
  • optimizer: permit hash joins when indexes cannot seek join keys (Jussi Saurio)
  • core: refresh reserved bytes after WAL frame imports (Pedro Muniz)
  • optimizer: cost repeated index seeks and required grouping sorts (Jussi Saurio)
  • github: Set up MSVC environment for Windows jobs (Pekka Enberg)
  • sqlite/conformance: Convert suitable rust transaction tests to SQLtests (Sergei Iarymov)
  • fts: accept null and non-text search inputs (Pedro Muniz)
  • core: group database allocators by subsystem (Pedro Muniz)
  • fts: reuse rowid readers across queries (Pedro Muniz)
  • fts: reject non-finite field weights (Pedro Muniz)
  • core/mvcc: notify dependents when cleaning up abandoned commits (Pedro Muniz)
  • bindings/javascript: stop the sync loops in the concurrent-updates test (Pekka Enberg)
  • scripts: keep paragraph breaks when wrapping merge commit messages (Pekka Enberg)
  • Reduce Nyrkio runtime (Pekka Enberg)
  • core/vdbe: compare two texts without the comparison slow path (Pekka Enberg)
  • core/storage: let readers start while a checkpoint holds read-mark 0 (Pere Diaz Bou)
  • core/optimizer: preserve OFFSET when choosing index methods (Pedro Muniz)
  • build(deps-dev): bump baseline-browser-mapping from 2.10.16 to 2.11.24 in /bindings/react-native (app/dependabot)
  • core/translate: refresh index deletion values after BEFORE UPDATE trigger by UPSERT (writemorecode)
  • core/translate: retain group-by expressions for output (may)
  • core/mvcc: clear checkpoint pager lock flags after pager commit (Pekka Enberg)
  • core/fts: avoid quadratic segment searches during deletes (Pedro Muniz)
  • core/fts: benchmark deletes and registry scans across segment counts (Pedro Muniz)
  • core: Optimize text decoding (Mikaël Francoeur)
  • ci: run string_expr_benchmark in the nightly Nyrkiö benchmarks (Pekka Enberg)
  • build(deps): bump baseline-browser-mapping from 2.10.16 to 2.11.24 in /examples/react-native (app/dependabot)
  • build(deps-dev): bump @humanfs/node from 0.16.7 to 0.16.8 in /examples/react-native (app/dependabot)
  • core/vdbe: use arithmetic fast path for floats too (Pekka Enberg)
  • testing/differential: skip aggregates that depend on input order (Jussi Saurio)
  • core/vdbe: use larger chunk read buffers within sorter in-memory budget (Pekka Enberg)
  • bindings/javascript: update vitest to 4.1.11 (Pekka Enberg)
  • core/btree: reuse the loaded table leaf for nearby rowid seeks (Jussi Saurio)
  • perf/tpc-h: bold the fastest median in the results table (Pekka Enberg)
  • perf/tpc-h: draw query runtimes on a linear axis (Pekka Enberg)
  • core/translate: match upsert conflict targets against generated-column indexes (Glauber Costa)
  • Refactoring (Mikaël Francoeur)
  • core/translate: report STRICT type violations from integrity_check (Glauber Costa)
  • core: type-check virtual generated columns in STRICT tables (Glauber Costa)
  • sqlite/conformance: Convert suitable rust vacuum tests to SQLtests (Sergei Iarymov)
  • bindings/js: enable experimental vacuum flag in sqltest runner (Sergei Iarymov)
  • sqlite/parser: keep GENERATED ALWAYS in rendered schema text (Glauber Costa)
  • sqlite/conformance: Convert materialized subquery tests to SQLtests (Sergei Iarymov)
  • core: Compute column affinity once when constructing Column (Mikaël Francoeur)
  • core/mvcc: rename IndexShadowFinger to IndexShadowScan (Pere Diaz Bou)
  • core/mvcc: stop negative MVCC roots from reaching the pager (Pere Diaz Bou)
  • core/fts: replace the merge lease with per-segment MVCC row claims (Pedro Muniz)
  • mvcc: drop exclusive slot 0 before publish_backfill (Pere Diaz Bou)
  • core/mvcc: park group commit waiters instead of spinning (Pekka Enberg)
  • core/mvcc: do not reuse rowid after rollback (Avinash Sajjanshetty)
  • sqlite/conformance: Convert page1 tests to SQLtests (Sergei Iarymov)
  • tests/wal: assert checkpoint results and durable bytes with asserting (Mikaël Francoeur)
  • tests/mvcc: assert attach failures and empty results with asserting (Mikaël Francoeur)
  • tests/storage: assert header versions and short reads with asserting (Mikaël Francoeur)
  • tests/attach: assert opcode db ids and file sizes with asserting (Mikaël Francoeur)
  • tests/functions: compare function results against plain literals (Mikaël Francoeur)
  • tests/conflict resolution: assert failures and rows with asserting (Mikaël Francoeur)
  • tests/write path: compare result rows against plain literals (Mikaël Francoeur)
  • core/translate: apply REPLACE defaults before computing virtual generated columns (Glauber Costa)
  • sqlite/conformance: Convert rowid tests to SQLtests (Sergei Iarymov)
  • core/fts: key tombstones by document identity so deletes and merges commute (Pedro Muniz)
  • sqlite/parser: reject invalid generated-column clauses (Glauber Costa)
  • tests: pick result columns with the column assertion (Mikaël Francoeur)
  • tests: migrate pragma, query plan and row checks to asserting (Mikaël Francoeur)
  • core/vdbe: read text values without rendering them again (|| up to 2.3x faster) (Mikaël Francoeur)
  • ci: stop installing Android SDK packages these jobs never use (Mikaël Francoeur)
  • tests: assert with the asserting crate (Mikaël Francoeur)
  • core/mvcc: reject conflicting deletes of B-tree rows at statement time (Pedro Muniz)
  • core/mvcc: recheck LWM before GC drops a row (Pekka Enberg)
  • core/mvcc: remove reachable antithesis assertions (Avinash Sajjanshetty)
  • core: split DatabaseFull into a unit variant and SequenceExhausted (Pekka Enberg)
  • sqlite/conformance: Convert affinity tests to SQLtests (Sergei Iarymov)
  • core/json: make json106.test pass (Pekka Enberg)
  • core/translate: match PRAGMA names without regard to case (Thanadon Kongkanun)
  • sqlite/conformance: run every file in the upstream TCL suite (Pekka Enberg)
  • core/mvcc: enable group commit by default (Pekka Enberg)
  • core/optimizer: keep required sorts across hash joins (may)
  • core: accept UUID blobs in STRICT tables (may)
  • fuzz: build all libFuzzer targets in CI (Daniel Karlsson)
  • optimizer: use COUNT(*) instead of COUNT(col) when col is NOT NULL (Sergei Iarymov)
  • core: skip unnecessary foreign-key bytecode for UPDATE and UPSERT (Pavan Nambi)
  • core/mvcc: retire materialized current versions instead of dropping them (Pere Diaz Bou)
  • sync: count only relevant cdc changes to expose in the stats (Nikita Sivukhin)
  • core/index_method: give index methods a core-owned backing store handle (Pedro Muniz)
  • perf/tpc-h: run tursodb with the io_uring backend (Pekka Enberg)
  • perf/tpc-h: measure query time with EPOCHREALTIME instead of bash time (Pekka Enberg)
  • core/benches: make the MVCC recovery benchmark cheap to set up (Pekka Enberg)
  • core/io: drop SQPOLL from io_uring backend (Pekka Enberg)
  • core: Optimize index seek opcodes and count aggregate (Mikaël Francoeur)
  • core/translate: honor INSERT target aliases in UPSERT (Wu Shuwen)
  • core: Optimize table and index seek loops (Mikaël Francoeur)
  • core: apply probe-side filters to hash join null-extended rows (Pekka Enberg)
  • core: upgrade tantivy to 0.26.2 (Pedro Muniz)
  • tests: remove test_ephemeral_temp_files_cleaned_up (Pekka Enberg)
  • core/translate: set the column collation in DML index expressions (Joao Faria)
  • make is_nonnull return false for the array operators @> and && (Sergei Iarymov)
  • perf/tpc-h: run the benchmark five times and draw whiskers on the bars (Pekka Enberg)
  • github: skip the apt install when jq and coreutils are present (Mikaël Francoeur)
  • github: check Android native sync exports from ELF dynsym (Marc-André Moreau)
  • core: cut the cost of index seeks and the per-statement bookkeeping (13/15) (Mikaël Francoeur)
  • replace raw unsafe affinity with safe comparison one (Sergei Iarymov)
  • build(deps-dev): bump @humanfs/node from 0.16.7 to 0.16.8 in /bindings/react-native (app/dependabot)
  • github: Disable Criterion plots in nightly benchmarks (Pekka Enberg)
  • docs: update JavaScript contribution guide links (Wu Shuwen)
  • core/fts: merge segments on the write path past a threshold (Preston Thorpe)
  • perf/memory: benchmark FTS queries and concurrent transactions (Pedro Muniz)
  • core/vdbe: make scalar min keep the last of two tied args (Mikhailov Egor)
  • core: inline the hot opcodes and the plain b-tree cursor reads (12/15) (Mikaël Francoeur)
  • core: return instruction results and cursor advances in registers (Mikaël Francoeur)
  • Improve TCP-H benchmark harness and plotting (Pekka Enberg)
  • optimizer: correct join cardinality and connectivity (Jussi Saurio)
  • core: Optimize comparisons, cell parsing and record stores (Mikaël Francoeur)
  • bindings/dotnet: validate packaged remote and replica consumers (Marc-André Moreau)
  • json: skip NULL labels in object aggregates (Wu Shuwen)
  • json: preserve SQL NULL in jsonb() (Wu Shuwen)
  • core: Optimize insert path, If, Compare and dispatch loop (Mikaël Francoeur)
  • Cargo.lock: bump turso-join-benchmark to the workspace version (Mikaël Francoeur)
  • bindings/dotnet: enable EF Core remote and replica backends (Marc-André Moreau)
  • agent instructions (Mikaël Francoeur)
  • core/storage: expose page-cache internals for differential testing behind aristo-instr (app/aretta-ci)
  • sqlite/parser: reject DEFAULT clause on generated columns (Pure Tech)
  • core/translate: reset collation before comparison (Mikhailov Egor)
  • core: expose join estimates in JSON query plans (Jussi Saurio)
  • core/vector: set C-dependent simsimd as an opt-out feature (Stef | ステフ)
  • github: cache dist across release workflow runs (Abyss Lab)
  • core/functions: read a BLOB date/time argument as text (Jerry Xiao)
  • github: create the target directory before the nightly bench build wr… (Pekka Enberg)
  • PRs that were already merged (Mikaël Francoeur)
  • core: cut the per-statement cost of transaction start and cursor open (3/15) (Mikaël Francoeur)
  • core: cut the per-statement cost of statement reset, metrics and seeks (4/15) (Mikaël Francoeur)
  • core: skip the shared schema lock in maybe_update_schema inside a transaction (Pere Diaz Bou)
  • eqp: mark left-join table scans (Jussi Saurio)
  • core/mvcc: append rows at the rightmost leaf without re-seeking (Pere Diaz Bou)
  • core/database: report a garbage header as "file is not a database" (Pekka Enberg)
  • core/io: keep waiting when io_uring_enter is interrupted by a signal (Pere Diaz Bou)
  • reset table-valued PRAGMA rowids for each scan (Jussi Saurio)
  • core: Optimize step loop the cursor advance (Mikaël Francoeur)
  • core/storage: bound-check table-leaf cell pointer array on read (Han Damin)
  • bindings/dotnet: route sqlite facade through managed backends (Marc-André Moreau)
  • orb: preload repository toolchains and dependencies (Pedro Muniz)
  • core: format multi-index UPDATE plans (may)
  • core/btree: advance synchronously within a leaf page in next() (Glauber Costa)
  • core/vdbe: validate short text without alignment-sensitive utf8 checks (Glauber Costa)
  • whopper: accept post-wrap values in sequence cycle check (Glauber Costa)
  • bindings/dotnet: complete ADO.NET compatibility and stream recovery (Marc-André Moreau)
  • core/vdbe: dispatch through a direct match with register-sized results (Glauber Costa)
  • core/translate: enforce 2,000 max columns limit on tables (Kanad Bajpai)
  • core/vdbe: check for interrupts every 64 instructions instead of every one (Glauber Costa)
  • core/mvcc: batch concurrent logical-log commits behind one fsync (Pere Diaz Bou)
  • core/translate: refuse ALTER TABLE RENAME onto an existing view name (Joao Faria)
  • github: run each nightly Nyrkiö benchmark in its own step under a memory cap (Pekka Enberg)
  • bindings/react-native: update @babel/core to 7.29.7 (Pekka Enberg)
  • perf/throughput: Rewrite concurrent write throughput benchmark (Pekka Enberg)
  • core/io: link completions to their group before submitting them (Pekka Enberg)
  • core/translate: remove formatting allocation in schema (Kanad Bajpai)
  • perf/latency: Rewrite transaction latency benchmark (Pekka Enberg)
  • bindings/dotnet: pool replicas and schedule automatic pulls (Marc-André Moreau)
  • build(deps-dev): bump esbuild from 0.27.7 to 0.28.2 in /examples/javascript/sync-wasm-vite (app/dependabot)
  • examples/js: update esbuild to 0.28.2 (Pekka Enberg)
  • core/translate: Pre-filter ephemeral indexes and improve subquery unnesting tests (Jussi Saurio)
  • Update to Antithesis SDK 0.3.0 (Pekka Enberg)
  • build(deps): bump json from 2.19.2 to 2.19.9 in /examples/react-native (app/dependabot)
  • core/btree: rebuild required indexes for the ALTER column op (Avinash Sajjanshetty)
  • perf/memory: Remove Cargo.lock (Pekka Enberg)
  • examples/react-native: update dependencies for security advisories (Pekka Enberg)
  • serverless/js: pin esbuild to 0.28.2 (Pekka Enberg)
  • perf/tpc-h: run Q15 on Turso (Pekka Enberg)
  • bindings/js: pin esbuild to 0.28.2 and drop the npm lockfile (Pekka Enberg)
  • serverless/python: split batch step building out of Connection.batch (Pekka Enberg)
  • testing/js: update vulnerable conformance dependencies (Pedro Muniz)
  • serverless/js: update vulnerable transitive dependencies (Pedro Muniz)
  • examples/js: update vulnerable Vite dependencies (Pedro Muniz)
  • bindings/react-native: update vulnerable transitive dependencies (Pedro Muniz)
  • bindings/js: update vulnerable development dependencies (Pedro Muniz)
  • deps: update vulnerable Rust transitive dependencies (Pedro Muniz)
  • bindings/dotnet: expose managed sync controls (Marc-André Moreau)
  • bindings/dotnet: expose the native sync ABI (Marc-André Moreau)
  • core/optimizer: disjunct terms of partial index predicate should be usable for covering index searches (Harsh Patel)
  • core/pragma: apply auto_vacuum on a fresh database (Pekka Enberg)
  • core: CDC code cleanups (Pekka Enberg)
  • update devcontainer for codex (Mikaël Francoeur)
  • remove benchmark that made no sense (Mikaël Francoeur)
  • cli/import: prepare insert once instead of per batch (Sergei Iarymov)
  • SQLite TCL harness improvements (Pekka Enberg)
  • sqlite/parser: report bad parameter names as unrecognized tokens (Pekka Enberg)
  • bindings/c: always finalize/reset a statement whose execution cannot complete (Pekka Enberg)
  • sqlite/conformance: skip TCL tests for rollback journal modes (Pekka Enberg)
  • core: skip vertical tab (0x0B) as whitespace in numeric affinity/cast (aetos)
  • core: protect internal tables regardless of identifier case (may)
  • core/storage: return Corrupt instead of panicking on damaged pages (Preston Thorpe)
  • core/fts: make backing state transactional under MVCC (Preston Thorpe)
  • extract column_info module (Mikaël Francoeur)
  • build(deps): bump quinn-proto from 0.11.14 to 0.11.17 (app/dependabot)
  • github: Run Rust tests on stacked PRs (Mikaël Francoeur)
  • sqlite/parser: accept namespace-qualified and array-element parameter names (Pekka Enberg)
  • core: prevent explicit checkpoints and root statements on the same connection (Denys Zhak)
  • consider partial index predicates for covering index access (Mikaël Francoeur)
  • Document a function (Mikaël Francoeur)
  • replace some slices with BitSet (Mikaël Francoeur)
  • Improve JSON function compatibility (Pekka Enberg)
  • core/index-method: open backing storage through MVCC cursors (Preston Thorpe)
  • cli/mcp: reject extra statements in family-scoped tools (Pere Diaz Bou)
  • sqlite/conformance: normalize expected results in do_execsql_test (Pekka Enberg)
  • github: publish dotnet packages with nuget trusted publishing (Pekka Enberg)
  • bindings/js: report StepResult::Yield as STEP_SLEEP instead of STEP_IO (roboturso)
  • Unify SQLite tracking version to 3.50.4 (Pekka Enberg)
  • core/vdbe: only count codegen-marked steps as fullscan steps (Pekka Enberg)
  • Flush index-method cursors when a subprogram halts (Vartan Babayan)
  • testing/stress: stop replaying the same RNG stream after reopens (Pekka Enberg)
  • testing/stress: exercise WAL checkpoints in the stress loop (Pekka Enberg)
  • Improve unreliable-libc (Pekka Enberg)
  • core/vdbe: fill NULLs when ColumnRange reads a never-opened cursor (Pavan Nambi)
  • core: Reduce VDBE instruction memory footprint (Pekka Enberg)
  • core/optimizer: use join-then-group subquery rewrite when group-first is unsafe (Jussi Saurio)
  • sqlite/conformance: import wal_common.tcl from upstream SQLite (Pekka Enberg)
  • core: report plain column names from RETURNING like SELECT does (Mike Murray)
  • core/index_method: validate FTS WITH keys and make ngram window configurable (roboturso)
  • test/perf/tpch: disable tpc-h query q20 again at least temporarily (Jussi Saurio)
  • Sleep step result (Nikita Sivukhin)
  • core/optimizer: unnest more correlated subqueries (Jussi Saurio)
  • Make the SQLite TCL conformance harness actually run the upstream suite (Pekka Enberg)
  • core/translate: allow PRAGMA auto_vacuum=NONE without the experimental flag (Pekka Enberg)
  • core, sqlite/parser: reject LIMIT and ORDER BY on DELETE and UPDATE (Pekka Enberg)
  • core/optimizer: use index for ORDER BY/GROUP BY on virtual generated columns (Mikaël Francoeur)
  • show covering indexes in EXPLAIN QUERY PLAN (Mikaël Francoeur)
  • postgres: explain simple queries (Rajat Venkatesh)
  • sdk-kit: expose page codecs through C ABI (Marc-André Moreau)
  • core/mvcc: Minor boolean logic simplification (Mikaël Francoeur)
  • core/functions: anchor negative timediff on the later date (roboturso)
  • core/storage: clear connection tx state before post-commit auto-checkpoint (roboturso)
  • bindings/c: statement introspection, column conversions, and a C API oracle (Glauber Costa)
  • serverless: send the remote encryption key with every request in all drivers (Glauber Costa)
  • core: use index seeks for IS, like SQLite (Preston Thorpe)
  • bindings/c: statement introspection, column conversions, and a C API oracle (Glauber Costa)
  • core/index-method: declare MVCC capabilities (Preston Thorpe)
  • tests: delete temporary databases instead of leaking them (Pekka Enberg)
  • core: report one SQLite version everywhere (Pekka Enberg)
  • bindings/tcl: enable ATTACH for the upstream TCL harness (Pekka Enberg)
  • enable more tests (Mikaël Francoeur)
  • core: stop scalar VALUES subqueries after first row (AYOUB NABIL BOUBAGRAT)
  • core/vdbe: accept i64::MIN when applying numeric affinity to text (Martin Mauch)
  • core/mvcc: reclaim Passive checkpoint versions and empty SkipMap slots (Pere Diaz Bou)
  • testing/differential: make differential fuzzer reliable enough to run in CI, and run it in CI (Jussi Saurio)
  • core/translate: route CREATE TEMP VIEW to the temp schema (roboturso)
  • scripts: merge PRs through the asynchronous merge REST API (Mikaël Francoeur)
  • core/vdbe: fuse consecutive Column reads into ColumnRange for O(N) record walks (Mikaël Francoeur)
  • Import more Postgres upstream conformance tests (Pekka Enberg)
  • sqlite/conformance: Import more upstream test files (Pekka Enberg)
  • sqlite/conformance: run all upstream test files with pass/fail/skip statuses (Pekka Enberg)
  • cli: show all lines of multi-line values in pretty mode (roboturso)
  • core/incremental: re-drive yielded cursor ops in WriteRow instead of advancing state (Martin Mauch)
  • core: move Database into its own database.rs module (Pekka Enberg)
  • core/vdbe: roll back attached implicit transaction on statement abort (Pekka Enberg)
  • bindings/dotnet: split NuGet runtime packages (Marc-André Moreau)
  • core/pager: fsync synchronous=FULL commits in a fresh WAL generation (Pekka Enberg)
  • core/schema: give unique set columns a named struct (Mikaël Francoeur)
  • core: match SQLite for i64::MIN hex literal negation in defaults (roboturso)
  • cli: print blob bytes raw in list output mode (roboturso)
  • core/vdbe: use Cursor::NullRow variant when NullRow targets unopened slot (roboturso)
  • testing/antithesis: create stress-composer database with random page size (Pekka Enberg)
  • fossier: vouch for @haze518 (Mikaël Francoeur)
  • mvcc: mark internal-only commits in the logical log (Preston Thorpe)
  • core/mvcc: call on_checkpoint_end before releasing checkpoint locks (Pere Diaz Bou)
  • allow picking emails to notify in Antithesis Experiment workflow (Mikaël Francoeur)
  • core/mvcc: handle abort on inner transaction of sequence properly (Avinash Sajjanshetty)
  • Instruct AI agents to prefer simple language (Jussi Saurio)
  • WITH RECURSIVE (Jussi Saurio)
  • FTS performance, memory, and maintenance improvements (Preston Thorpe)
  • core: reject invalid UTF-8 in TEXT record payloads (roboturso)
  • perf/core: inline short reused value copies (Jussi Saurio)
  • perf: core/storage: specialize record payload extraction (Jussi Saurio)
  • postgres: evaluate = ANY(array) and <> ALL(array) instead of stubbing to false (Michael)
  • core/mvcc: clear pending running CRC when a deferred log write aborts (roboturso)
  • github: Cache Rust toolchain for Codspeed jobs (Pekka Enberg)
  • sync: auto-detect the remote pull protocol (Preston Thorpe)
  • bindings: accept turso:// scheme in sync remote URLs (Pekka Enberg)
  • cli: switch syntect back to crates.io release (Pekka Enberg)
  • docs: document CDC commit records and change_txn_id (Pekka Enberg)
  • github: Reclaim Windows runner disk space before cross-platform simulator tests (Pekka Enberg)
  • core/storage: make B-tree buffer growth fallible (Pedro Muniz)
  • core/vdbe: reuse sorter, aggregate, and cast buffers (Pedro Muniz)
  • core/mvcc: transfer write set during rollback (Pedro Muniz)
  • core/translate: report composite primary key position in table_info (Chris Siddall)
  • core/vdbe: reject even argument counts in json_insert/json_replace (roboturso)
  • ci: use canonical bindings/* labels in auto-labeler (Pekka Enberg)
  • postgres: honor NULLS FIRST/LAST in ORDER BY (Oliver Rice)
  • bindings/javascript: pin playwright to 1.61.0 to match container image (Pekka Enberg)
  • core/translate: report zero result columns for CREATE TABLE ... AS SELECT (Pekka Enberg)
  • serverless: drop reserved replication_index fields from PROTOCOL.md (Pekka Enberg)
  • github: Switch workflows from EOL Node 20 to Node 22/24 (Pekka Enberg)
  • core/translate: repay deferred FK violations per matching child on parent INSERT (Martin Mauch)
  • core/vdbe: recycle records through pseudo registers (Pedro Muniz)
  • Some refactoring around comparison and null handling (Mikaël Francoeur)
  • core/vdbe: recycle record-producing opcode buffers (Pedro Muniz)
  • Serverless transaction async no exec lock (Nikita Sivukhin)
  • core: make typed row conversions checked and accept integers as f64 (Pekka Enberg)
  • make single-variant enum IOCompletions into unit struct (Preston Thorpe)
  • core/vdbe: reuse staged value buffers (Pedro Muniz)
  • core/storage: use allocator-backed B-tree buffers (Pedro Muniz)
  • core/vdbe: recycle register copies (Pedro Muniz)
  • use try_vec for random/zeroblob allocation (Preston Thorpe)
  • core/types: recycle serialized record buffers (Pedro Muniz)
  • core/translate: apply explicit COLLATE in compound SELECT ORDER BY (Martian)
  • build(deps-dev): bump brace-expansion from 2.1.0 to 2.1.2 in /testing/conformance/javascript (app/dependabot)
  • core/translate: reject NULLS FIRST/LAST in index definitions and upsert targets (roboturso)
  • core/translate: evaluate subqueries in aggregate args/FILTER before group by loop (Preston Thorpe)
  • translate: use covering indexes for column-free scans (GoodGoodMan)
  • build(deps-dev): bump shell-quote from 1.8.4 to 1.10.0 in /bindings/react-native (app/dependabot)
  • sync/engine: temporarily use truncate checkpoint only in mvcc mode (Preston Thorpe)
  • core/translate: report row value misused on arity mismatch (roboturso)
  • core/mvcc: use dynamic allocator for logical-log buffers (Pedro Muniz)
  • core/mvcc: annotate and instrument logical-log durability invariants (Sushant Dinesh)
  • core/vdbe: hoist per-instruction bookkeeping out of the dispatch loop (Glauber Costa)
  • simulator: Model per-row UNIQUE checks in UPDATE shadow (Jussi Saurio)
  • bindings/js, serverless/js: collapse duplicate column names in expanded rows (Pekka Enberg)
  • core/mvcc: allocate portable logical logs with TursoAllocator (Pedro Muniz)
  • Agentic instructions (Mikaël Francoeur)
  • serverless: remove Connection.execute() from the main API (Pekka Enberg)
  • ci: give every build-native leg a 60 minute timeout (Pekka Enberg)
  • postgres: accept COMMENT ON as a no-op (Rajat Venkatesh)
  • core/incremental: keep compound IS NULL predicates on the native filter path (Martin Mauch)
  • tests: replace iteration-capped nextval retry spin with stall deadline (Pekka Enberg)
  • core: reject journal_mode changes while CDC capture is active (russell romney)
  • ci: enable Rust backtraces in the Rust workflow (Pekka Enberg)
  • sql_generation: exclude i64::MAX from shadow integer affinity conversion (Pekka Enberg)
  • core: Clean up Database::open() variants with OpenOptions (Pekka Enberg)
  • testing: rename sqltests runner to sqltest (Pekka Enberg)
  • serverless/javascript: await async prepare() in integration tests (Glauber Costa)
  • perf(vdbe): decode pseudo-cursor columns in place and skip Column op-state (Glauber Costa)
  • perf(translate): evaluate a subquery once when shared by GROUP BY and SELECT (Glauber Costa)
  • core/mvcc: stream logical log serialization (Pedro Muniz)
  • fossier: vouch for @nightscape (Mikaël Francoeur)
  • core/mvcc: return if truncate did truncate or not (Pere Diaz Bou)
  • allow to pass arbitrary request headers in the queries through queryOptions (Nikita Sivukhin)
  • core/mvcc: retain checkpointed superseded versions in GC until overwrite is durable (roboturso)
  • Clean up SQLite conformance tests (Pekka Enberg)
  • core/mvcc: benchmark logical log serialization (Pedro Muniz)
  • core/vdbe: close vtab cursors before transaction finalization (Luther Monson)
  • core/mvcc: allocate stored records through MVStore allocator (Pedro Muniz)
  • readme: position Turso as multi-frontend (SQLite + Postgres) (Glauber Costa)
  • ci: switch x64 windows jobs to blacksmith runners (Pekka Enberg)
  • tests: reduce iteration counts in slow mvcc stress tests (Pekka Enberg)
  • ci: split no-checksum integrity tests into a dedicated Linux job (Pekka Enberg)
  • ci: pin nightly toolchains to nightly-2025-12-17 (Pekka Enberg)
  • ci: run Nyrkiö benchmark workflow only on push to main (Pekka Enberg)
  • ci: run whopper simulator iterations concurrently (Pekka Enberg)
  • core/json: propagate JSONB allocation failures (Pedro Muniz)
  • core: use ValueBlob in blob functions (Pedro Muniz)
  • core: propagate incremental blob allocation failures (Pedro Muniz)
  • core: propagate ValueBlob allocation failures (Pedro Muniz)
  • core: incremental blob I/O (sqlite3_blob_*) backed by the VDBE (Glauber Costa)
  • core: kill Connection::prepare_stmt() (Pekka Enberg)
  • docs: refresh SQL reference for Turso 0.7 (Glauber Costa)
  • core: dedup statement parsing into Connection::parse_sql() (Pekka Enberg)
  • testing/sqltests: replace param-hoisting timing test with bytecode snapshot (Pekka Enberg)
  • tests/fuzz: loosen float tolerance in math expression fuzz (Pekka Enberg)
  • core: pass TursoAllocator through Value::Blob (Pedro Muniz)

Fixed

  • testing/stress: handle Busy errors from integrity_check (Avinash Sajjanshetty)
  • core/io: Fix completion group memory leak (Pedro Muniz)
  • core/vdbe: fix wrong schema_version after VACUUM INTO on an MVCC database (roboturso)
  • core/translate: resolve REINDEX targets past collation false positives (Glauber Costa)
  • optimizer: integrate hash joins better into cost model and fix hash-join associated bugs (Jussi Saurio)
  • tests/database and types: assert opens, uuid errors and reprepares (Mikaël Francoeur)
  • tests/read path: assert plans, errors and rows with asserting (Mikaël Francoeur)
  • tests: assert errors and their messages with asserting (Mikaël Francoeur)
  • core/translate: resolve collation for generated-column references in row values (Glauber Costa)
  • bench: separate FTS query fixtures from automatic merging (Pedro Muniz)
  • core/wal: fix multiprocess database file reader race (Pekka Enberg)
  • sdk: return commit dependency errors as busy (Avinash Sajjanshetty)
  • core: report SQLITE_FULL without a "Database is full: " prefix (Pekka Enberg)
  • core/mvcc: fix group commit retry leak (Pekka Enberg)
  • core/translate: Fix handling of NULLs for row-value comparison against literal list (thomas kim)
  • core: Fix concurrent view expansion (Mikaël Francoeur)
  • Fix empty wal checkpoint sync (Nikita Sivukhin)
  • docs: fix simulator runner links (Wu Shuwen)
  • Fix RENAME COLUMN with collated table constraints (Wu Shuwen)
  • fix(optimizer): is_nonnull must return false for JSON arrow operators and LIKE with nullable ESCAPE (Diwakar Ray Yadav)
  • Fix generate_series bugs (Jussi Saurio)
  • Fix column affinity calculation for CREATE TABLE AS SELECT (Jussi Saurio)
  • sync/bindings: fix memory issues with JS/NAPI buffers (Preston Thorpe)
  • core/functions: fix datetime rounding (Mikhailov Egor)
  • Fix attached database paths that incorrectly use main database state (Pavan Nambi)
  • core/json: fix json_each/json_tree over null column (Mikhailov Egor)
  • core/mvcc: fix MVCC begin race with blocking checkpoint (Avinash Sajjanshetty)
  • Fix documentation typos (committed/occurred) (KAWACU Kennedy)
  • fix dead Discord invite links (Hernan Gonzalez)
  • Fix clone_test_db.sh to clone the real testing database path (KAWACU Kennedy)
  • core/io: fix completion group hang when child finishes during build (Pekka Enberg)
  • core/translate: fix autoindex construction to read virtual generated-column dependencies from the source table instead of the index being built (Harsh Patel)
  • Fixes for Nyrkiö nightly run (Pekka Enberg)
  • bindings/rust: fix Windows panic when sync sends a request body over 4 GiB (Preston Thorpe)
  • Fix b-tree corruption with cells below minimum size (Pekka Enberg)
  • More SQLite JSON function fixes (Pekka Enberg)
  • core/vdbe: roll back explicit transaction after WAL write error (Pavan Nambi)
  • postgres: fix current date and time expressions being treated as columns (Joe Sluis)
  • Fixes for json_valid() SQL function (Pekka Enberg)
  • core/translate: Fix correlated rowid reads from covering index scans (Pavan Nambi)
  • core: fix affinity loss for FROM-subquery/CTE/view columns with no real type (Sergei Iarymov)
  • sync: fix WAL session double-end after commit error (Avinash Sajjanshetty)
  • Fix WAL frame-1 checksum after savepoint rollback and cache spill (Pavan Nambi)
  • core: Fix snapshot isolation violation for passive MVCC checkpoint (Preston Thorpe)
  • core/fts: Fix ngram tokenizer casing (Ghxst ☠️)
  • SQLite-compatible error messages (Pekka Enberg)
  • Fixes for MVCC sync issues found by fuzzer (Preston Thorpe)
  • core/translate: fix REAL-affinity index seeks losing integer precision (Sergei Iarymov)
  • core: make committed WAL data survive a crash before the first checkpoint (roboturso)
  • sqlite/parser: match SQLite error for ORDER BY before compound operator (roboturso)
  • fts: fix duplicate rowids when index build flushes full batches (Pavan Nambi)
  • core: fix MVCC+CDC panic on empty COMMIT after a failed captured write (Glauber Costa)
  • tests/integration: extract shared UnreliableIo crash-simulation module (Pekka Enberg)
  • Fix partial index alias panic (Nikita Sivukhin)
  • core/wal: fsync WAL before checkpoint backfill for crash atomicity (roboturso)
  • core/vdbe: fix round() to break exact ties away from zero (Sergei Iarymov)
  • github: strip debug info from Linux JS native libraries (Pekka Enberg)
  • fix: wasm32 unknow unknow compilation (Marc-Anthony)
  • core: fix attached-database tx handling (Preston Thorpe)
  • Fix encrypted fresh DB page-size retargeting (Ahmad Alhour)
  • github: Never mark issues as stale (Pekka Enberg)
  • sync: fix DELETE and upsert replay for tables with composite PK (Preston Thorpe)
  • mvcc: fix rootpage resolution for portable changes (Preston Thorpe)
  • fix/core/views: derive star columns from joined sources (Jussi Saurio)
  • build: fix uv project reference in Makefile test targets (Michael)
  • testing/stress: handle busy errors during integrity_check (Avinash Sajjanshetty)
  • core: Fix change count leaking from sequences in MVCC mode (Preston Thorpe)
  • bindings/python: Reject sqlite3.Row when used as a row_factory with an explicit TypeError (Orthel Toralen)
  • Fix panics (Nikita Sivukhin)
  • Fix Rust IOCP multiprocess WAL execute_batch hang (Marc-André Moreau)
  • parser: preserve blob literal prefix case (Martian)
  • core/vdbe: fix dropped comparison result in spilled sort merge (Pekka Enberg)
  • Fix JavaScript serverless driver URL normalization (Pekka Enberg)
  • core/mvcc: fix passive checkpoint races with concurrent DROP (Pere Diaz Bou)
  • bindings/tcl: resolve cargo target dir via scripts/cargo-target-dir (Pekka Enberg)
  • core/translate: Fix "no such column" error to echo query casing, not schema casing (Vibhas Goyal)
  • Fix sync engine transform (Nikita Sivukhin)
  • core/vdbe: Fix panic in EXPLAIN on compound select with ORDER BY (Shubham Mishra)
  • Random fixes for upstream SQLite TCL test failures (Pekka Enberg)
  • core/vdbe: resolve aggregate argument collation at translation time (Glauber Costa)
  • perf(sorter): compare records via a normalized 8-byte key prefix (Glauber Costa)
  • Fix async transaction API in JavaScript SDKs (Nikita Sivukhin)
  • core/storage: assert checkpoint backfill crash-atomicity (reveals a NORMAL-mode torn-recovery bug) (Sushant Dinesh)
  • core/windows: fix WAL lock coordination (Marc-André Moreau)
  • fix: do not resolve schema-qualified references as cte (howen)
  • serverless/javascript: fix stale inTransaction after execute and batch (Pekka Enberg)
  • fix compilation for integration test (Nikita Sivukhin)
  • postgres/cli: fix port collisions in wire-protocol tests (Pekka Enberg)
  • core/translate: Fix missing index after UPSERT due to pre-constraint check index mutation (Preston Thorpe)
  • core/translate: Fix cost model for InSeek for IN LIST query (Preston Thorpe)

Install turso_cli 0.8.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.8.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.8.0/turso_cli-installer.ps1 | iex"

Download turso_cli 0.8.0

File Platform Checksum
turso_cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
turso_cli-x86_64-apple-darwin.tar.xz Intel macOS checksum
turso_cli-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
turso_cli-x86_64-pc-windows-msvc.zip x64 Windows checksum
turso_cli-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
turso_cli-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

Verifying GitHub Artifact Attestations

The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:

gh attestation verify <file-path of downloaded artifact> --repo tursodatabase/turso

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>

Don't miss a new turso release

NewReleases is sending notifications on new releases.