NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #235 most downloaded on crates.io
Notify async tasks or threads
Last release 2 months ago
27 Jul 2026
Ships unpredictably
gaps range from 1 weeks to 12 months
Nearly every release is documented
notes for 35 of 35 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
35 releases · first in 2020
One column per quarter.
Add spinlock implementation to intrusive.rs.
Fix a copy-paste error in wait_timeout docs
wait_timeout docs (#152)Add a no_std implementation based on the critical-section crate, enabled via the feature of the same name.
no_std implementation based on the critical-section crate, enabledDisable some optimizations that, in rare conditions, can cause race conditions causing notifications to be dropped.
Add a loom implementation. This feature is unstable and is not semver-supported.
Make StackSlot Sync .
StackSlot Sync. (#121)Make StackSlot Send .
StackSlot Send. (#119)Breaking: Rework the API to afford better usage.
Relax MSRV to 1.60.
Avoid spinning in wait_deadline .
wait_deadline. (#107)Fix a use-after-move error after an EventListener is assigned to listen to another Event.
EventListener is assigned to listen to
another Event. (#101)Breaking: Fix a footgun in the EventListener type. EventListener::new() now no longer takes an &Event as an argument, and EventListener::listen() take
EventListener type. EventListener::new()
now no longer takes an &Event as an argument, and EventListener::listen()
takes the &Event as an argument. Hopefully this should prevent .awaiting
on a listener without making sure it's listening first. (#94)Implement UnwindSafe and RefUnwindSafe for EventListener. This was unintentionally removed in version 3 (#96).
UnwindSafe and RefUnwindSafe for EventListener. This was unintentionally removed in version 3 (#96).Emphasize that listen() must be called on EventListener in documentation.
listen() must be called on EventListener in documentation. (#90)fmt::Debug implementations. (#86)Use the parking crate instead of threading APIs
parking crate instead of threading APIs (#27)no_std-compatible on default-features = false. (#34)event-listener-strategy crate for abstracting over blocking/non-blocking operations. (#49)EventListener API to be !Unpin. (#51)portable-atomic crate. (#53)Notification trait which is used to enable tagged events. (#52)is_notified() method to Event. (#48)notify() returns the number of listeners notified. (#57)- Fix fence on x86 and miri.
Fix stacked borrows violation when -Zmiri-tag-raw-pointers is enabled.
-Zmiri-tag-raw-pointers is enabled. (#24)- Replace spinlock with a mutex.
- Add EventListener::discard().
EventListener::discard().Event::new() is now a const fn.
Event::new() is now a const fn.Fix a bug in List::insert() that was causing deadlocks.
List::insert() that was causing deadlocks.Optimization: use a simple spinlock and cache an Entry for less allocation.
Entry for less allocation.Optimization: don't initialize Inner when notifying Event.
Inner when notifying Event.Implement UnwindSafe/RefUnwindSafe for Event/EventListener.
UnwindSafe/RefUnwindSafe for Event/EventListener.Always keep the last waker in EventListener::poll().
EventListener::poll().Add EventListener::same_event().
EventListener::same_event().Add EventListener::listens_to().
EventListener::listens_to().Replace usize::MAX with std::MAX.
usize::MAX with std::usize::MAX.Remove Event::notify_one() and Event::notify_all().
Event::notify_one() and Event::notify_all().Event::notify_relaxed() and Event::notify_additional_relaxed().EventListener now notifies one or one additional listener.Add Event::notify_additional().
Event::notify_additional().Change a Relaxed load to Acquire load.
Relaxed load to Acquire load.Fix a bug in EventListener::wait_timeout().
EventListener::wait_timeout().- Add EventListener::notify().
EventListener::notify().Reduce the complexity of notify_all() from O(n) to amortized O(1).
notify_all() from O(n) to amortized O(1).- Initial version.
Your coding agent can read these notes before it upgrades. Set up the MCP server →