Skip to main content

max / goingson

Move to rusqlite 0.40 with the rest of the tree Unblocked by Balanced Breakfast leaving sqlx-sqlite, which was the last thing holding synckit at 0.39. src-tauri declares libsqlite3-sys directly under cfg(target_os = "android"), because system SQLite is not reachable through the NDK, and that pin has to move with rusqlite or Android is the one target that fails long after everything else is green. r2d2_sqlite is available now and we are still not taking it: the connection manager is ~30 lines in db-sqlite and would still have to set the per-connection PRAGMAs by hand, so it buys nothing. Comment updated to say that rather than the stale "requires 0.40".
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-08 01:12 UTC
Signed with PGP, not checked
Commit: 652ab419101c6e260b3334d080fd4279e708675a
Parent: ae8d508
3 files changed, +17 insertions, -17 deletions
M Cargo.lock +7 -7
@@ -2327,11 +2327,11 @@
2327 2327
2328 2328 [[package]]
2329 2329 name = "hashlink"
2330 - version = "0.11.1"
2330 + version = "0.12.1"
2331 2331 source = "registry+https://github.com/rust-lang/crates.io-index"
2332 - checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f"
2332 + checksum = "32069d97bb81e38fa67eab65e3393bf804bb85969f2bc06bf13f64aef5aba248"
2333 2333 dependencies = [
2334 - "hashbrown 0.16.1",
2334 + "hashbrown 0.17.1",
2335 2335 ]
2336 2336
2337 2337 [[package]]
@@ -3173,9 +3173,9 @@
3173 3173
3174 3174 [[package]]
3175 3175 name = "libsqlite3-sys"
3176 - version = "0.37.0"
3176 + version = "0.38.1"
3177 3177 source = "registry+https://github.com/rust-lang/crates.io-index"
3178 - checksum = "b1f111c8c41e7c61a49cd34e44c7619462967221a6443b0ec299e0ac30cfb9b1"
3178 + checksum = "f6c19a05435c21ac299d71b6a9c13db3e3f47c520517d58990a462a1397a61db"
3179 3179 dependencies = [
3180 3180 "cc",
3181 3181 "pkg-config",
@@ -4895,9 +4895,9 @@
4895 4895
4896 4896 [[package]]
4897 4897 name = "rusqlite"
4898 - version = "0.39.0"
4898 + version = "0.40.1"
4899 4899 source = "registry+https://github.com/rust-lang/crates.io-index"
4900 - checksum = "a0d2b0146dd9661bf67bb107c0bb2a55064d556eeb3fc314151b957f313bcd4e"
4900 + checksum = "11438310b19e3109b6446c33d1ed5e889428cf2e278407bc7896bc4aaea43323"
4901 4901 dependencies = [
4902 4902 "bitflags 2.13.1",
4903 4903 "fallible-iterator",
M Cargo.toml +7 -7
@@ -29,13 +29,13 @@
29 29 tokio = { version = "1.49", features = ["rt-multi-thread", "macros"] }
30 30
31 31 # Database - SQLite via rusqlite (house standard; wiki `sql-library-standard`).
32 - # Pinned to 0.39 to share one `libsqlite3-sys` with synckit-client's SyncStore,
33 - # which opens its own connection to the same file. Two versions of that -sys
34 - # crate cannot co-link, so this pin moves only in lockstep with synckit.
35 - rusqlite = { version = "0.39", features = ["bundled"] }
36 - # Pooling. Deliberately r2d2 and not r2d2_sqlite: the latter requires rusqlite
37 - # 0.40, which is the pin above. The connection manager is ~30 lines in
38 - # db-sqlite and has to set the per-connection PRAGMAs by hand regardless.
32 + # Kept in step with synckit-client's SyncStore, which opens its own connection to
33 + # the same file. Two versions of `libsqlite3-sys` cannot co-link, so this pin
34 + # moves only in lockstep with synckit. Both went to 0.40 on 2026-08-07.
35 + rusqlite = { version = "0.40", features = ["bundled"] }
36 + # Pooling. Still plain r2d2 rather than r2d2_sqlite: 0.40 makes the latter
37 + # available, but the connection manager is ~30 lines in db-sqlite and would still
38 + # have to set the per-connection PRAGMAs by hand, so it buys nothing now.
39 39 r2d2 = "0.8"
40 40
41 41 # Authentication
@@ -44,9 +44,9 @@
44 44 # Database
45 45 # The repository layer is rusqlite behind an r2d2 pool, and the SyncStore engine
46 46 # (synckit-client) owns a private rusqlite connection to the same SQLite file.
47 - # Same version + libsqlite3-sys 0.37 as the engine, so both bindings share one
47 + # Same version + libsqlite3-sys 0.38 as the engine, so both bindings share one
48 48 # bundled SQLite.
49 - rusqlite = { version = "0.39", features = ["bundled"] }
49 + rusqlite = { version = "0.40", features = ["bundled"] }
50 50
51 51 # Serialization
52 52 serde = { workspace = true }
@@ -141,7 +141,7 @@
141 141
142 142 # Android: bundle SQLite (system SQLite not accessible via NDK)
143 143 [target.'cfg(target_os = "android")'.dependencies]
144 - libsqlite3-sys = { version = "0.37", features = ["bundled"] }
144 + libsqlite3-sys = { version = "0.38", features = ["bundled"] }
145 145
146 146 [dev-dependencies]
147 147 tempfile = "3"