NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #62 most downloaded on crates.io
An event-driven, non-blocking I/O platform for writing asynchronous I/O backed applications.
Last release 1 months ago
20 Jul 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
5 versions withdrawn
withdrawn after publishing
10 years old
195 releases · first in 2016
This release bumps the MSRV of Tokio to 1.56. ([#5559])
This release bumps the MSRV of Tokio to 1.56. (#5559)
async_io helper method to sockets (#5512)AsFd/AsHandle/AsSocket (#5514, #5540)UdpSocket::peek_sender() (#5520)RwLockWriteGuard::{downgrade_map, try_downgrade_map} (#5527)JoinHandle::abort_handle (#5543)memchr from libc (#5558)#[tokio::main] (#5557)Interval returns Ready (#5553)ReadDir (#5555)spawn_blocking location fields (#5573)Wheel::poll() (#5574)One column per quarter.
macros: fix empty join! and try_join! ([#5504])
join! and try_join! (#5504)fs::try_exists (#4299)MappedOwnedMutexGuard (#5474)#[clippy::has_significant_drop] (#5422)Instant::now() perf with test-util (#5513)poll_fn in copy_bidirectional (#5486)notify_waiters calls atomic (#5458)blocking_* methods (#5448)process::Command docs (#5413)io: add budgeting to tokio::io::async_io ([#6221])
tokio::runtime::io::registration::async_io (#6221)io: use memchr from libc ([#5960])
deps: disable default features for mio ([#5728])
rt: fix runtime metrics reporting ([#5330])
io: fix unsoundness in ReadHalf::unsplit ([#5375])
This release fixes a compilation failure on targets without AtomicU64 when using rustc older than 1.63. ([#5356])
This release fixes a compilation failure on targets without AtomicU64 when using rustc older than 1.63. (#5356)
rt: improve native AtomicU64 support detection ([#5284])
This release forward ports changes from 1.18.4.
This release forward ports changes from 1.18.4.
net: fix Windows named pipe connect ([#5208])
runtime: add Handle::runtime_flavor ([#5138])
Handle::runtime_flavor (#5138)Mutex::blocking_lock_owned (#5130)Semaphore::MAX_PERMITS (#5144)merge() to semaphore permits (#4948)mpsc::WeakUnboundedSender (#5189)Command::process_group (#5114)task::id() and task::try_id() (#5171)LocalOwnedTasks (#5099)mark_pending called illegally (#5093)unsync_load on atomic types (#5175)LocalSet drop in thread local (#5179)CachePadded (#5106)tokio::io::copy continue filling the buffer when writer stalls (#5066)coop::budget from LocalSet::run_until (#5155)Notify panic safe (#5154)write_i8 to use signed integers (#5040)set_tos methods (#5073)UdpSocket::recv documentation (#5150)TryLockError for RwLock::try_write (#5160)timeout (#5118)timeout checks only before poll (#5126)oneshot::Receiver in docs (#5198)Mutex::new for globals (#5061)Option around mio::Events in io driver (#5078)io::handle refs with scheduler:Handle (#5128)scheduler::Handle (#5135)runtime::context module (#5140)driver.rs (#5141)runtime::context to unify thread-locals (#5143)coop mod into runtime (#5152)Runtime into its own file (#5159)Handle::enter (#5163)enter into context (#5167)CoreStage methods to Core (#5182)This release removes the dependency on the once_cell crate to restore the MSRV of 1.21.x, which is the latest minor version at the time of release. ([
This release removes the dependency on the once_cell crate to restore the MSRV
of 1.21.x, which is the latest minor version at the time of release. (#5048)
net: fix dependency resolution for socket2 ([#5000])
This release is the first release of Tokio to intentionally support WASM. The sync,macros,io-util,rt,time features are stabilized on WASM. Additionall
This release is the first release of Tokio to intentionally support WASM. The
sync,macros,io-util,rt,time features are stabilized on WASM. Additionally the
wasm32-wasi target is given unstable support for the net feature.
device and bind_device methods to TCP/UDP sockets (#4882)tos and set_tos methods to TCP and UDP sockets (#4877)ServerOptions (#4845)mpsc::Sender::max_capacity method (#4904)mpsc::Sender (#4595)LocalSet::enter (#4765)JoinSet and AbortHandle (#4920)track_caller to public APIs (#4805, #4848, #4852)wasm32-wasi target (#4716)linked_list::Link impls (#4841)#[must_use] to lock guards (#4886)recv on closed and reopened broadcast channel (#4867)File::start_seek (#4897)poll_read (#4840)SignalKind methods const (#4956)basic_scheduler::Config (#4935)runtime module (#4942)AsyncSeekExt::rewind docs (#4893)try_read() for zero-length buffers (#4937)Builder::worker_threads (#4849)watch::Sender::send improved (#4959)JoinHandle (#4901)spawn_blocking (#4811)Interval::tick happens immediately (#4951)This is a backport of a change from 1.27.0.
deps: disable default features for mio ([#5728])
io: fix unsoundness in ReadHalf::unsplit ([#5375])
This release forward ports changes from 1.18.4.
This release forward ports changes from 1.18.4.
This release removes the dependency on the once_cell crate to restore the MSRV of the 1.20.x LTS release. ([#5048])
This release removes the dependency on the once_cell crate to restore the MSRV
of the 1.20.x LTS release. (#5048)
chore: fix version detection in build script ([#4860])
tokio: add track_caller to public APIs ([#4772], [#4791], [#4793], [#4806], [#4808])
track_caller to public APIs (#4772, #4791, #4793, #4806, #4808)has_changed method to watch::Ref (#4758)src/time/driver/wheel/stack.rs (#4766)This release fixes another bug in Notified::enable. ([#4751])
This release fixes another bug in Notified::enable. (#4751)
This release fixes a bug in Notified::enable. ([#4747])
This release fixes a bug in Notified::enable. (#4747)
runtime: add is_finished method for JoinHandle and AbortHandle ([#4709])
is_finished method for JoinHandle and AbortHandle (#4709)Notified::enable (#4705)watch::Sender::send_if_modified (#4591)take_error to TcpSocket and TcpStream (#4739)join! and try_join! (#4624)block_on (#4729)MissedTickBehavior::Burst (#4713)IoDriverMetrics (#4725)#[track_caller] to JoinSet/JoinMap (#4697)Builder::{spawn_on, spawn_local_on, spawn_blocking_on} (#4683)consume_budget for cooperative scheduling (#4498)join_set::Builder for configuring JoinSet tasks (#4687)JoinSet::join_one (#4726)deps: disable default features for mio ([#5728])
io: fix unsoundness in ReadHalf::unsplit ([#5375])
ReadHalf::unsplit (#5375)net: fix Windows named pipe server builder to maintain option when toggling pipe mode ([#5336]).
This release removes the dependency on the once_cell crate to restore the MSRV of the 1.18.x LTS release. ([#5048])
This release removes the dependency on the once_cell crate to restore the MSRV
of the 1.18.x LTS release. (#5048)
Add missing features for the winapi dependency. ([#4663])
Add missing features for the winapi dependency. (#4663)
The 1.18.0 release broke the build for targets without 64-bit atomics when building with tokio_unstable. This release fixes that. ([#4649])
The 1.18.0 release broke the build for targets without 64-bit atomics when
building with tokio_unstable. This release fixes that. (#4649)
This release adds a number of new APIs in tokio::net, tokio::signal, and tokio::sync. In addition, it adds new unstable APIs to tokio::task (Ids for u
This release adds a number of new APIs in tokio::net, tokio::signal, and
tokio::sync. In addition, it adds new unstable APIs to tokio::task (Ids
for uniquely identifying a task, and AbortHandle for remotely cancelling a
task), as well as a number of bugfixes.
#[track_caller] for spawn_blocking (#4616)select macro to process 64 branches (#4519)try_io methods not calling Mio's try_io internally (#4582)UdpSocket::peer_addr (#4611)try_read_buf method for named pipes (#4626)SignalKind Hash/Eq impls and c_int conversion (#4540)SIGRTMAX (#4555)watch::Sender::send_modify method (#4310)broadcast::Receiver::len method (#4542)watch::Receiver::same_channel method (#4581)Clone for RecvError types (#4560)mio to 0.8.1 (#4582)tokio::select!'s internal util module (#4543)Vec::with_capacity when building runtime (#4553)tokio_unstable (#4524)Handle::current's docs to mention EnterGuard (#4567)Signal::recv is cancel-safe (#4634)UnboundedReceiver close docs (#4548)The following changes only apply when building with --cfg tokio_unstable:
replace deprecated atomic::spin_loop_hint with hint::spin_loop ([#4491])
This release updates the minimum supported Rust version (MSRV) to 1.49, the
mio dependency to v0.8, and the (optional) parking_lot dependency to v0.12.
Additionally, it contains several bug fixes, as well as internal refactoring and
performance improvements.
sleep with large durations (#4495)Instant arithmetic on platforms where
Instant::now is not monotonic (#4461)DuplexStream not participating in cooperative yielding (#4478)JoinHandle (#4430)parking_lot dependency to v0.12.0 (#4459)mio dependency to v0.8 (#4449)std::future::Ready instead of our own Ready future (#4271)atomic::spin_loop_hint with hint::spin_loop (#4491)tokio::process::ChildStdin (#4479)The following changes only apply when building with --cfg tokio_unstable:
This release fixes a bug in [#4428] with the change [#4437].
rt: breaking change overhaul runtime metrics API ([#4373])
Fixes a soundness bug in io::Take (#4428). The unsoundness is exposed when
leaking memory in the given AsyncRead implementation and then overwriting the
supplied buffer:
impl AsyncRead for Buggy {
fn poll_read(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &mut ReadBuf<'_>
) -> Poll<Result<()>> {
let new_buf = vec![0; 5].leak();
*buf = ReadBuf::new(new_buf);
buf.put_slice(b"hello");
Poll::Ready(Ok(()))
}
}
Also, this release includes improvements to the multi-threaded scheduler that can increase throughput by up to 20% in some cases (#4383).
io::Take in edge case (#4428)File::write results in a write syscall when the runtime shuts down (#4316)wait_with_output (#4315)Send from parking_lot::*Guard (#4359)TcpSocket::linger() and set_linger() (#4324)UnwindSafe for socket types (#4384)UnwindSafe for JoinHandle (#4418)watch::Receiver::has_changed() (#4342)oneshot::Receiver::blocking_recv() (#4334)RwLock blocking operations (#4425)The following changes only apply when building with --cfg tokio_unstable
io: add cooperative yielding support to io::empty() ([#4300])
io::empty() (#4300)Interval::reset() (#4248)AsyncFdReadyGuard (#4267)Command::as_std() (#4295)tokio::sync types (#4302)Nothing published for this version
macros: fix compiler errors when using mut patterns in select! ([#4211])
mut patterns in select! (#4211)oneshot::Sender::send and awaiting a
oneshot::Receiver when the oneshot has been closed (#4226)AtomicWaker panic safe (#3689)copy buffer size to match std::io::copy (#4209)sync: fix a data race between oneshot::Sender::send and awaiting a oneshot::Receiver when the oneshot has been closed ([#4226])
oneshot::Sender::send and awaiting a
oneshot::Receiver when the oneshot has been closed (#4226)sync: fix Notify to clone the waker before locking its waiter list ([#4129])
Notify to clone the waker before locking its waiter list (#4129)poll_{recv,send}_ready methods to udp and uds_datagram (#4131)try_*, readable, writable, ready, and peer_addr methods to split halves (#4120)blocking_lock to Mutex (#4130)watch::Sender::send_replace (#3962, #4195)Debug for Mutex<T> impl to unsized T (#4134)copy_bidirectional that poll_write is sensible (#4125)select! (#4192)block_on wakeups better (#4157)try_join! (#4133)tokio/src/lib.rs (#4132)Interval::tick cancel safety (#4152)mpsc: ensure try_reserve error is consistent with try_send ([#4119])
try_reserve error is consistent with try_send (#4119)spin_loop_hint instead of yield_now (#4115)SendError field public (#4097)AsyncSeekExt::rewind (#4107)block_on futures (#4094)try_recv for mpsc channels (#4113)time: don't panic when Instant is not monotonic ([#4044])
fill_buf by not calling poll_fill_buf twice (#4084)watch::Sender::subscribe (#3800)from_std to ChildStd* (#4045)runtime: fix leak in UnownedTask ([#4063])
io: add (read|write)_f(32|64)[_le] methods ([#4022])
(read|write)_f(32|64)[_le] methods (#4022)fill_buf and consume to AsyncBufReadExt (#3991)Child::raw_handle() on windows (#3998)--cfg docsrs (#4020)io::copy (#4001)spin_loop_hint instead of yield_now in mpsc (#4037)net: allow customized I/O operations for TcpStream ([#3888])
Nothing published for this version
Nothing published for this version
This release backports two fixes from 1.9.0
Fixes a missed edge case from 1.8.1.
runtime: remotely abort tasks on JoinHandle::abort ([#3934])
io: add get_{ref,mut} methods to AsyncFdReadyGuard and AsyncFdReadyMutGuard ([#3807])
get_{ref,mut} methods to AsyncFdReadyGuard and AsyncFdReadyMutGuard (#3807)BufWriter (#3163)NamedPipe{Client,Server} (#3866, #3899)watch::Receiver::borrow_and_update (#3813)From<T> for OnceCell<T> (#3877)tokio::task::Builder (#3881)UnixStream (#3898)Nothing published for this version
runtime: remotely abort tasks on JoinHandle::abort ([#3934])
runtime: fix early task shutdown during runtime shutdown ([#3870])
sync: deprecate unused mpsc::RecvError type ([#3833])
TcpSocket from std::net::TcpStream conversion (#3838)receiver_count to watch::Sender (#3729)sync::notify::Notified future publicly (#3840)clippy::default_numeric_fallback lint in generated code (#3831)mpsc::RecvError type (#3833)Nothing published for this version
runtime: remotely abort tasks on JoinHandle::abort ([#3934])
test: sub-ms time:advance regression introduced in 1.6 ([#3852])
time:advance regression introduced in 1.6 (#3852)This release reverts [#3518] because it doesn't work on some kernels due to a kernel bug. ([#3803])
fs: try doing a non-blocking read before punting to the threadpool ([#3518])
write_all_buf to AsyncWriteExt (#3737)AsyncSeek for BufReader, BufWriter, and BufStream (#3491)mpsc::Sender::{reserve_owned, try_reserve_owned} (#3704)MutexGuard::map method that returns a MappedMutexGuard (#2472)DuplexStream close (#3756)std::os::raw::c_int instead of libc::c_int on public API (#3774)notify_waiters (#3660)JoinHandle panic message (#3727)time::advance from going too far (#3712)Your coding agent can read these notes before it upgrades. Set up the MCP server →