NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #188 most downloaded on crates.io
Multi-producer multi-consumer channels for message passing
Last release 1 months ago
05 Sep 2026
Release timing varies
gaps range from 1 weeks to 1.2 years
Nearly every release is documented
notes for 31 of 31 stable releases
13 versions withdrawn
withdrawn after publishing
9 years old
44 releases · first in 2017
Fix UB in bounded channel when SelectedOperation is leaked.
SelectedOperation is leaked. (#1295)at(). (#1296)Improve support for rust-analyzer auto-completion of code inside select! / select_biased! macro.
One column per quarter.
Fix regression introduced in 0.5.12 that can lead to a double free when dropping unbounded channel.
Note: This release has been yanked due to bug fixed in 0.5.15.
Note: This release has been yanked due to bug fixed in 0.5.15.
Select::new_biased function. (#1150)clippy::zero_repeat_side_effects lint in macro generated code. (#1123)Note: This release has been yanked due to bug fixed in 0.5.15.
Note: This release has been yanked due to bug fixed in 0.5.15.
select_biased! macro. (#1040)Note: This release has been yanked due to bug fixed in 0.5.15.
Note: This release has been yanked due to bug fixed in 0.5.15.
- Remove dependency on cfg-if.
cfg-if. (#1072)Relax the minimum supported Rust version to 1.60.
Drop implementation of bounded channel. (#1057)Bump the minimum supported Rust version to 1.61.
Fix race condition in unbounded channel.
Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked. See #802 for details.
Note: This release has been yanked. See #802 for details.
Note: This release has been yanked. See #802 for details.
Note: This release has been yanked. See #802 for details.
-Zmiri-tag-raw-pointers is enabled. (#763, #764)Note: This release has been yanked due to bug fixed in 0.5.8.
Note: This release has been yanked due to bug fixed in 0.5.8.
Update crossbeam-channel to 0.3.
crossbeam-channel to 0.3.crossbeam-utils to 0.6.AtomicCell, SharedLock, and WaitGroup.at() function.Sender::send_deadline() and Receiver::recv_deadline() methods.Select::select_deadline() and Select::ready_deadline() methods.std (enabled by default) feature for forward compatibility.select! macro compile with forbid(unsafe_code).Fix UB and breaking change introduced in 0.4.3
Note: This release has been yanked. See GHSA-v5m7-53cv-f3hx for details.
Note: This release has been yanked. See GHSA-v5m7-53cv-f3hx for details.
Fix bug in release (yanking 0.4.1)
Fix a double-free bug in MsQueue and SegQueue.
MsQueue and SegQueue.channel::tick. (#456)MaybeUninit. (#458)Bump the minimum required version to 1.28.
crossbeam-utils to 0.7.Fix a bug in reference counting.
recv_timeout().Select::remove().Bump the minimum required version of crossbeam-utils.
crossbeam-utils.Remove parking_lot and rand dependencies.
parking_lot and rand dependencies.Default for Select.size_of::<Receiver<T>>() smaller.Fix a bug in initialization of unbounded channels.
New implementation for unbounded channels.
crossbeam-epoch dependency.- Bump crossbeam-epoch to 0.7. - Improve documentation.
crossbeam-epoch to 0.7.Relax the lifetime in SelectedOperation<'_>.
SelectedOperation<'_>.Select::try_ready(), Select::ready(), and Select::ready_timeout().is_disconnected(), is_timeout(), is_empty(), and is_full() on error types.More elaborate licensing notices.
- Update crossbeam-utils to 0.6.
crossbeam-utils to 0.6.Add a special never channel type.
never channel type.send in select! is now send(sender, msg) -> res => body.recv in select! is now recv(receiver) -> res => body.Select without callbacks.select!.Select struct that can add cases dynamically.
Select struct that can add cases dynamically.Use LocalKey::try_with instead of LocalKey::with.
LocalKey::try_with instead of LocalKey::with.__crossbeam_channel*.Make select! linearizable with other channel operations.
select! linearizable with other channel operations.crossbeam-utils to 0.5.0.parking_lot to 0.6.3.Eliminate calls to mem::unitialized, which caused bugs with ZST.
mem::unitialized, which caused bugs with ZST.Update crossbeam-epoch to 0.5.0
crossbeam-epoch to 0.5.0libc::abort with std::process::abort.select!.select! with the NLL borrow checker.Fix compilation errors when using select! with #[deny(unsafe_code)].
select! with #[deny(unsafe_code)].Implement IntoIterator for Receiver .
IntoIterator<Item = T> for Receiver<T>.select! macro.after and tick.recv, send, and try_recv.Sender::is_closed and Receiver::is_closed.Sender::close and Receiver::close.Sender::send_timeout and Receiver::recv_timeout.Sender::try_send.Select and select_loop!.Iter, TryIter, and IntoIter.nightly feature.Sender and Receiver.Add Sender::disconnect and Receiver::disconnect.
Sender::disconnect and Receiver::disconnect.Sender and Receiver.msg in recv(r, msg).atomicring and mpmc.crossbeam-epoch to 0.4.0crossbeam-utils to 0.3.0parking_lot to 0.5rand to 0.4Allow conditional cases in select_loop! macro.
select_loop! macro.Implement Debug for Sender, Receiver, Iter, TryIter, IntoIter, and Select.
Debug for Sender, Receiver, Iter, TryIter, IntoIter, and Select.Default for Select.First implementation of the channels.
select_loop! macro by @TimNN.Your coding agent can read these notes before it upgrades. Set up the MCP server →