PackageTrack
Sign in Get early access

libsqlite3-sys

Native bindings to the libsqlite3 library

0.38.2 212M downloads/mo #481 most downloaded on crates.io rusqlite/rusqlite

What this package is like to depend on

Last release 15 days ago

08 Aug 2026

Release timing varies

gaps range from 2 weeks to 6 months

Some releases are documented

notes for 26 of 64 stable releases

1 version withdrawn

withdrawn after publishing

11 years old

65 releases · first in 2015

5 releases in the last 12 months

see the full history below

Release timeline

65 releases · Feb 2015 to Aug 2026
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 65
  1. 0.38.2 08 Aug 2026

    Nothing published for this version

  2. 0.38.1 06 Jun 2026

    Nothing published for this version

  3. 0.38.0 26 May 2026
    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 →
  4. 0.37.0 15 Mar 2026
    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 →
  5. 0.36.0 20 Dec 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 →
  6. 0.35.0 06 Jul 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 →
  7. 0.34.0 26 May 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 →
  8. 0.33.0 19 Apr 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 →
  9. 0.32.0 05 Mar 2025

    Nothing published for this version

  10. 0.31.0 19 Jan 2025

    Nothing published for this version

  11. 0.30.1 26 Jul 2024

    Nothing published for this version

  12. 0.30.0 21 Jul 2024

    Nothing published for this version

  13. 0.29.0 22 Jun 2024

    Nothing published for this version

  14. 0.28.0 27 Jan 2024

    Nothing published for this version

  15. 0.27.0 12 Nov 2023

    Nothing published for this version

  16. 0.26.0 26 Mar 2023

    Nothing published for this version

  17. 0.25.2 27 Oct 2022

    Nothing published for this version

  18. 0.25.1 22 Jul 2022

    Nothing published for this version

  19. 0.25.0 14 Jul 2022

    Nothing published for this version

  20. 0.24.2 30 Mar 2022

    Nothing published for this version

  21. 0.24.1 05 Mar 2022

    Nothing published for this version

  22. 0.24.0 27 Feb 2022

    Nothing published for this version

  23. 0.23.2 08 Dec 2021

    Nothing published for this version

  24. 0.23.1 07 Oct 2021

    Nothing published for this version

  25. 0.23.0 04 Oct 2021

    Nothing published for this version

  26. 0.22.2 09 May 2021

    Nothing published for this version

  27. 0.22.1 19 Apr 2021

    Nothing published for this version

  28. 0.22.0 03 Apr 2021

    Nothing published for this version

  29. 0.20.1 07 Oct 2020

    Nothing published for this version

  30. 0.20.0 22 Aug 2020

    Nothing published for this version

  31. 0.18.0 23 Apr 2020

    Nothing published for this version

  32. 0.17.3 08 Apr 2020

    Nothing published for this version

  33. 0.17.2 06 Apr 2020

    Nothing published for this version

  34. 0.17.1 09 Jan 2020

    Nothing published for this version

  35. 0.17.0 13 Dec 2019

    Nothing published for this version

  36. 0.16.0 27 Jul 2019

    Nothing published for this version

  37. 0.15.0 26 Jun 2019

    Nothing published for this version

  38. 0.14.0 24 Apr 2019
    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 →
  39. 0.13.0 10 Mar 2019
    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 →
  40. 0.12.0 06 Jan 2019
    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 →
  41. 0.11.1 06 Jan 2019

    Nothing published for this version

  42. 0.11.0 16 Dec 2018
    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 →
  43. 0.10.0 21 Oct 2018
    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 →
  44. 0.9.4 04 Jan 2022
    Release notes
    • Update dependencies.
    Open source →
  45. 0.9.3 17 Aug 2018
    Release notes
    • Make ToSqlOutput itself implement ToSql.
    Open source →
  46. 0.9.1 05 Dec 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 →
  47. 0.9.0 13 Nov 2017

    Nothing published for this version

  48. 0.8.1 29 May 2017

    Nothing published for this version

  49. 0.8.0 06 Apr 2017
    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 →
  50. 0.7.2 05 Apr 2017 withdrawn
    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 →
  51. 0.7.1 03 Mar 2017

    Nothing published for this version

  52. 0.7.0 28 Feb 2017

    Nothing published for this version

  53. 0.6.2 26 Jan 2017

    Nothing published for this version

  54. 0.6.1 24 Jan 2017

    Nothing published for this version

  55. 0.6.0 31 Dec 2016
    Release notes
    • 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 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.
    • BREAKING CHANGE: When opening a new detection, rusqlite now detects if SQLite was compiled or configured for single-threaded use only; if it was, connection attempts will fail. If this affects you, please open an issue.
    • BREAKING CHANGE: SqliteTransactionDeferred, SqliteTransactionImmediate, and SqliteTransactionExclusive are no longer exported. Instead, use TransactionBehavior::Deferred, TransactionBehavior::Immediate, and TransactionBehavior::Exclusive.
    • Removed Sqlite prefix on many types:
      • SqliteConnection is now Connection
      • SqliteError is now Error
      • SqliteResult is now Result
      • SqliteStatement is now Statement
      • SqliteRows is now Rows
      • SqliteRow is now Row
      • SqliteOpenFlags is now OpenFlags
      • SqliteTransaction is now Transaction.
      • SqliteTransactionBehavior is now TransactionBehavior.
      • SqliteLoadExtensionGuard is now LoadExtensionGuard. The old, prefixed names are still exported but are deprecated.
    • Adds a variety of ..._named methods for executing queries using named placeholder parameters.
    • Adds backup feature that exposes SQLite's online backup API.
    • Adds blob feature that exposes SQLite's Incremental I/O for BLOB API.
    • Adds functions feature that allows user-defined scalar functions to be added to open SqliteConnections.
    Open source →
  56. 0.5.0 20 May 2016
    Release notes
    • Adds trace feature that allows the use of SQLite's logging, tracing, and profiling hooks.
    • Slight change to the closure types passed to query_map and query_and_then:
      • Remove the 'static requirement on the closure's output type.
      • Give the closure a &SqliteRow instead of a SqliteRow.
    • When building, the environment variable SQLITE3_LIB_DIR now takes precedence over pkg-config.
    • If pkg-config is not available, we will try to find libsqlite3 in /usr/lib.
    • Add more documentation for failure modes of functions that return SqliteResults.
    • Updates libc dependency to 0.2, fixing builds on ARM for Rust 1.6 or newer.
    Open source →
  57. 0.4.0 17 Dec 2015
    Release notes
    • Adds Sized bound to FromSql trait as required by RFC 1214.
    Open source →
  58. 0.3.0 09 Dec 2015
    Release notes
    • Removes get_opt. Use get_checked instead.
    • Add 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.
    • Relax uses of P: AsRef<...> from &P to P.
    • Add additional error check for calling execute when query was intended.
    • Improve debug formatting of SqliteStatement and SqliteConnection.
    • Changes documentation of get_checked to correctly indicate that it returns errors (not panics) when given invalid types or column indices.
    Open source →
  59. 0.2.0 26 Jul 2015
    Release notes
    • Add column_names() to SqliteStatement.
    • By default, include SQLITE_OPEN_NO_MUTEX and SQLITE_OPEN_URI flags when opening a new connection.
    • Fix generated bindings (e.g., sqlite3_exec was wrong).
    • Use now-generated sqlite3_destructor_type to define SQLITE_STATIC and SQLITE_TRANSIENT.
    Open source →
  60. 0.1.0 12 May 2015
    Release notes
    • [breaking-change] Modify query_row to return a Result instead of unwrapping.
    • Deprecate query_row_safe (use query_row instead).
    • Add query_map.
    • Add get_checked, which asks SQLite to do some basic type-checking of columns.
    Open source →

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