v0.8.0
sadmann7/tablecnv0.8.0Sep 29, 2026by github-actions[bot]
Upgrading?
AI Summary
Major version bump introducing serverless drivers (Go, Python, Rust), the SQL over HTTP protocol, window functions, and experimental Postgres compatibility.
Key Highlights
- Added serverless drivers for Go, Python, and Rust
- Added SQL over HTTP protocol specification
- Added window functions (cume_dist, dense_rank, etc.)
- Experimental Postgres support
New Features
- Serverless drivers
- SQL over HTTP
- Window functions
- Postgres compatibility
- Performance optimizations
Full Release Notes
## 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 ```sh 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 ```sh 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](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-aarch64-apple-darwin.tar.xz.sha256) | | [turso_cli-x86_64-apple-darwin.tar.xz](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-x86_64-apple-darwin.tar.xz.sha256) | | [turso_cli-aarch64-pc-windows-msvc.zip](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-aarch64-pc-windows-msvc.zip.sha256) | | [turso_cli-x86_64-pc-windows-msvc.zip](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-x86_64-pc-windows-msvc.zip.sha256) | | [turso_cli-aarch64-unknown-linux-gnu.tar.xz](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-aarch64-unknown-linux-gnu.tar.xz) | ARM64 Linux | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-aarch64-unknown-linux-gnu.tar.xz.sha256) | | [turso_cli-x86_64-unknown-linux-gnu.tar.xz](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-x86_64-unknown-linux-gnu.tar.xz) | x64 Linux | [checksum](https://github.com/tursodatabase/turso/releases/download/v0.8.0/turso_cli-x86_64-unknown-linux-gnu.tar.xz.sha256) | ## Verifying GitHub Artifact Attestations The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify): ```sh gh attestation verify <file-path of downloaded artifact> --repo tursodatabase/turso ``` You can also download the attestation from [GitHub](https://github.com/tursodatabase/turso/attestations) and verify against that directly: ```sh gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation> ```
Related Repositories
openclaw/openclaw★ 392,727
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
nilbuild/developer-roadmap★ 370,105
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
morluto/rea★ 361,388
Reverse engineer anything with agents, from app behavior down to native binaries.
anomalyco/opencode★ 219,915
The open source coding agent.
n8n-io/n8n★ 208,292
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.