NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2746 most downloaded on crates.io
Official Rust client for ClickHouse DB
Last release 1 months ago
28 Aug 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 46 of 46 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
46 releases · first in 2017
release 0.15.2
release 0.15.2 (#465)
BFloat16 (#417)serde::uuid_vec for serializing/deserializing Vec<uuid::Uuid> to/from Array(UUID) (#424)Debug for Client (#430)FORMAT Native (#441)
Query::fetch_native() returning NativeCursor which yields Blocks.Block holds data in columnar format and can be indexed by column name or by ordinal.Column::iter() returns an iterator that decodes the column data.Nullable, Array, Tuple, Map and LowCardinality are supported
and can be decoded into their appropriate Rust types.&str, borrowing from the parent Block, is supported.FORMAT Native (#451)
Client::insert_native() for inserting BlocksBlockBuilder API for filling out and validating BlocksClient::with_url() now recognizes the database query parameter of the URL. (#456)
Client::database() to read back the configured default database.Client::query_raw(), which sends the SQL to the server verbatim, without parsing
client-side bind parameters. (#461)
? is not treated as a placeholder; ?? is not unescaped; ?fields is not substituted.Query::param() still work.Decimal(P, S) types where S = 0 (#449)rowbinary module to accept a tenth byte (#457)polonius-the-crab dependency with equivalent code (release PR #465)One column per quarter.
Release clickhouse 0.15.1 / clickhouse-ext-arrow 0.1.0
Release clickhouse 0.15.1 / clickhouse-ext-arrow 0.1.0 (#438)
clickhouse-ext-arrow. (#423)
BytesCursor::poll_next() (#423)Release 0.15.0
Release 0.15.0 (#415)
::*_option() methods in favor of ::*_setting() (#380)
zstd compression (#388)tracing and OpenTelemetry trace propagation to ClickHouse (#390)
X-ClickHouse-Summary fields from server response (#397)
RowCursor::summary() and BytesCursor::summary() which is populated
once the response from the server is received, containing potentially useful statistics about the query.fxhash and linked-hash-map dev-dependencies (#403)feat: release 0.14.3
feat: release 0.14.3 (#402)
SimpleAggregateFunction type (#394)Option::None with Query::param() (#385)Json type with type hints (#387)Insert for temporary tables and qualified table names (#391)lz4_flex to get fix for RUSTSEC-2026-0041 (#396)Release 0.14.2
Release 0.14.2 (#378)
Client::insert_formatted_with() and InsertFormatted for inserting data in a chosen format with a specified SQL query. (#364)
InsertFormatted does not buffer data by default, allowing precise control over when the data is sent. For best performance, ensure data is sent in larger chunks or use .buffered() to get BufInsertFormatted which implements buffering.CompressedData::new() and InsertFormatted::send_compressed().BufInsertFormatted also implements tokio::io::AsyncWrite for composability.Client::set_option to modify options through &mut Client (#375)Client::get_option to read previously set options (#375)Query::param that call Serializer::serialize_bytes() are now supported.Vec<u8> and &[u8] serialize as an array of integers.
Use a specialized type, e.g. bytes::Bytes or serde_bytes::Bytes to bind a byte-string.Primitive for bytes::Bytes and bytes::BytesMut (#376)
Query::fetch_one().clickhouse::serde::chrono::date (#371)clickhouse-server:head tag, reworked secrets access (#367)Query no longer sets the readonly option by default. (#377)
GET requests, but had poor interaction with settings profiles that set readonly="2".chore: Release clickhouse version 0.14.1
chore: Release clickhouse version 0.14.1
Stream for RowCursor. (#283, #340)on_commit callback to Inserter. (#307)with_role and with_default_roles methods to Client, Query, Insert, and Inserter, allowing to
explicitly set the roles for executed queries. (#326)Int256 and UInt256 ClickHouse types support. The client now provides two new convenience wrappers over
[u8; 32]: clickhouse::types::Int256 and clickhouse::types::UInt256. See the updated derive example. (#352)u128/i128 values to SQL queries using server-side params, the client now correctly serializes them as
strings without adding an unnecessary cast. (#322)JSON types such as
JSON(max_dynamic_paths=64, max_dynamic_types=8). (#350, Steffen911)RowCursor by reusing buffer capacity where possible. (#340)Query::fetch* methods will always use POST instead of GET. It is now allowed to change readonly value via
Query::with_option. (#342)clickhouse::error::Error::SchemaMismatch instead of panicking.
(#346)chore: Release clickhouse version 0.14.0
chore: Release clickhouse version 0.14.0
Client::watch() API is removed (#245).watch() and watch_only_events() are removed (#245).Insert<_> should now be specified when calling client.insert::<_>(). (#247)Client::insert() is now async. (#244)Inserter::write() is now async. (#244)Inserter::new() return just Self instead of Result<Self>. (#244)RowBinaryWithNamesAndTypes is now used by default for query results. This may cause panics if
the row struct definition does not match the database schema. Use Client::with_validation(false) to revert to the
previous behavior which uses plain RowBinary format for fetching rows. (#221, #244)test-util feature, it is now required to use Client::with_mock(&mock) to set up the
mock server, so it properly handles the response format and automatically disables parsing
RowBinaryWithNamesAndTypes header parsing and validation. Additionally, it is not required to call with_url
explicitly. See the updated example.Query::fetch_bytes() now expects impl AsRef<str> for format instead of Into<String>.
Most usages should not be affected, however, unless passing a custom type that implements the latter but not the former.
(#311)RowBinaryWithNamesAndTypes format usage, there might be an impact on fetch performance, which largely
depends on how the dataset is defined. If you notice decreased performance, consider disabling validation by using
Client::with_validation(false).HashMap<K, V> (or BTreeMap, IndexMap,
DashMap, etc.).clickhouse-derive is now published as clickhouse-macros on crates.io. The former clickhouse-derive crate is discontinued. (#318).Time and Time64 types (#258).Client::with_validation builder method. Validation is enabled by default, meaning that
RowBinaryWithNamesAndTypes format will be used to fetch rows from the database. If validation is disabled,
RowBinary format will be used, similarly to the previous versions. (#221).clickhouse-types was added to the project workspace. This crate is required for
RowBinaryWithNamesAndTypes struct definition validation, as it contains ClickHouse data types AST, as well as
functions and utilities to parse the types out of the ClickHouse server response. (#221).serde_bytes::Bytes as hex string literals in query parameters (#250).#[clickhouse(crate = "...")] attribute for #[derive(Row)] (#189, #292)X-ClickHouse-Exception-Code in case of incorrect 200 OK response
that could occur with ClickHouse server up to versions 24.x (#256).?default_format URL parameter instead of using FORMAT clause, allowing queries to have
trailing comments and/or semicolons (#267, #269, #311).chore: Release clickhouse version 0.13.3
chore: Release clickhouse version 0.13.3
Client::with_access_token to support JWT authentication ClickHouse Cloud feature (#215).Copy and Clone derive (#224).chore: Release clickhouse version 0.13.2
chore: Release clickhouse version 0.13.2
Query::with_param to support server-side parameters binding (#159)Query::fetch_bytes that allows streaming data in an arbitrary format (#182)bstr and hyper-rustls dependencies (#180).NotEnoughData if a row is unparsed when the stream ends (#185).chore: Release clickhouse version 0.13.1
chore: Release clickhouse version 0.13.1
RowCursor::{decoded_bytes,received_bytes} methods (#169).RowCursor::next() (#169).tokio::time::advance() (#165).query: add Query::sql_display() ([#155]).
Query::sql_display() (#155).Client::with_product_info() (#135).User-Agent header to all requests (#135).?? for escaping the ? symbol in SQL (#154).compression: Compression::Lz4Hc is deprecated and becomes an alias to Compression::Lz4.
lz4 sys binding with lz4-flex (pure Rust).clickhouse-rs-cityhash-sys sys binding with cityhash-rs (pure Rust) (#107).Compression::Lz4Hc is deprecated and becomes an alias to Compression::Lz4.query/bind: support Option in query.bind(arg) ([#119], [#120]).
Option in query.bind(arg) (#119, #120).Client::with_header() to provide custom headers (#98, #108).Query::with_option() similar to Client::with_option() (#123).Insert::with_option() similar to Client::with_option() (#123).Inserter::with_option() similar to Client::with_option() (#123).Insert::write call instead of Insert::new (#123).BREAKING remove deprecated items.
serde::skip_deserializing (#83).Inserter::with_max_bytes().Inserter::pending() to get stats about still being inserted data.Inserter::force_commit() to commit and insert immediately.Default instance for Mock.tls feature with native-tls and rustls-tls that must be enabled explicitly now.HttpClient API is changed due to moving to hyper v1.inserter feature.Inserter::write is synchronous now.entries to rows.wa-37420 feature.provide(), watch() and watch_only_events() now accept iterators instead of streams.quanta.Query::bind() calls (#103).client: accept HTTPs urls if tls feature is enabled ([#58]).
tls feature is enabled (#58).inserter: start new insert only when the first row is provided ([#68], [#70]).
query: Query::fetch_optional().
Query::fetch_optional().query: improve throughput (~8%).
insert: with_timeouts to manage timeouts.
with_timeouts to manage timeouts.with_timeouts and set_timeouts to manage timeouts.max_entries to 500_000.ipv4: serde::ipv4 for ser/de the IPv4 type to/from Ipv4Addr. Note that IPv6 requires no annotations.
serde::ipv4 for ser/de the IPv4 type to/from Ipv4Addr. Note that IPv6 requires no annotations.serde::time::datetime(64) for ser/de the time::OffsetDateTime type to/from DateTime and DateTime64.serde::time::date(32) for ser/de the time::Date type to/from Date and Date32.::option variants to support Option<_>.serde submodule.compression: implement Lz4/Lz4Hc compression modes for INSERTs ([#39]).
INSERTs (#39).wa-37420 feature to avoid ClickHouse#37420.Inserter::time_left().uuid feature and a corresponding module to ser/de uuid::Uuid (#26).INSERT is too long (#20).client: Client::with_http_client to use custom hyper::Client, e.g. for https ([#27]).
Implement Primitive for f64 and f32 ([#29]).
HTTP Keep-alive timeout is restricted to 2s explicitly.
mock: add record_ddl handler to test DDL queries.
record_ddl handler to test DDL queries.watch and watch_only_events handlers to test WATCH queries.query: support borrowed long strings ([#22]).
watch feature.Error::InvalidParams.JSONEachRowWithProgress because of ClickHouse#22996 (#23).Support ? inside bound arguments ([#18]).
RowBinarySerializer::is_human_readable() returns false.
RowBinarySerializer::is_human_readable() returns false.Watch::refresh() to specify REFRESH clause.
Watch::refresh() to specify REFRESH clause.derive(Row): handle raw identifiers.Get rid of "socket is not connected" errors.
Replace reflection::Reflection with clickhouse::Row. It's enough to implement Row for top-level structs only.
reflection::Reflection with clickhouse::Row. It's enough to implement Row for top-level structs only.#[derive(Row)]docs: enable the doc_cfg feature.
doc_cfg feature.docs: show features on docs.rs.
test-util implies hyper/server.test module (available with the test-util feature).
test module (available with the test-util feature).#[must_use] for Query, Watch, Insert and Inserter.&String values binding to SQL queries.
&String values binding to SQL queries.Depend explicitly on tokio/macros.
tokio/macros.Deprecate Compression::encoding().
watch: bind fileds of the type param.
compression: decompress error messages ([#7]).
Use tokio v1, hyper v0.14, bytes v1.
### Added - decompression: lz4.
decompression: gzip, zlib and brotli.
Query::fetch_one(), Watch::fetch_one().
Query::fetch_one(), Watch::fetch_one().Query::fetch() as a replacement for Query::rows().Watch::fetch() as a replacement for Watch::rows().Watch::only_events().fetch() as a replacement for Watch::events().Error is StdError + Send + Sync + 'static now.Expose cursors (query::RowCursor, watch::{RowCursor, EventCursor}).
query::RowCursor, watch::{RowCursor, EventCursor}).Client::inserter() for infinite inserting into tables.
Client::inserter() for infinite inserting into tables.Client::watch() for LIVE VIEW related queries.Query::fetch() to Query::rows().GET requests for SELECT statements.Client::insert() for inserting into tables.
Client::insert() for inserting into tables.Client::query() for selecting from tables and DDL statements.<!-- next-url --> [Unreleased]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.15.2...HEAD [0.15.2]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.15.1...v0.15.2 [0.15.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.15.0...v0.15.1 [0.15.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.14.3...v0.15.0 [0.14.3]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.14.2...v0.14.3 [0.14.2]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.14.1...v0.14.2 [0.14.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.14.0...v0.14.1 [0.14.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.13.3...v0.14.0 [0.13.3]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.13.2...v0.13.3 [0.13.2]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.13.1...v0.13.2 [0.13.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.13.0...v0.13.1 [0.13.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.12.2...v0.13.0 [0.12.2]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.12.1...v0.12.2 [0.12.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.12.0...v0.12.1 [0.12.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.11.6...v0.12.0 [0.11.6]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.11.5...v0.11.6 [0.11.5]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.11.4...v0.11.5 [0.11.4]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.11.3...v0.11.4 [0.11.3]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.11.2...v0.11.3 [0.11.2]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.11.1...v0.11.2 [0.11.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.11.0...v0.11.1 [0.11.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.10.0...v0.11.0 [0.10.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.9.3...v0.10.0 [0.9.3]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.9.2...v0.9.3 [0.9.2]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.9.1...v0.9.2 [0.9.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.9.0...v0.9.1 [0.9.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.8.1...v0.9.0 [0.8.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.8.0...v0.8.1 [0.8.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.7.2...v0.8.0 [0.7.2]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.7.1...v0.7.2 [0.7.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.7.0...v0.7.1 [0.7.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.8...v0.7.0 [0.6.8]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.7...v0.6.8 [0.6.7]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.6...v0.6.7 [0.6.6]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.5...v0.6.6 [0.6.5]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.4...v0.6.5 [0.6.4]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.3...v0.6.4 [0.6.3]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.2...v0.6.3 [0.6.2]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.1...v0.6.2 [0.6.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.6.0...v0.6.1 [0.6.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.5.1...v0.6.0 [0.5.1]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.5.0...v0.5.1 [0.5.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.4.0...v0.5.0 [0.4.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/ClickHouse/clickhouse-rs/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/ClickHouse/clickhouse-rs/releases/tag/v0.1.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →