[RELEASE] ScyllaDB Rust Driver 1.8.0

The ScyllaDB team is pleased to announce ScyllaDB Rust Driver 1.8.0,
an asynchronous CQL driver for Rust, optimized for ScyllaDB, but also compatible with Apache Cassandra!

Some interesting statistics:

  • over 8.1M downloads on crates.io!
  • over 682 GitHub stars!

Changes

New features / enhancements:

  • QueryPager (used by Session::execute_iter and Session::query_iter) was optimized for single-page queries. Now it only starts a tokio::task if there is more than one page (#1739).
  • QueryPager now treats each page as a fully separate request: new execution plan is produced for each page, downgraded consistency is reset. Driver still tries to stick to the same coordinator for subsequent pages: the first element of the plan for the next page will be the coordinator of the previous page (#1739).
  • QueryPager (used by Session::execute_iter and Session::query_iter) now supports Speculative Execution (#1783).
  • Internal metadata fetching procedures were greatly improved, dropping many unnecessary false dependencies between internal driver tasks, which should improve the delay of some of them (#1792, #1823, #1835).
  • Metadata fetching now supports client-side timeouts (#1837).
  • Driver will now temporarily stop using shard-aware port on shard mismatch (indicating NAT usage) (#1804).
  • On STATUS_CHANGE DOWN event a keepalive is now immediately requested on connection to the affected node (#1806).
  • Driver now correctly resolves DNS names to multiple IP addresses, both v4 and v6 (#1805).
  • Client Routes feature now choose an IP randomly for each connection if DNS resolves to multiple IPs (#1805).
  • CqlTimestamp now implements Ord and Hash (#1834).
  • A new crate scylla-ccm-bridge is extracted for reuse in different projects (#1810).
  • Driver can now be configured to fetch only the minimal subset of metadata that doesn’t break token-awareness (#1815).
  • Keyspace struct now has a new tablets field, indicating if the keyspace is vnode- or tablet-based. This info fetched from system tables and used by the driver for more precise routing (#1720).
  • Added new metrics accessors that properly distinguish between unpaged, manually paged and automatically paged requests (#1775).
  • Bugs in our examples are fixed, some examples are restructured. Examples now run in CI to keep them working (#1813).
  • RetrySession is now created lazily when needed, to save an allocation on the hot path (#1833).

Bug fixes:

  • Fixed a deadlock happening when driver was flooded with CQL events during metadata refresh (#1835).
  • Tablet-awareness now correctly works with materialized views (#1778).
  • Out-of-range shard ids in ShardingInfo are now correctly rejected (#1712).
  • Shard set in Coordinator is now set to the real shard from Connection, not the shard requested by LBP (#1765).
  • Fix bug in Metrics::get_latency_percentile_ms that caused it to return completely wrong value (#1749).
  • Scylla with enable_shard_aware_drivers: false is now recognized as Scylla, not Cassandra (#1719).
  • Client Routes: non-sticky routes are now correctly overwritten on updates (#1822).
  • RequestInfo passed to RetrySession now gets current (so potentially downgraded) consistency, instead of the original consistency (#1758, #1770).
  • Fixed trace span not being finalized when RetrySession issues a IgnoreWriteError decision (#1761).

Internal refactors:

  • Internal request execution paths were deduplicated into a common module. Now all variants (unpaged, QueryPager, ControlConnection) use the same logic to handle retries, tracing, speculative execution, query history, and other mechanism (#1774, #1783, #1786, #1789, #1830, #1751).
  • Reduced cfg sprawl from metrics feature across the codebase (#1750).
  • Return client routes in Metadata instead of applying them in ControlConnection (#1820).
  • Fixed issues pointed out by Clippy after its 1.97 release (#1779).
  • Removed unused dependencies from scylla-proxy (#1744).
  • CqlTimeuuid::lsb_signed is now properly documented. Timeuuid ordering test is hardened (#1766).
  • Various small fixes related to unification of execution paths (#1770).

Documentation:

  • Updated dependencies of documentation (#1724).
  • Bumped sphinx-scylladb-theme from 1.9.2 to 1.9.3 (#1791).

CI / tests / developer tool improvements:

  • Added Valgrind-based benchmarks, running in CI to catch regressions (#1780).
  • Renovate was configured to keep our dependencies up to date (#1753, #1812, #1746, #1740).
  • Updated Scylla version used in tests to v2026.2.3 (#1826).
  • Speed up vector type integration test by running subtests concurrently (#1759).
  • Speed up vector type integration test by using a single table for all subtests (#1760).
  • Unified handling of Scylla versions between tests categories (#1821).
  • Vastly expanded and improved our Tablets tests (#1777).
  • Cleanly handle startup failures in Client Routes test utils (#1795).
  • Connection: changed #[expect(deprecated)] to #[allow(deprecated)] on set_linger because older Tokio verions don’t mark is as deprecated (#1787).
  • Remove misleading comment in test (#1808).

Dependencies:

Others:

  • Added public methods required for python-rs driver (#1771, #1790).
  • Conditionally published APIs for C# RS Driver (#1717).

Congrats to all contributors and thanks everyone for using our driver!


The source code of the driver can be found here:

The official crates.io registry entry is here:

Thank you for your attention, please do not hesitate to contact us if you have any questions, issues, feature requests, or are simply interested in our driver!

Contributors since the last release:

commits author
116 Karol Baryła
112 Wojciech Przytuła
25 renovate[bot]
19 Patrycja Ziemkiewicz
2 Dawid Pawlik
2 Floze
2 phalat
2 Paulina Czajkowska
1 Anna Stuchlik
1 Photon101
1 Vismay
1 dependabot[bot]