NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #506 most downloaded on crates.io
Async I/O and timers
Last release 1 years ago
14 Sep 2025
Release timing varies
gaps range from 2 weeks to 7 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
7 years old
62 releases · first in 2019
Implement IoSafe for std::PipeReader and std::PipeWriter
Add a new optional tracing feature. When enabled, this feature adds logging to the implementation. By default it is disabled.
One column per quarter.
Update to rustix version 1.0.7.
Make it so the Exit filter can be created without passing ownership of the Child object.
On NetBSD/DragonflyBSD, set nosigpipe on sockets.
Fix nightly clippy warnings.
Fix usage of the wrong socket flags on AIX.
On Windows, call WSAStartup before any raw socket functions.
WSAStartup before any raw socket functions. (#183)Add Waitable , which allows waiting for waitable handles on Windows.
Waitable, which allows waiting for waitable handles onFix an EINVAL error that would occur when abstract sockets are used.
EINVAL error that would occur when abstract sockets are used. (#176)- Remove dependency on waker-fn. (#165) - Update windows-sys to v0.52.0.
waker-fn. (#165)windows-sys to v0.52.0. (#173)Bump async-lock and futures-lite to their latest version.
async-lock and futures-lite to their latest version. (#170)Implement IoSafe for std::{ChildStdin, ChildStdout, ChildStderr}.
IoSafe for std::process::{ChildStdin, ChildStdout, ChildStderr}. (#162)Breaking: Async::new() now takes types that implement AsFd/AsSocket instead of AsRawFd/AsRawSocket, in order to implement I/O safety.
Async::new() now takes types that implement AsFd/AsSocket instead of AsRawFd/AsRawSocket, in order to implement I/O safety. (#142)Async::get_mut(), Async::read_with_mut() and Async::write_with_mut() are now unsafe. The underlying source is technically "borrowed" by the polling instance, so moving it out would be unsound. (#142)kqueue filters in the os::kqueue module. (#112)Poller's file descriptor on Unix. (#125)Async::new_nonblocking method to allow users to avoid duplicating an already nonblocking socket. (#159)fastrand and memchr dependencies. (#131)tracing instead of log. (#140)block_on function to reduce allocation, leading to a slight performance improvement. (#149)Use [rustix] instead of [libc]/[windows-sys] for system calls
rustix instead of libc/windows-sys for system calls (#76)will_fire method to Timer to test if it will ever fire (#106)Async::new (#107)Readable and Writable (#109)wepoll" in documentation to "IOCP" (#116)Switch from winapi to windows-sys
winapi to windows-sys (#102)- Update concurrent-queue to v2.
concurrent-queue to v2. (#99)Remove the dependency on the once_cell crate to restore the MSRV.
once_cell crate to restore the MSRV. (#95)Fix panic on very large durations.
Timer::never (#87)Implement I/O safety traits on Rust 1.63+
Process timers set for exactly now.
now. (#73)Add Readable and Writable futures. (#64, #66)
Readable and Writable futures. (#64, #66)Async::{readable_owned, writable_owned}. (#66)Add Readable and Writable futures.
Readable and Writable futures. (#64)Remove dependency on deprecated vec-arena.
vec-arena. (#60)Remove dependency on deprecated nb-connect.
AsRef<T> and AsMut<T> for Async<T>. (#44)nb-connect. (#55)- Lower MSRV to 1.41.0
Add Timer::interval() and Timer::set_interval().
Timer::interval() and Timer::set_interval().Timer::interval_at() and Timer::set_interval_at().Stream for Timer.Add Async::poll_readable() and Async::poll_writable().
Async::poll_readable() and Async::poll_writable().- Update futures-lite.
futures-lite.Only require libc on Unix platforms.
libc on Unix platforms.Re-enable async-net dependency and fix CI.
async-net dependency and fix CI.- Update polling to v2.0.0
polling to v2.0.0Remove randomized yielding everywhere.
Remove randomized yielding in write operations.
Implement proper cancelation for readable() and writable().
readable() and writable().- Improve docs.
Remove wepoll-sys-stjepang dependency.
nb-connect dependency.wepoll-sys-stjepang dependency.- Remove socket2 dependency.
socket2 dependency.Add TryFrom conversion impls for Async.
TryFrom conversion impls for Async.Async::incoming() doesn't return Unpin streams anymore.
T in Async<T>.Async::incoming() doesn't return Unpin streams anymore.- Update dependencies.
- Stabilize.
Replace log::debug! with log::trace!.
log::debug! with log::trace!.- Add logging.
On Linux, fail fast if writable() succeeds after connecting to UnixStream, but the connection is not really established.
writable() succeeds after connecting to UnixStream,
but the connection is not really established.Prevent threads in async_io::block_on() from hogging the reactor forever.
async_io::block_on() from hogging the reactor forever.Performance optimizations in block_on().
block_on().Add probabilistic yielding to improve fairness.
- Update readme.
Replace parking module with block_on().
parking module with block_on().Async::<UnixStream>::connect().Bug fix: clear events list before polling.
Simpler implementation of the parking module.
parking module.polling crate.- Update dependencies. - More documentation.
Tweak the async-io to poll I/O less aggressively.
Tweak the async-io thread to use less CPU.
- Add Timer::reset(). - Add third party licenses. - Code cleanup.
Timer::reset().Make Parker and Unparker unwind-safe.
Parker and Unparker unwind-safe.Initialize the reactor in Parker::new().
Parker::new().Always use the last waker given to Timer.
Timer.AsyncWrite::poll_close().Shutdown the write side of the socket in AsyncWrite::poll_close().
AsyncWrite::poll_close().Your coding agent can read these notes before it upgrades. Set up the MCP server →