NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #461 most downloaded on crates.io
Native bindings to the libsqlite3 library
Last release 2 months ago
08 Aug 2026
Release timing varies
gaps range from 2 weeks to 6 months
Some releases are documented
notes for 23 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
12 years old
65 releases · first in 2015
Nothing published for this version
Nothing published for this version
Disable u64, usize ToSql/FromSql impl by default #1732 , # #1722 (breaking change)
wasm32-unknown-unknown support #1769, #488, #827Full Changelog: v0.37.0...v0.38.0
One column per quarter.
Add FromSqlError::other convenience conversion #1703
FromSqlError::other convenience conversion #1703Full Changelog: v0.36.0...v0.37.0
Introduce Name trait to support both &str and &CStr as name #1659
loadable_extension is incompatible with some other features #1686Full Changelog: v0.35.0...v0.36.0
Breaking change: Check that Connection::execute has no tail #1679 / #397
Timestamp #1676Full Changelog: v0.34.0...v0.35.0
Find the system library with minimum version 3.14.0 #1628
ValueRef methods #1629Full Changelog: v0.33.0...v0.34.0
Remove lazy_static dependency #1550
impl FromSql for various heap-allocated string and blob slices #15584.6.1 (SQLite 3.46.1) #1566wasm32-wasip(\d) targets not enabling wasi compile flags in bundled mode. #1569wal_hook #1595arg is out-of-range for auxiliary data #1607Full Changelog: v0.32.1...v0.33.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Compare
Compare
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
BREAKING CHANGE: ToSql implementation for time::Timespec uses RFC 3339 (%Y-%m-%dT%H:%M:%S.%fZ). Previous format was %Y-%m-%d %H:%M:%S:%f %Z.
ToSql implementation for time::Timespec uses RFC 3339 (%Y-%m-%dT%H:%M:%S.%fZ).
Previous format was %Y-%m-%d %H:%M:%S:%f %Z.Sendable and 'static.free_boxed_hook does not work for fn.sqlite3_update_hook (#260, #328), sqlite3_commit_hook and sqlite3_rollback_hook.unlock_notify feature (#294, #331).Statement::column_index case-insensitive (#330).&mut Connection in Transaction.tyvar_behind_raw_pointer warnings.Connection::open documentation (#332)sqlite3_get_autocommit and sqlite3_stmt_busy.sqlite3_busy_timeout and sqlite3_busy_handler.sqlite3_expanded_sql.rerun-if-env-changed in libsqlite3-sys (#329).InvalidQuery error when SQL is not read only.Added ToSqlConversionFailure case to Error enum.
sqlcipher feature allows linking against SQLCipher instead of SQLite.Defines HAVE\_USLEEP when building with a bundled SQLite (#263).
ToSql impls for str and [u8].Nothing published for this version
Avoid publicly exporting SQLite constants multiple times from libsqlite3-sys.
FromSql and ToSql impls for isize. Documents why usize and u64 are not included.This check can be skipped by calling the unsafe function rusqlite::bypass_sqlite_initialization(). This is technically a breaking change but is unlike…
ErrorCode enum from libsqlite3-sys.version() and version_number() functions for querying the version of SQLite in use.limits feature, exposing limit() and set_limit() methods on Connection.libsqlite3-sys 0.7.0, which runs rust-bindgen at build-time instead of assuming the
presence of all expected SQLite constants and functions.rusqlite::bypass_sqlite_initialization(). This is
technically a breaking change but is unlikely to affect anyone in practice, since prior to this
version the check that rusqlite was using would cause a segfault if linked against a SQLite
older than 3.7.0.rusqlite::bypass_sqlite_version_check().libc dependency in favor of using std::os::raw* Update dependencies.
Make ToSqlOutput itself implement ToSql.
ToSqlOutput itself implement ToSql.BREAKING CHANGE: Connection::close() now returns a Result<(), (Connection, Error)> instead of a Result<(), Error> so callers get the still-open connec…
Connection::close() now returns a Result<(), (Connection, Error)> instead
of a Result<(), Error> so callers get the still-open connection back on failure.Nothing published for this version
Nothing published for this version
BREAKING CHANGE: The FromSql trait has been redesigned. It now requires a single, safe method instead of the previous definition which required implem…
FromSql trait has been redesigned. It now requires a single, safe
method instead of the previous definition which required implementing one or two unsafe
methods.ToSql trait has been redesigned. It can now be implemented without
unsafe, and implementors can choose to return either borrowed or owned results.query_row, query_row_and_then, query_row_safe,
and query_row_named now expects a &Row instead of a Row. The vast majority of calls
to these functions will probably not need to change; see
https://github.com/jgallagher/rusqlite/pull/184.Error enum have sprouted additional information
(e.g., FromSqlConversionFailure now also includes the column index and the type returned
by SQLite).#[deprecated(since = "...", note = "...")] flags (new in Rust 1.9 for libraries) to
all deprecated APIs.query_row convenience function to Statement.bundled feature which will build SQLite from source instead of attempting to link
against a SQLite that already exists on the system.DatabaseBusy; see https://github.com/jgallagher/rusqlite/issues/186.BREAKING CHANGE: Rows no longer implements Iterator. It still has a next() method, but the lifetime of the returned Row is now tied to the lifetime of…
Rows no longer implements Iterator. It still has a next() method, but
the lifetime of the returned Row is now tied to the lifetime of the vending Rows object.
This behavior is more correct. Previously there were runtime checks to prevent misuse, but
other changes in this release to reset statements as soon as possible introduced yet another
hazard related to the lack of these lifetime connections. We were already recommending the
use of query_map and query_and_then over raw query; both of those still return handles
that implement Iterator.Transaction::savepoint() now returns a Savepoint instead of another
Transaction. Unlike Transaction, Savepoints can be rolled back while keeping the current
savepoint active.Connection or savepoints from a Transaction
now take &mut self instead of &self to correctly represent that transactions within a
connection are inherently nested. While a transaction is alive, the parent connection or
transaction is unusable, so Transaction now implements Deref<Target=Connection>, giving
access to Connection's methods via the Transaction itself.Transaction::set_commit and Transaction::set_rollback have been replaced
by Transaction::set_drop_behavior.Connection::prepare_cached. Connection now keeps an internal cache of any statements
prepared via this method. The size of this cache defaults to 16 (prepare_cached will always
work but may re-prepare statements if more are prepared than the cache holds), and can be
controlled via Connection::set_prepared_statement_cache_capacity.query_map_named and query_and_then_named to Statement.insert convenience method to Statement which returns the row ID of an inserted row.exists convenience method returning whether a query finds one or more rows.serde_json crate. Requires the serde_json feature.chrono crate. Requires the chrono feature.load_extension feature from libsqlite3-sys. load_extension is still available
on rusqlite itself.trace feature.clippy feature and addresses issues it found.column_count() method to Statement and Row.types::Value for dynamic column types.functions Cargo feature).RowIndex trait allowing columns to be fetched via index (as before) or name (new).ZeroBlob type under the blob module/feature exposing SQLite's zeroblob API.handle() method to Connection. Please file an issue if you actually use it.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
BREAKING CHANGE: SqliteError is now an enum instead of a struct. Previously, we were (ab)using the error code and message to send back both underlying…
SqliteError is now an enum instead of a struct. Previously, we were (ab)using
the error code and message to send back both underlying SQLite errors and errors that occurred
at the Rust level. Now those have been separated out; SQLite errors are returned as
SqliteFailure cases (which still include the error code but also include a Rust-friendlier
enum as well), and rusqlite-level errors are captured in other cases. Because of this change,
SqliteError no longer implements PartialEq.SqliteTransactionDeferred, SqliteTransactionImmediate, and
SqliteTransactionExclusive are no longer exported. Instead, use
TransactionBehavior::Deferred, TransactionBehavior::Immediate, and
TransactionBehavior::Exclusive.Sqlite prefix on many types:
SqliteConnection is now ConnectionSqliteError is now ErrorSqliteResult is now ResultSqliteStatement is now StatementSqliteRows is now RowsSqliteRow is now RowSqliteOpenFlags is now OpenFlagsSqliteTransaction is now Transaction.SqliteTransactionBehavior is now TransactionBehavior.SqliteLoadExtensionGuard is now LoadExtensionGuard.
The old, prefixed names are still exported but are deprecated...._named methods for executing queries using named placeholder parameters.backup feature that exposes SQLite's online backup API.blob feature that exposes SQLite's Incremental I/O for BLOB API.functions feature that allows user-defined scalar functions to be added to
open SqliteConnections.Adds trace feature that allows the use of SQLite's logging, tracing, and profiling hooks.
trace feature that allows the use of SQLite's logging, tracing, and profiling hooks.query_map and query_and_then:
'static requirement on the closure's output type.&SqliteRow instead of a SqliteRow.SQLITE3_LIB_DIR now takes precedence over pkg-config.pkg-config is not available, we will try to find libsqlite3 in /usr/lib.SqliteResults.libc dependency to 0.2, fixing builds on ARM for Rust 1.6 or newer.Adds Sized bound to FromSql trait as required by RFC 1214.
Sized bound to FromSql trait as required by RFC 1214.Removes get_opt. Use get_checked instead.
get_opt. Use get_checked instead.query_row_and_then and query_and_then convenience functions. These are analogous to
query_row and query_map but allow functions that can fail by returning Results.P: AsRef<...> from &P to P.execute when query was intended.SqliteStatement and SqliteConnection.get_checked to correctly indicate that it returns errors (not panics)
when given invalid types or column indices.Add column_names() to SqliteStatement.
column_names() to SqliteStatement.SQLITE_OPEN_NO_MUTEX and SQLITE_OPEN_URI flags when opening a
new connection.sqlite3_exec was wrong).sqlite3_destructor_type to define SQLITE_STATIC and SQLITE_TRANSIENT.Deprecate query_row_safe (use query_row instead).
query_row to return a Result instead of unwrapping.query_row_safe (use query_row instead).query_map.get_checked, which asks SQLite to do some basic type-checking of columns.Your coding agent can read these notes before it upgrades. Set up the MCP server →