NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #916 most downloaded on crates.io
A collection of high-performance asynchronous/concurrent containers with both asynchronous and synchronous interfaces
Last release 1 months ago
01 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 51 of 54 stable releases
200 versions withdrawn
withdrawn after publishing
6 years old
254 releases · first in 2020
One column per quarter.
Allow more concurrent tasks/threads to migrate old entries in Hash* containers in parallel: 64 -> 2048.
Hash* containers in parallel: 64 -> 2048.Hash* containers are now 1_usize << (usize::BITS - 1).AARCH64 in HashIndex::peek* where an entry can momentarily become unreachable after a resize.Hash* containers.Minor read performance improvement of Hash* containers.
Hash* containers.Improve hash_index::OccupiedEntry::update scalability: `#236`.
hash_index::OccupiedEntry::update scalability: #236.Fix a minor Miri issue in HashIndex: `#235` by `CorrectButNotRight`.
Miri issue in HashIndex: #235 by CorrectButNotRight.Fix TreeIndex panic handling: `#232` by `Evian-Zhang`.
TreeIndex panic handling: #232 by Evian-Zhang.Automatically route calls to *Index::read* to *Index::peek_with if both the key and value types are primitives and scalar types.
*Index::read* to *Index::peek_with if both the key and value types are primitives and scalar types.Improve hash_index::OccupiedEntry::update performance by more aggressively garbage collecting entries.
hash_index::OccupiedEntry::update performance by more aggressively garbage collecting entries.Fix Hash*::with_capacity* to take the maximum load factor into account when calculating the hash table capacity.
Hash*::with_capacity* to take the maximum load factor into account when calculating the hash table capacity.Add hash_set::OccupiedEntry and hash_set::HashSet::begin_*: `PR #231` by `hackermondev`.
hash_set::OccupiedEntry and hash_set::HashSet::begin_*: PR #231 by hackermondev.Implement special code to make memory reclamation transparent to loom.
loom.Reduce the lifetime of sdd::Guard in iterator methods of Hash* containers.
sdd::Guard in iterator methods of Hash* containers.Hash* containers when using asynchronous methods.* Update the SAA dependency.
SAA dependency.API update: TreeIndex::{Iter, Range} no longer allow references to outlive the TreeIndex.
TreeIndex::{Iter, Range} no longer allow references to outlive the TreeIndex.'static lifetime bounds from TreeIndex.Fix TreeIndex split boundary calculation.
TreeIndex split boundary calculation.TreeIndex::upsert.Minor improvement on branch prediction hints.
TreeIndex::{drop, upsert} optimization.(Unstable API) Add TreeIndex::{upsert_async, upsert_sync}.
TreeIndex::{upsert_async, upsert_sync}.TreeIndex for low-entropy data.Fix MSRV issues: affected versions = [3.5.2, 3.6.8].
MSRV issues: affected versions = [3.5.2, 3.6.8].HashIndex and TreeIndex entry iteration performance.Minor TreeIndex::drop optimization.
TreeIndex::drop optimization.Replace sdd::AtomicShared with sdd::AtomicRaw to minimize RMW operations.
sdd::AtomicShared with sdd::AtomicRaw to minimize RMW operations.Minor ref-counting optimization.
TreeIndex parameter adjustment: B: 14 -> 15.Faster memory reclamation after dropping a container at the cost of slower fn drop.
fn drop.Minor TreeIndex::remove_range_{async, sync} optimization.
TreeIndex::remove_range_{async, sync} optimization.OOM handling.* Update dependencies.
Stabilize {HashIndex, TreeIndex}::read_{async, sync}.
{HashIndex, TreeIndex}::read_{async, sync}.Add {HashIndex, TreeIndex}::read_{async, sync} for shared-lock-protected access to entries.
{HashIndex, TreeIndex}::read_{async, sync} for shared-lock-protected access to entries.*Breaking change / API update*.
{HashMap, HashCache}::ConsumableEntry returns key and value references separately to prevent accidental key field modification.{HashMap, HashCache}::iter_mut_{async, sync} methods are affected by the breaking change.use scc::HashMap;
let hashmap: HashMap<u64, u32> = HashMap::default();
assert!(hashmap.insert_sync(1, 0).is_ok());
let mut consumed = None;
hashmap.iter_mut_sync(|mut e| {
if *e.key() == 1 { // Previously, `e.0 == 1`.
*e = 3; // Previously, `e.1 = 3`.
// Previously, `e.0 = 0` was allowed: !unsafe!.
consumed.replace(e.consume().1);
}
true
});
assert_eq!(consumed, Some(3));
Hash* containers for better memory utilization: K and V are stored separately.TreeIndex::insert_* performance improvement.Add support for MIRIFLAGS="-Zmiri-strict-provenance".
MIRIFLAGS="-Zmiri-strict-provenance".Hash* resizing strategy.TreeIndex node split operations.Better Hash* resizing strategy: minimize any effect of mutable iterators on sampling.
Hash* resizing strategy: minimize any effect of mutable iterators on sampling.memcpy operations during TreeIndex::insert*.Optimize the Hash* resizing strategy: reduce performance fluctuations by more accurately estimating the number of entries.
Hash* resizing strategy: reduce performance fluctuations by more accurately estimating the number of entries.Implement Clone for HashIndex::Iter and TreeIndex::{Iter, Range}.
Clone for HashIndex::Iter and TreeIndex::{Iter, Range}.Add TreeIndex::{Iter, Range}::{get, get_back, flip}.
TreeIndex::{Iter, Range}::{get, get_back, flip}.Implement TreeIndex::locate to locate the nearest key if the key is absent: #203.
TreeIndex::locate to locate the nearest key if the key is absent: #203.Stabilize DoubleEndedIterator for TreeIndex::{Iter, Range}: #217.
DoubleEndedIterator for TreeIndex::{Iter, Range}: #217.TreeIndex::{Iter, Range} performance improvements.Optimize linked list modification during TreeIndex::remove_range*.
TreeIndex::remove_range*.TreeIndex range iterator.Implement DoubleEndedIterator for tree_index::Range: #217.
DoubleEndedIterator for tree_index::Range: #217.Implement DoubleEndedIterator for tree_index::Iter: #217.
DoubleEndedIterator for tree_index::Iter: #217.Remove the V: Clone bound from TreeIndex.
V: Clone bound from TreeIndex.Optimize TreeIndex entry iteration.
TreeIndex entry iteration.* Code cleanup.
Minor Hash* performance improvements.
Hash* performance improvements.* Migrate to `codeberg`. * Better Hash* OOM handling.
codeberg.Hash* OOM handling.Minor updates for codeberg migration.
codeberg migration.Minor Future size improvement for Hash* containers.
Future size improvement for Hash* containers.Improve HashIndex entry slot recycling strategies.
HashIndex entry slot recycling strategies.Minor Hash* performance improvements.
Hash* performance improvements.Simplify HashIndex entry removal policies.
Future size improvement.HashIndex entry removal policies.HashIndex for !needs_drop::<(K, V)>().Maximum capacity limit is adjusted to 2^(usize::BITS - 2).
2^(usize::BITS - 2).Future size improvement.* Minor optimization.
Migrate Bag, LinkedList, Queue, and Stack to sdd.
Bag, LinkedList, Queue, and Stack to sdd.Nothing published for this version
Improve sampling accuracy in Hash* containers.
Hash* containers.Simplify Hash* capacity management.
Hash* capacity management.loom feature to pass the proper loom option to saa.Enhance Hash* capacity management.
Hash* capacity management.Minor asynchronous code optimization.
API update: add {HashMap, HashCache}::{replace_async, replace_sync}.
{HashMap, HashCache}::{replace_async, replace_sync}.Remove the 'static bound from HashIndex: #200.
More conservative grow/shrink policies in Hash* containers to avoid wrong load factor estimation.
Hash* containers to avoid wrong load factor estimation.HashIndex entries as early as possible: #198.API update: HashIndex::{peek, iter} no longer allow entry references to outlive the HashIndex: #198.
API update: hash_index::OccupiedEntry::update does not consume itself.
hash_index::OccupiedEntry::update does not consume itself.HashSet::replace_{async|sync}.TreeIndex::clear and TreeIndex::insert*.Minor memory usage optimization.
Your coding agent can read these notes before it upgrades. Set up the MCP server →