NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1802 most downloaded on crates.io
Oneshot spsc channel with (potentially) lock-free non-blocking send, and a receiver supporting both thread blocking receive operations as well as Future based async polling.
Last release 7 months ago
23 Feb 2026
Ships fairly regularly
a new release about every 8 months
Nearly every release is documented
notes for 12 of 12 stable releases
4 versions withdrawn
withdrawn after publishing
7 years old
16 releases · first in 2019
Add is_closed and has_message methods to AsyncReceiver .
is_closed and has_message methods to AsyncReceiver.…that the user explicitly enables. This is a breaking change.
std and async features by default. Making them opt-in instead of opt-out.AsyncReceiver that implements Future instead of implementing itReceiver type. Now the Receiver implements IntoFuture instead."SendError<T>(_)".One column per quarter.
Fix documentation building on docs.rs by not using removed doc_auto_cfg feature.
doc_auto_cfg feature.Fix race condition that could lead to use-after-free if the Receiver was polled asynchronously, but then dropped before completion. #74 . RUSTSEC-2026
Handle the UNPARKING state correctly in Receiver::drop() . Fixes a panic that could occur if a Receiver had been first polled as a future and then was
Fixed:
UNPARKING state correctly in Receiver::drop(). Fixes a panic that couldReceiver had been first polled as a future and then was being droppedSender sending a message.Add is_closed and has_message to the Receiver . Allows polling for the channel state without modifying the channel or pulling the message from it.
Added:
is_closed and has_message to the Receiver. Allows polling for the channelImplement Sync for Sender . There is not a whole lot someone can do with a &Sender , but this allows storing the sender in places that are overly cons
Added:
Sync for Sender. There is not a whole lot someone can do with a &Sender,Sync bound on the content.Change how loom concurrency testing is triggered. To get rid of loom in the dependency tree oneshot pulls in, it has in addition to being gated behind
loom in the dependency treeoneshot pulls in, it has in addition to being gated behind cfg(oneshot_loom) also been madeloom feature.loom feature.oneshot in regular usage.Add is_closed method to the Sender .
is_closed method to the Sender.Add into_raw and from_raw methods on both Sender and Receiver. Allows passing oneshot channels over FFI without an extra layer of heap allocation.
into_raw and from_raw methods on both Sender and Receiver. Allows passing oneshot
channels over FFI without an extra layer of heap allocation.Handle the UNPARKING state correctly in all recv methods. try_recv will now not panic if used on a Receiver that is being unparked from an async wait.
try_recv will now not panic
if used on a Receiver that is being unparked from an async wait. The other recv methods
will still panic (as they should), but with a better error message.Upgrade to Rust edition 2021. Also increases the MSRV to Rust 1.60.
Sender, Receiver and SendError.
This reduces the call stack size of Sender::send and it makes
Option<Sender> and Option<Receiver> pointer sized (#18).SeqCst to the most appropriate
lower ordering (#17 + #20).Receiver (#17 + #20).Keep the *last* Waker in Future::poll, not the *first* one. Stops breaking the contract on how futures should work.
Waker in Future::poll, not the first one. Stops breaking the contract
on how futures should work.Fix unreachable code panic that happened if the Receiver of an empty but open channel was polled and then dropped.
Receiver of an empty but open channel was
polled and then dropped.Initial implementation. Supports basically all the (for now) intended functionality. Sender is as lock-free as I think it can get and the receiver can
Initial implementation. Supports basically all the (for now) intended functionality.
Sender is as lock-free as I think it can get and the receiver can both do thread blocking
and be awaited asynchronously. The receiver also has a wait-free try_recv method.
The crate has two features. They are activated by default, but the user can opt out of async
support as well as usage of libstd (making the crate no_std but still requiring liballoc)
Name reserved on crate.io by someone other than the author of this crate.
Name reserved on crate.io by someone other than the author of this crate.
Your coding agent can read these notes before it upgrades. Set up the MCP server →