rusqlite
Ergonomic wrapper for SQLite
0.40.2
96M downloads/mo
#827 most downloaded on crates.io
rusqlite/rusqlite
What this package is like to depend on
Last release 15 days ago
08 Aug 2026
Ships fairly regularly
a new release about every 2 months
Most releases are documented
notes for 47 of 73 stable releases
11 versions withdrawn
withdrawn after publishing
12 years old
85 releases · first in 2014
5 releases in the last 12 months
see the full history below
Release timeline
85 releases · Nov 2014 to Aug 2026Releases
latest 60 of 85-
0.40.208 Aug 2026 -
0.40.106 Jun 2026Release notes
Open source →What's Changed
- Fix clippy warnings #1852
- Bump bundled SQLite version to 3.53.2 #1853
- Bump hashlink version #1855
- Fix SQL injection when SAVEPOINT name is tainted #1854
Full Changelog: v0.40.0...v0.40.1
-
0.40.026 May 2026Release notes
Open source →What's Changed
- Breaking changes: Replace VTab macros by constructors #1823
- Breaking changes: Fix VTab::best_index #1824
- Asserts on VTab::connect aux and args #1825
- Breaking changes: Fix VTab::connect / create #1826
- Breaking changes: Allow opting out of using sqlite-wasm-rs on wasm32-unknown-unknown #1828, #1829
- Derive Default for SeriesTabCursor/ArrayTabCursor #1830
- Update link to pre-update hook #1831
- Breaking changes: Fix VTab::connect #1832
- impl From for FromSqlError #1833
- Breaking changes: Fix vtab::dequote #1835
- Bump bundled SQLCipher to version 4.14.0 #1837
- sqlite3_set_errmsg #1752
- Bump sqlite3-parser version #1838
- Fix UB in ToSqlOutput::from_rc #1839
- Ensure miri doesn't complain #1840
- Bump to actions/checkout@v6 #1842
- Add support to UtcDateTime #1843, #1844
- Bump bundled SQLite version to 3.53.1 #1848
- Replace some cfg(not by cfg_select #1850
Full Changelog: v0.39.0...v0.40.0
-
0.39.015 Mar 2026Release notes
Open source →What's Changed
- Fix constraints on VTab Aux data #1778, #1771
- Fix docs.rs generation #1779
- Fix a small typo in
rollback_hookdocstring #1780 - Fix some warnings from Intellij #1781
- Minimal doc for features #1783
- Clear hooks only for owning connections #1785, #1784
- Fix link to SQLite C Interface, Prepare Flags #1787
- Comment functions which are not usable from a loadable extension #1789
- Factorize code #1792
- Update getrandom to 0.4 #1798
- Update Cargo.toml #1800
- Fix appveyor #1807
- Add support to unix timestamp for chrono, jiff and time #1808, #1803
- fix(trace): check that the sql string pointer is not NULL #1805
- Bump bundled SQLite version to 3.51.3 #1818
- Use TryFrom for Value #1819, #1817
- Make possible to pass your own pointers #1626, #1602
Full Changelog: v0.38.0...v0.39.0
-
0.38.020 Dec 2025Release notes
Open source →What's Changed
- bump sqlcipher to 4.10.0 (sqlite 3.50.4) #1725
- Use CARGO_CFG_TARGET_FEATURE for crt-static check #1737
- Disable u64, usize ToSql/FromSql impl by default #1732, ##1722 (breaking change)
- Make statement cache optional #1682, #1173 (breaking change)
- Remove shell scripts from the published package #1744
- Use new interfaces with 64-bit length parameters #1749
- sqlite3_vtab_rhs_value #1753
- Handle VTab IN values #1754
- Give access to Connection from VTabCursor::column #1755
- Bump minimal SQLite version to 3.34.1 #1733, #1731 (breaking change)
- Bump bundled SQLite version to 3.51.1 #1758
- Add support for transaction to the vtab module #1761
- Check Connection is owned when registering Closure as hook #1764 (breaking change)
- Turn libsqlite3-sys in a !#[no_std] crate #1767
- Add
wasm32-unknown-unknownsupport #1769, #488, #827 - Remove useless Send/Sync on Module #1774
Full Changelog: v0.37.0...v0.38.0
-
0.37.006 Jul 2025Release notes
Open source →What's Changed
- Add
FromSqlError::otherconvenience conversion #1703 - Fix warnings #1705
- Update bindgen requirement from 0.71 to 0.72 #1707
- Fix for vtab::parameter parsing #1712
- Fix clippy warning #1713
- Bump bundled SQLite version to 3.50.2 #1714
- Fix issue with prettyplease #1717
Full Changelog: v0.36.0...v0.37.0
- Add
-
0.36.026 May 2025Release notes
Open source →What's Changed
- Introduce Name trait to support both &str and &CStr as name #1659
- Use doc_auto_cfg #1683
- Feature
loadable_extensionis incompatible with some other features #1686 - Add missing wrappers for sqlite3_vtab_nochange and sqlite3_value_nochange #1688
- Update bindings list #1689
- Homogenize code related to hooks #1690
- Try to increase code coverage #1610
- Bump bundled SQLite version to 3.49.2 #1691
- Add bindings to sqlite3_table_column_metadata #1692
- Add bindings to sqlite3_vtab_distinct #1695
- Fix clippy warning #1697
- Add query_one #1699
- Refactor one_column test method #1700
Full Changelog: v0.35.0...v0.36.0
-
0.35.019 Apr 2025Release notes
Open source →What's Changed
- Document 'rusqlite-macros' and 'jiff' features #1663
- access column metadata from prepared statement #1672 / #1666
- add support for Jiff's
Timestamp#1676 - Breaking change: Check that Connection::execute has no tail #1679 / #397
- Breaking change: Check for multiple statements in prepare #1680 / #1147
Full Changelog: v0.34.0...v0.35.0
-
0.34.005 Mar 2025Release notes
Open source →What's Changed
- Find the system library with minimum version 3.14.0 #1628
- Update error type for
ValueRefmethods #1629 - Use decrement_strong_count directly for Array #1633
- Dedup free_boxed_value #1635
- Bump jiff version #1645
- Deserialize impls #1646
- Introduce BindIndex trait #1649
- Use BindIndex in bind_parameters_named #1651
- Improve flexibility of named params #1652
- Use std::ffi instead of std::os::raw #1653
- Bump bundled SQLite version to 3.49.1 #1654
- update LICENSE #1655
Full Changelog: v0.33.0...v0.34.0
-
0.33.019 Jan 2025Release notes
Open source →What's Changed
- Remove lazy_static dependency #1550
- Add support to jiff Date / DateTime / Time #1551
- Correcting inconsistent parameter name (:value/:val) in doctest example #1555
- Repairing description comment of params! macro #1557
- Try to improve test coverage by using --all #1491
impl FromSqlfor various heap-allocated string and blob slices #1558- Document an alternative way to backup #1562
- Use #[expect(lint)] where possible #1563
- chore: update sqlcipher →
4.6.1(SQLite3.46.1) #1566 - Remove leftover sentence beginning #1571
- Improve loadable extension docs #1529
- Fixed pre-release
wasm32-wasip(\d)targets not enabling wasi compile flags inbundledmode. #1569 - MSRV #1576
- Fix Batch impl #1583
- Test invalid batch #1584
- Mark bindgen-bindings files as generated #1585
- Add 'serialize' feature to 'modern-full' #1586
- Change FnMut to Fn in create_scalar_function #1387
- Add safe binding to sqlite3_wal_hook #1594
- Use C string literal for database name #1596
- Make possible to checkpoint a database from
wal_hook#1595 - Add bindings to sqlite3_trace_v2 #1597
- OwningRows / OwningStatement examples #1462
- Use sqlite3_errstr #1606
- Check if specified
argis out-of-range for auxiliary data #1607 - Remove release_memory feature #1608
- Check limit #1609
- Introduce err macro #1611
- Update bindgen requirement from 0.70 to 0.71 #1612
- Bump hashlink version to 0.10 #1616
- Activate generate_cstr bindgen option #1620
- Bump bundled SQLite version to 3.48.0 #1623
Full Changelog: v0.32.1...v0.33.0
-
0.32.126 Jul 2024Nothing published for this version
-
0.32.021 Jul 2024Nothing published for this version
-
0.31.017 Feb 2024Nothing published for this version
-
0.30.012 Nov 2023Nothing published for this version
-
0.29.026 Mar 2023Nothing published for this version
-
0.28.014 Jul 2022Nothing published for this version
-
0.27.027 Feb 2022Nothing published for this version
-
0.26.309 Dec 2021Nothing published for this version
-
0.26.208 Dec 2021Nothing published for this version
-
0.26.119 Oct 2021 withdrawnNothing published for this version
-
0.26.004 Oct 2021 withdrawnNothing published for this version
-
0.25.408 Dec 2021Nothing published for this version
-
0.25.309 May 2021 withdrawnNothing published for this version
-
0.25.209 May 2021 withdrawnNothing published for this version
-
0.25.119 Apr 2021 withdrawnNothing published for this version
-
0.25.003 Apr 2021 withdrawnNothing published for this version
-
0.24.205 Dec 2020Nothing published for this version
-
0.24.107 Oct 2020Nothing published for this version
-
0.24.022 Aug 2020Nothing published for this version
-
0.23.123 Apr 2020Nothing published for this version
-
0.23.023 Apr 2020Nothing published for this version
-
0.22.008 Apr 2020Nothing published for this version
-
0.22.0-beta.006 Apr 2020 pre-releaseNothing published for this version
-
0.21.013 Dec 2019Nothing published for this version
-
0.20.027 Jul 2019Nothing published for this version
-
0.19.026 Jun 2019Nothing published for this version
-
0.18.024 Apr 2019Nothing published for this version
-
0.17.010 Mar 2019Nothing published for this version
-
0.16.016 Dec 2018Nothing published for this version
-
0.15.021 Oct 2018Nothing published for this version
-
0.14.017 Aug 2018Release notes
Open source →- BREAKING CHANGE:
ToSqlimplementation fortime::Timespecuses RFC 3339 (%Y-%m-%dT%H:%M:%S.%fZ). Previous format was %Y-%m-%d %H:%M:%S:%f %Z. - BREAKING CHANGE: Remove potentially conflicting impl of ToSqlOutput (#313).
- BREAKING CHANGE: Replace column index/count type (i32) with usize.
- BREAKING CHANGE: Replace parameter index/count type (i32) with usize.
- BREAKING CHANGE: Replace row changes/count type (i32) with usize.
- BREAKING CHANGE: Scalar functions must be
Sendable and'static. - Bugfix: Commit failure unhandled, database left in unusable state (#366).
- Bugfix:
free_boxed_hookdoes not work forfn. - Update the bundled SQLite version to 3.24.0 (#326).
- Add DropBehavior::Panic to enforce intentional commit or rollback.
- Implement
sqlite3_update_hook(#260, #328),sqlite3_commit_hookandsqlite3_rollback_hook. - Add support to unlock notification behind
unlock_notifyfeature (#294, #331). - Make
Statement::column_indexcase-insensitive (#330). - Add comment to justify
&mut ConnectioninTransaction. - Fix
tyvar_behind_raw_pointerwarnings. - Fix handful of clippy warnings.
- Fix
Connection::opendocumentation (#332) - Add binding to
sqlite3_get_autocommitandsqlite3_stmt_busy. - Add binding to
sqlite3_busy_timeoutandsqlite3_busy_handler. - Add binding to
sqlite3_expanded_sql. - Use
rerun-if-env-changedin libsqlite3-sys (#329). - Return an
InvalidQueryerror when SQL is not read only.
- BREAKING CHANGE:
-
0.13.013 Nov 2017Release notes
Open source →- Added ToSqlConversionFailure case to Error enum.
- Now depends on chrono 0.4, bitflags 1.0, and (optionally) cc 1.0 / bindgen 0.31.
- The ToSql/FromSql implementations for time::Timespec now include and expect fractional seconds and timezone in the serialized string.
- The RowIndex type used in Row::get is now publicly exported.
- New
sqlcipherfeature allows linking against SQLCipher instead of SQLite. - Doc link in README now point to docs.rs.
-
0.12.029 May 2017Release notes
Open source →- Defines HAVE_USLEEP when building with a bundled SQLite (#263).
- Updates dependencies to their latest versions, particularly serde to 1.0.
- Adds support for vcpkg on Windows.
- Adds
ToSqlimpls forstrand[u8].
-
0.11.006 Apr 2017Release notes
Open source →- Avoid publicly exporting SQLite constants multiple times from libsqlite3-sys.
- Adds
FromSqlandToSqlimpls forisize. Documents whyusizeandu64are not included.
-
0.10.306 Apr 2017 withdrawnNothing published for this version
-
0.10.205 Apr 2017 withdrawnNothing published for this version
-
0.10.103 Mar 2017Release notes
Open source →- Updates the
bundledSQLite version to 3.17.0. - Changes the build process to no longer require
bindgen. This should improve build times and no longer require a new-ish Clang. See the README for more details.
- Updates the
-
0.10.028 Feb 2017Release notes
Open source →- Re-export the
ErrorCodeenum fromlibsqlite3-sys. - Adds
version()andversion_number()functions for querying the version of SQLite in use. - Adds the
limitsfeature, exposinglimit()andset_limit()methods onConnection. - Updates to
libsqlite3-sys0.7.0, which runs rust-bindgen at build-time instead of assuming the presence of all expected SQLite constants and functions. - Clarifies supported SQLite versions. Running with SQLite older than 3.6.8 now panics, and some features will not compile unless a sufficiently-recent SQLite version is used. See the README for requirements of particular features.
- When running with SQLite 3.6.x, rusqlite attempts to perform SQLite initialization. If it fails,
rusqlite will panic since it cannot ensure the threading mode for SQLite. This check can be
skipped by calling the unsafe function
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 now performs a one-time check (prior to the first connection attempt) that the runtime
SQLite version is at least as new as the SQLite version found at buildtime. This check can be
skipped by calling the unsafe function
rusqlite::bypass_sqlite_version_check(). - Removes the
libcdependency in favor of usingstd::os::raw
- Re-export the
-
0.9.527 Jan 2017 -
0.9.426 Jan 2017 -
0.9.324 Jan 2017 -
0.9.223 Jan 2017Release notes
Open source →- Bugfix: The
FromSqlimpl fori32now returns an error instead of truncating if the underlying SQLite value is out ofi32's range. - Added
FromSqlandToSqlimpls fori8,i16,u8,u16, andu32.i32andi64already had impls.u64is omitted because their range cannot be represented byi64, which is the type we use to communicate with SQLite.
- Bugfix: The
-
0.9.120 Jan 2017Release notes
Open source →- BREAKING CHANGE:
Connection::close()now returns aResult<(), (Connection, Error)>instead of aResult<(), Error>so callers get the still-open connection back on failure.
- BREAKING CHANGE:
-
0.9.020 Jan 2017 withdrawnNothing published for this version
-
0.8.102 Mar 2017Nothing published for this version
-
0.8.031 Dec 2016Release notes
Open source →- BREAKING CHANGE: The
FromSqltrait has been redesigned. It now requires a single, safe method instead of the previous definition which required implementing one or two unsafe methods. - BREAKING CHANGE: The
ToSqltrait has been redesigned. It can now be implemented withoutunsafe, and implementors can choose to return either borrowed or owned results. - BREAKING CHANGE: The closure passed to
query_row,query_row_and_then,query_row_safe, andquery_row_namednow expects a&Rowinstead of aRow. The vast majority of calls to these functions will probably not need to change; see https://github.com/jgallagher/rusqlite/pull/184. - BREAKING CHANGE: A few cases of the
Errorenum have sprouted additional information (e.g.,FromSqlConversionFailurenow also includes the column index and the type returned by SQLite). - Added
#[deprecated(since = "...", note = "...")]flags (new in Rust 1.9 for libraries) to all deprecated APIs. - Added
query_rowconvenience function toStatement. - Added
bundledfeature which will build SQLite from source instead of attempting to link against a SQLite that already exists on the system. - Fixed a bug where using cached prepared statements resulted in attempting to close a connection
failing with
DatabaseBusy; see https://github.com/jgallagher/rusqlite/issues/186.
- BREAKING CHANGE: The
-
0.7.402 Mar 2017Nothing published for this version
-
0.7.302 Jun 2016Release notes
Open source →- Fixes an incorrect failure from the
insert()convenience function when back-to-back inserts to different tables both returned the same row ID (#171).
- Fixes an incorrect failure from the
-
0.7.220 May 2016Release notes
Open source →- BREAKING CHANGE:
Rowsno longer implementsIterator. It still has anext()method, but the lifetime of the returnedRowis now tied to the lifetime of the vendingRowsobject. 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 ofquery_mapandquery_and_thenover rawquery; both of those still return handles that implementIterator. - BREAKING CHANGE:
Transaction::savepoint()now returns aSavepointinstead of anotherTransaction. UnlikeTransaction,Savepoints can be rolled back while keeping the current savepoint active. - BREAKING CHANGE: Creating transactions from a
Connectionor savepoints from aTransactionnow take&mut selfinstead of&selfto correctly represent that transactions within a connection are inherently nested. While a transaction is alive, the parent connection or transaction is unusable, soTransactionnow implementsDeref<Target=Connection>, giving access toConnection's methods via theTransactionitself. - BREAKING CHANGE:
Transaction::set_commitandTransaction::set_rollbackhave been replaced byTransaction::set_drop_behavior. - Adds
Connection::prepare_cached.Connectionnow keeps an internal cache of any statements prepared via this method. The size of this cache defaults to 16 (prepare_cachedwill always work but may re-prepare statements if more are prepared than the cache holds), and can be controlled viaConnection::set_prepared_statement_cache_capacity. - Adds
query_map_namedandquery_and_then_namedtoStatement. - Adds
insertconvenience method toStatementwhich returns the row ID of an inserted row. - Adds
existsconvenience method returning whether a query finds one or more rows. - Adds support for serializing types from the
serde_jsoncrate. Requires theserde_jsonfeature. - Adds support for serializing types from the
chronocrate. Requires thechronofeature. - Removes
load_extensionfeature fromlibsqlite3-sys.load_extensionis still available on rusqlite itself. - Fixes crash on nightly Rust when using the
tracefeature. - Adds optional
clippyfeature and addresses issues it found. - Adds
column_count()method toStatementandRow. - Adds
types::Valuefor dynamic column types. - Adds support for user-defined aggregate functions (behind the existing
functionsCargo feature). - Introduces a
RowIndextrait allowing columns to be fetched via index (as before) or name (new). - Introduces
ZeroBlobtype under theblobmodule/feature exposing SQLite's zeroblob API. - Adds CI testing for Windows via AppVeyor.
- Fixes a warning building libsqlite3-sys under Rust 1.6.
- Adds an unsafe
handle()method toConnection. Please file an issue if you actually use it.
- BREAKING CHANGE:
-
0.7.120 May 2016 withdrawnNothing published for this version