releases.shpreview

0.2.0 -- 2025-10-03

v0.2.0

October 3, 2025TursoView original ↗

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>

Fetched April 3, 2026