PackageTrack
Sign in Get early access

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 2026
2015 2017 2019 2021 2023 2025
Release Pre-release Withdrawn

Releases

latest 60 of 85
  1. 0.40.2 08 Aug 2026
    Release notes

    What's Changed

    • Lower MSRV to 1.88.0

    Full Changelog: v0.40.1...v0.40.2

    Open source →
  2. 0.40.1 06 Jun 2026
    Release notes

    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

    Open source →
  3. 0.40.0 26 May 2026
    Release notes

    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

    Open source →
  4. 0.39.0 15 Mar 2026
    Release notes

    What's Changed

    • Fix constraints on VTab Aux data #1778, #1771
    • Fix docs.rs generation #1779
    • Fix a small typo in rollback_hook docstring #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

    Open source →
  5. 0.38.0 20 Dec 2025
    Release notes

    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-unknown support #1769, #488, #827
    • Remove useless Send/Sync on Module #1774

    Full Changelog: v0.37.0...v0.38.0

    Open source →
  6. 0.37.0 06 Jul 2025
    Release notes

    What's Changed

    • Add FromSqlError::other convenience 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

    Open source →
  7. 0.36.0 26 May 2025
    Release notes

    What's Changed

    • Introduce Name trait to support both &str and &CStr as name #1659
    • Use doc_auto_cfg #1683
    • Feature loadable_extension is 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

    Open source →
  8. 0.35.0 19 Apr 2025
    Release notes

    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

    Open source →
  9. 0.34.0 05 Mar 2025
    Release notes

    What's Changed

    • Find the system library with minimum version 3.14.0 #1628
    • Update error type for ValueRef methods #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

    Open source →
  10. 0.33.0 19 Jan 2025
    Release notes

    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 FromSql for 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 (SQLite 3.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 in bundled mode. #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 arg is 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

    Open source →
  11. 0.32.1 26 Jul 2024

    Nothing published for this version

  12. 0.32.0 21 Jul 2024

    Nothing published for this version

  13. 0.31.0 17 Feb 2024

    Nothing published for this version

  14. 0.30.0 12 Nov 2023

    Nothing published for this version

  15. 0.29.0 26 Mar 2023

    Nothing published for this version

  16. 0.28.0 14 Jul 2022

    Nothing published for this version

  17. 0.27.0 27 Feb 2022

    Nothing published for this version

  18. 0.26.3 09 Dec 2021

    Nothing published for this version

  19. 0.26.2 08 Dec 2021

    Nothing published for this version

  20. 0.26.1 19 Oct 2021 withdrawn

    Nothing published for this version

  21. 0.26.0 04 Oct 2021 withdrawn

    Nothing published for this version

  22. 0.25.4 08 Dec 2021

    Nothing published for this version

  23. 0.25.3 09 May 2021 withdrawn

    Nothing published for this version

  24. 0.25.2 09 May 2021 withdrawn

    Nothing published for this version

  25. 0.25.1 19 Apr 2021 withdrawn

    Nothing published for this version

  26. 0.25.0 03 Apr 2021 withdrawn

    Nothing published for this version

  27. 0.24.2 05 Dec 2020

    Nothing published for this version

  28. 0.24.1 07 Oct 2020

    Nothing published for this version

  29. 0.24.0 22 Aug 2020

    Nothing published for this version

  30. 0.23.1 23 Apr 2020

    Nothing published for this version

  31. 0.23.0 23 Apr 2020

    Nothing published for this version

  32. 0.22.0 08 Apr 2020

    Nothing published for this version

  33. 0.22.0-beta.0 06 Apr 2020 pre-release

    Nothing published for this version

  34. 0.21.0 13 Dec 2019

    Nothing published for this version

  35. 0.20.0 27 Jul 2019

    Nothing published for this version

  36. 0.19.0 26 Jun 2019

    Nothing published for this version

  37. 0.18.0 24 Apr 2019

    Nothing published for this version

  38. 0.17.0 10 Mar 2019

    Nothing published for this version

  39. 0.16.0 16 Dec 2018

    Nothing published for this version

  40. 0.15.0 21 Oct 2018

    Nothing published for this version

  41. 0.14.0 17 Aug 2018
    Release notes
    • 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.
    • 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_hook does not work for fn.
    • 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_hook and sqlite3_rollback_hook.
    • Add support to unlock notification behind unlock_notify feature (#294, #331).
    • Make Statement::column_index case-insensitive (#330).
    • Add comment to justify &mut Connection in Transaction.
    • Fix tyvar_behind_raw_pointer warnings.
    • Fix handful of clippy warnings.
    • Fix Connection::open documentation (#332)
    • Add binding to sqlite3_get_autocommit and sqlite3_stmt_busy.
    • Add binding to sqlite3_busy_timeout and sqlite3_busy_handler.
    • Add binding to sqlite3_expanded_sql.
    • Use rerun-if-env-changed in libsqlite3-sys (#329).
    • Return an InvalidQuery error when SQL is not read only.
    Open source →
  42. 0.13.0 13 Nov 2017
    Release notes
    • 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 sqlcipher feature allows linking against SQLCipher instead of SQLite.
    • Doc link in README now point to docs.rs.
    Open source →
  43. 0.12.0 29 May 2017
    Release notes
    • 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 ToSql impls for str and [u8].
    Open source →
  44. 0.11.0 06 Apr 2017
    Release notes
    • Avoid publicly exporting SQLite constants multiple times from libsqlite3-sys.
    • Adds FromSql and ToSql impls for isize. Documents why usize and u64 are not included.
    Open source →
  45. 0.10.3 06 Apr 2017 withdrawn

    Nothing published for this version

  46. 0.10.2 05 Apr 2017 withdrawn

    Nothing published for this version

  47. 0.10.1 03 Mar 2017
    Release notes
    • Updates the bundled SQLite 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.
    Open source →
  48. 0.10.0 28 Feb 2017
    Release notes
    • Re-export the ErrorCode enum from libsqlite3-sys.
    • Adds version() and version_number() functions for querying the version of SQLite in use.
    • Adds the limits feature, exposing limit() and set_limit() methods on Connection.
    • Updates to libsqlite3-sys 0.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 libc dependency in favor of using std::os::raw
    Open source →
  49. 0.9.5 27 Jan 2017
    Release notes
    • Add impls of Clone, Debug, and PartialEq to ToSqlOutput.
    Open source →
  50. 0.9.4 26 Jan 2017
    Release notes
    • Update dependencies.
    Open source →
  51. 0.9.3 24 Jan 2017
    Release notes
    • Make ToSqlOutput itself implement ToSql.
    Open source →
  52. 0.9.2 23 Jan 2017
    Release notes
    • Bugfix: The FromSql impl for i32 now returns an error instead of truncating if the underlying SQLite value is out of i32's range.
    • Added FromSql and ToSql impls for i8, i16, u8, u16, and u32. i32 and i64 already had impls. u64 is omitted because their range cannot be represented by i64, which is the type we use to communicate with SQLite.
    Open source →
  53. 0.9.1 20 Jan 2017
    Release notes
    • BREAKING CHANGE: Connection::close() now returns a Result<(), (Connection, Error)> instead of a Result<(), Error> so callers get the still-open connection back on failure.
    Open source →
  54. 0.9.0 20 Jan 2017 withdrawn

    Nothing published for this version

  55. 0.8.1 02 Mar 2017

    Nothing published for this version

  56. 0.8.0 31 Dec 2016
    Release notes
    • BREAKING CHANGE: The 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.
    • BREAKING CHANGE: The ToSql trait has been redesigned. It can now be implemented without unsafe, 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, 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.
    • BREAKING CHANGE: A few cases of the Error enum have sprouted additional information (e.g., FromSqlConversionFailure now 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_row convenience function to Statement.
    • Added bundled feature 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.
    Open source →
  57. 0.7.4 02 Mar 2017

    Nothing published for this version

  58. 0.7.3 02 Jun 2016
    Release notes
    • Fixes an incorrect failure from the insert() convenience function when back-to-back inserts to different tables both returned the same row ID (#171).
    Open source →
  59. 0.7.2 20 May 2016
    Release notes
    • 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 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.
    • BREAKING CHANGE: Transaction::savepoint() now returns a Savepoint instead of another Transaction. Unlike Transaction, Savepoints can be rolled back while keeping the current savepoint active.
    • BREAKING CHANGE: Creating transactions from a 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.
    • BREAKING CHANGE: Transaction::set_commit and Transaction::set_rollback have been replaced by Transaction::set_drop_behavior.
    • Adds 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.
    • Adds query_map_named and query_and_then_named to Statement.
    • Adds insert convenience method to Statement which returns the row ID of an inserted row.
    • Adds exists convenience method returning whether a query finds one or more rows.
    • Adds support for serializing types from the serde_json crate. Requires the serde_json feature.
    • Adds support for serializing types from the chrono crate. Requires the chrono feature.
    • Removes load_extension feature from libsqlite3-sys. load_extension is still available on rusqlite itself.
    • Fixes crash on nightly Rust when using the trace feature.
    • Adds optional clippy feature and addresses issues it found.
    • Adds column_count() method to Statement and Row.
    • Adds types::Value for dynamic column types.
    • Adds support for user-defined aggregate functions (behind the existing functions Cargo feature).
    • Introduces a RowIndex trait allowing columns to be fetched via index (as before) or name (new).
    • Introduces ZeroBlob type under the blob module/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 to Connection. Please file an issue if you actually use it.
    Open source →
  60. 0.7.1 20 May 2016 withdrawn

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive