Release Notes
Added
- bindings/rust: Add WAL API support (Nikita Sivukhin)
- Implement the Returning statement for inserts and updates (Glauber Costa)
- implement the pragma encoding (Glauber Costa)
- support doubly qualified identifiers (Glauber Costa)
- mark detach as supported (Glauber Costa)
- Support ATTACH (read only) (Glauber Costa)
- serverless: Add DatabasError type (Pekka Enberg)
- btree/balance: support case where immediate parent page of unbalanced child page also overflows (Jussi Saurio)
- serverless: Add Statement.run() method (Pekka Enberg)
- make add dirty to change flag and also add page to the dirty list (Nikita Sivukhin)
- types: less noisy Debug implementation for ImmutableRecord (Jussi Saurio)
- Safe
AtomicUsize
wrapper fordb_state
: addDbState
andAtomicDbState
(Levy A.) - Add Github workflow for Turso serverless package (Pekka Enberg)
- Add Rickrolling Turso blog post to contrib (Avinash Sajjanshetty)
- Add
@tursodatabase/serverless
package (Pekka Enberg) - Implement pragma database_list (Glauber Costa)
- fix/test: fix and unignore incorrectly implemented test (Jussi Saurio)
- implement Debug for Database (Glauber Costa)
- implement pragma application_id (Glauber Costa)
- implement write side of pragma schema_version (Glauber Costa)
- Simplify blocking operations – add
io.block(fn)
for IO trait implementors (Levy A.) - bindings/rust: Initial support for transactions API (Diego Reis)
- claude sonnet forgot to run clippy when implementing mcp server (Jussi Saurio)
- bindings/js: support iterator, and more kinds of params (Mikaël Francoeur)
- Add a native MCP server (Glauber Costa)
- sim: add order by to some queries (Jussi Saurio)
- Core: Introduce external sorting (Iaroslav Zeigerman)
- forgot to set the state to NewTrunk if we have more leaf pages than free entries (Pedro Muniz)
- Implement IO latency correctly in simulator (Pedro Muniz)
- page cache: temporarily increase default size until WAL spill is implemented (Jussi Saurio)
- compat: add integrity_check (Pere Diaz Bou)
- sim: provide additional context in assertion failures (Jussi Saurio)
- btree: add some assertions related to #2106 (Jussi Saurio)
- bench: add insert benchmark (batch sizes: 1,10,100) (Jussi Saurio)
- Support page_size pragma setting (meteorgan)
Updated
- bindings/javascript: Generate native npm packages at publish (Pekka Enberg)
- Replace custom wasm bindings with napi-rs (Diego Reis)
- core: Enforce shared database object per database file (Pekka Enberg)
- btree/pager: Improve update performance by reusing freelist pages in allocate_page() (Jussi Saurio)
- VDBE/op_column: use references to cursor payload instead of cloning (Jussi Saurio)
- io/unix: wrap file with Mutex (Pere Diaz Bou)
- core: Clone everything in schema (Pere Diaz Bou)
- core/translate: Handle Expr::Id in
CREATE INDEX
(Kristofer) - Thread-safe
WindowsFile
(Levy A.) - io_uring: use Arc pointer for user data of entries (Preston Thorpe)
- Stop checkpointing the entire WAL after every write when wal frame size > threshold (Preston Thorpe)
- compat police (Glauber Costa)
- remove upsert statement from COMPAT.md (Glauber Costa)
- Update limbo -> turso in manual.md (stano)
- bindings/javascript: Switch to napi v3 (Diego Reis)
- Simplify sum() aggregation logic (bit-aloo)
- Ignore WAL frames after bad checksum (Pere Diaz Bou)
- parser: Distinguish quoted identifiers and unify Id into Name enum (bit-aloo)
- btree: clear overflow pages when insert overwrites a cell (= UPDATE) (Jussi Saurio)
- Append WAL frames one by one (Pere Diaz Bou)
- pager: Clear stale page cache if database changed (Jussi Saurio)
- sim/aws: ignore child process exits with code 137 (Jussi Saurio)
- WAL insert API: force schema re-parse if necessary after WAL sync session end (Nikita Sivukhin)
- WAL insert: mark pages as dirty (Nikita Sivukhin)
- emit SetCookie after DropTable (Glauber Costa)
- Bail early for read-only virtual tables (Preston Thorpe)
- measure only the time it takes to open the actual connection (Glauber Costa)
- Explicit rowid insert (Nikita Sivukhin)
- Deserialize keys only once when sorting immutable records (Iaroslav Zeigerman)
- WAL insert API (Nikita Sivukhin)
- Pager: clear overflow cells when freeing page (Jussi Saurio)
- make readonly a property of the database (Glauber Costa)
- use default hasher for the sake of determinism (Nikita Sivukhin)
- Load static extensions once and store on Database instead of once per connection (Preston Thorpe)
- wal: write txn fail in case max_frame change midway (Pere Diaz Bou)
- Improve Antithesis tests (Pekka Enberg)
- core/lib: init_pager lock shared wal until filled (Pere Diaz Bou)
- test/stress&sim: enable indexes by default (Jussi Saurio)
- Usable space unwrap (Pedro Muniz)
- BTreeTable::to_sql: wrap special column names in brackets (Nils Koch)
- Avoid redundant decoding of record headers when reading sorted chunk files (Iaroslav Zeigerman)
- compat: change page_size pragma and RowData opcode to yes (meteorgan)
- Explain the Turso challenge (Glauber Costa)
- gh workflow for dart (test, precompile, publish), only test is activated (Andika Tanuwijaya)
- bindings/rust: Return number of rows changed from Connection::execute() (Rohith Suresh)
- bindings/java: Make TursoDB and TursoDB factory thread-safe (Mikaël Francoeur)
- use
wasm32-wasip1
target instead ofwasm32-wasi
(Nils Koch) - improve handling of double quotes (Glauber Costa)
- Remove
find_cell
, allow overwrite of index interior cell (Jussi Saurio) - sim: change --disable-create-index flag to --enable-create-index (default false) (Jussi Saurio)
- Reanimate MVCC (Pekka Enberg)
- Replace verbose IO Completion methods with helpers (Preston Thorpe)
- Use pread and pwrite in run_once (Ihor Andrianov)
make_from_btree
should wait for IO to complete (Pedro Muniz)- chore: update rust to version 1.88.0 (Nils Koch)
- refactor/btree&vdbe: fold index key info (sort order, collations) into a single struct (Jussi Saurio)
- core: Copy-on-write for in-memory schema (Levy A.)
- simulator: Disable
INSERT INTO .. SELECT
for being slow (Pekka Enberg) - Async IO: registration of file descriptors (Preston Thorpe)
- Clean up AST unparsing, remove
ToSqlString
(Levy A.) - rename operation_xxx to change_xxx to make naming more consistent (Nikita Sivukhin)
- Separate user-callable cacheflush from internal cacheflush logic (Diego Reis)
- make unixepoch to return i64 (Nikita Sivukhin)
- sim: ignore fsync faults (Jussi Saurio)
- Updates to the simulator (Alperen Keleş)
- small refactor: rename "amount" to "extra_amount" (Nikita Sivukhin)
- refactor: Changes CursorResult to IOResult (Diego Reis)
- btree: unify table&index seek page boundary handling (Jussi Saurio)
- Treat table-valued functions as tables (Piotr Rżysko)
Fixed
- perf: fix logic error in is_simple_count() (Jussi Saurio)
- Fix writing wal header for async IO (Preston Thorpe)
- bindings/javascript: Fix tracing and
SqliteError
message not populated (Levy A.) - Fix sum() to follow the SQLite semantics (FamHaggs)
- Fix error handling when binding column references while translating the UPDATE statement (Iaroslav Zeigerman)
- Fix schema reparse logic (Nikita Sivukhin)
- Fix page_count pragma (meteorgan)
- sqlite3: Improve SQLite error handling and fix C-string safety (Ceferino Patino)
- fix: SUM returns correct float for mixed numeric/non-numeric types & return value on empty set (Axel Tobieson Rova)
- silence clippy errors with features disabled (Glauber Costa)
- fix raw read frame WAL API (Nikita Sivukhin)
- Work around CREATE TABLE whitespace issue (Jussi Saurio)
- Fix issues in alter table tests and fix a small error in BTreeTable::to_sql (Jussi Saurio)
- Fix duplicate SET statement compatibility with SQLite (Ihor Andrianov)
- test/clickbench: fix clickbench (Jussi Saurio)
- fix/sim: actually enable indexes by default (Jussi Saurio)
- fix/btree/balance: interior cell insertion can leave page overfull (Jussi Saurio)
- Fix
error: Stable 1.88.0 is not available
in Nix flake (Levy A.) - Fix column order for multi-row insertion (Nikita Sivukhin)
- doc: fix intra-repo links for contribution guide and license, and expand binding links (bit-aloo)
- fix opcodes missing a database register (Glauber Costa)
- sorter: fix sorter panic on SortedChunkIOState::WaitingForRead (Jussi Saurio)
- Fix parent page stack location after interior node replacement (Jussi Saurio)
- Fix rollback for TxErrors (Diego Reis)
- make most instrumentation levels to be Debug or Trace instead (Pedro Muniz)
- Property
FaultyQuery
should fail if we encounter an error that is not expected (Pedro Muniz) - translate/create index: fix wrong collations (Jussi Saurio)
- bind/java: Fix Linux x86 build release (Diego Reis)
- fix/btree: fix insert_into_cell() logic (Jussi Saurio)
- cli: fix not being able to redirect traces to a file from inline query (Jussi Saurio)
- bind/javascript: Fix presentation mode disabling logic (Diego Reis)
- btree: fix post-balancing seek bug in delete path (Jussi Saurio)
- btree: fix trying to go upwards when we are already at the end of the entire btree (Jussi Saurio)
- btree: fix interior cell replacement in btrees with depth >=3 (Jussi Saurio)
- extensions/vtab: fix i32 being passed as i64 across FFI boundary (Jussi Saurio)
- Fix CSV import in the shell (Jussi Saurio)
- fix record header size calculations and incorrect assumptions (Jussi Saurio)
- bindings/js: fix more tests (Mikaël Francoeur)
Install turso_cli 0.1.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.1.3/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.1.3/turso_cli-installer.ps1 | iex"
Download turso_cli 0.1.3
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-x86_64-pc-windows-msvc.zip | x64 Windows | 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>