NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #108 most downloaded on crates.io
Tokio's proc macros.
Last release 2 months ago
29 Jul 2026
Ships fairly regularly
a new release about every 4 months
Nearly every release is documented
notes for 31 of 32 stable releases
3 versions withdrawn
withdrawn after publishing
7 years old
41 releases · first in 2019
macros: upgrade syn to v3 ([#8304])
chore: prepare tokio-macros v2.7.1
chore: prepare tokio-macros v2.7.1 (#8295)
One column per quarter.
macros: stabilize LocalRuntime ([#7557])
macros: improve error message for return type mismatch in #[tokio::main] ([#7856])
msrv: increase MSRV to 1.71 ([#7658])
macros: suppress clippy::needless_return in #[tokio::main] ([#6874])
clippy::needless_return in #[tokio::main] (#6874)msrv: increase MSRV to 1.70 ([#6645])
macros: make #[tokio::test] append #[test] at the end of the attribute list ([#6497])
#[tokio::test] append #[test] at the end of the attribute list (#6497)use ::core qualified imports instead of ::std inside tokio::test macro ([#5973])
::core qualified imports instead of ::std inside tokio::test macro (#5973)macros: fix typo in #[tokio::test] docs ([#5636])
This major release updates the dependency on the syn crate to 2.0.0, and increases the MSRV to 1.56.
This major release updates the dependency on the syn crate to 2.0.0, and increases the MSRV to 1.56.
As part of this release, we are adopting a policy of depending on a specific minor release of tokio-macros. This prevents Tokio from being able to pull in many different versions of tokio-macros.
fix a regression introduced in 1.8.1 ([#5244])
macros: Pin Futures in #[tokio::test] to stack ([#5205])
macros: always emit return statement ([#4636])
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)macros: address remaining clippy::semicolon_if_nothing_returned warning ([#4252])
clippy::semicolon_if_nothing_returned warning (#4252)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)macros: fix mut patterns in select! macro ([#4211])
select! macro (#4211)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)macros: fix type resolution error in #[tokio::main] ([#4176])
#[tokio::main] (#4176)macros: make tokio-macros attributes more IDE friendly ([#4162])
AsyncSeekExt::stream_position (#3650)AsyncWriteExt::write_vectored (#3678)copy_bidirectional utility (#3572)IntoRawFd for TcpSocket (#3684)OnceCell (#3591)OwnedRwLockReadGuard and OwnedRwLockWriteGuard (#3340)Semaphore::is_closed (#3673)mpsc::Sender::capacity (#3690)RwLock max reads (#3644)sync_scope for LocalKey (#3612)noalias attributes on intrusive linked list (#3654)JoinHandle::abort() when called from other threads (#3672)oneshot::try_recv (#3674)Semaphore permit overflow calculation (#3644)Reverted: run current_thread inside LocalSet ([#4027])
Reverted: run current_thread inside LocalSet ([#4027])
macros: run current_thread inside LocalSet ([#4027])
block_on future (#3582)EnterGuard with must_use (#3609)macros: don't trigger clippy::unwrap_used ([#3926])
clippy::unwrap_used (#3926)unconstrained() opt-out (#3547)into_std for net types without it (#3509)same_channel method to mpsc::Sender (#3532){try_,}acquire_many_owned to Semaphore (#3535)RwLockWriteGuard::map and RwLockWriteGuard::try_map (#3348)oneshot::Receiver::close after successful try_recv (#3552)timeout(Duration::MAX) (#3551)read_until (#3536)AsyncRead::poll_read doc (#3557)UdpSocket splitting doc (#3517)LocalSet on new_current_thread (#3508)join_all for Barrier (#3514)oneshot (#3592)notify to notify_one (#3526)Sleep doc (#3515)interval.rs and time/mod.rs docs (#3533)macros: forward input arguments in #[tokio::test] ([#3691])
Signal::poll_recv method public (#3383)test-util paused time fully deterministic (#3492)add start_paused option to macros ([#3492])
start_paused option to macros ([#3492])try_read_buf and try_recv_buf (#3351)Sender::try_reserve function (#3418)RwLock try_read and try_write methods (#3400)ReadBuf::inner_mut (#3443)select! error message (#3352)read_to_end (#3426)Stream wrappers in tokio-stream (#3343)test-util feature is not enabled with full (#3397)AsyncFd docs about changes of the inner fd (#3430)Sleep is not Unpin (#3457)PollSemaphore (#3456)LocalSet example (#3438)mpsc documentation (#3458)- track tokio 1.0 release.
tokio 1.0 release.Commit to the API and long-term support.
watch (#3234).AsyncFd::with_io() to try_io() (#3306)*Ext traits in favor of conditionally defining the fn (#3264).Sleep is !Unpin (#3278).SocketAddr by value (#3125).TcpStream::poll_peek takes ReadBuf (#3259).runtime::Builder::max_threads() to max_blocking_threads() (#3287).current_thread runtime when calling time::pause() (#3289).tokio::prelude (#3299).AsyncFd::with_poll() (#3306).{Tcp,Unix}Stream::shutdown() in favor of AsyncWrite::shutdown() (#3298).tokio-stream until Stream is added to
std (#3277).try_recv() due to unexpected behavior (#3263).tracing-core is not 1.0 yet (#3266).poll_* fns to DirEntry (#3308).poll_* fns to io::Lines, io::Split (#3308)._mut method variants to AsyncFd (#3304).poll_* fns to UnixDatagram (#3223).UnixStream readiness and non-blocking ops (#3246).UnboundedReceiver::blocking_recv() (#3262).watch::Sender::borrow() (#3269).Semaphore::close() (#3065).poll_recv fns to mpsc::Receiver, mpsc::UnboundedReceiver (#3308).poll_tick fn to time::Interval (#3316).Adds AsyncFd as a replacement for v0.2's PollEvented.
fix incorrect docs regarding max_threads option ([#3038])
max_threads option ([#3038])This release fixes an use-after-free in the IO driver. Additionally, the read_buf
and write_buf methods have been added back to the IO traits, as the bytes crate
is now on track to reach version 1.0 together with Tokio.
options are renamed to track tokio runtime builder fn names.
tokio 0.3 release.tokio runtime builder fn names.#[tokio::main] macro requires rt-multi-thread when no flavor is specified.This represents a 1.0 beta release. APIs are polished and future-proofed. APIs not included for 1.0 stabilization have been removed.
Biggest changes are:
rt-core and rt-util are combined to rtrt-threaded is renamed to rt-multi-thread to match builder APItcp, udp, uds, dns are combined to net.parking_lot is included with fullAsyncRead trait now takes ReadBuf in order to safely handle reading
into uninitialized memory (#2758).Runtime::block_on now takes &self (#2782).watch reworked to decouple receiving a change notification from
receiving the value (#2814, #2806).Notify::notify is renamed to notify_one (#2822).Child::kill is now an async fn that cleans zombies (#2823).const fn constructors as possible (#2833, #2790)&self (#2828, #2919, #2934).mpsc channel supports send with &self (#2861).delay_for and delay_until to sleep and sleep_until (#2826).mio 0.7 (#2893).AsyncSeek trait is tweaked (#2885).File operations take &self (#2930).#[tokio::main] macro polish (#2876)Runtime::enter uses an RAII guard instead of a closure (#2954).from_std function on all sockets no longer sets socket into non-blocking mode (#2893)map function to lock guards (#2445).blocking_recv and blocking_send fns to mpsc for use outside of Tokio (#2685).Builder::thread_name_fn for configuring thread names (#1921).FromRawFd and FromRawHandle for File (#2792).Child::wait and Child::try_wait (#2796).task::JoinHandle::abort forcibly cancels a spawned task (#2474).RwLock write guard to read guard downgrading (#2733).poll_* functions that take &self to all net types (#2845)get_mut() for Mutex, RwLock (#2856).mpsc::Sender::closed() waits for Receiver half to close (#2840).mpsc::Sender::is_closed() returns true if Receiver half is closed (#2726).iter and iter_mut to StreamMap (#2890).AsRawSocket on windows (#2911).TcpSocket creates a socket without binding or listening (#2920).AsyncRead, AsyncWrite traits (#2882).mio is removed from the public API. PollEvented and Registration are
removed (#2893).bytes from public API. Buf and BufMut implementation are
removed (#2908).DelayQueue is moved to tokio-util (#2897).stdout and stderr buffering on windows (#2734).fs::File::seek API regression ([#1991]).
fs::File::seek API regression (#1991).### Fixed - doc improvements ([#2225]).
io::AsyncSeek trait (#1924).Mutex::try_lock (#1939)mpsc::Receiver::try_recv and mpsc::UnboundedReceiver::try_recv (#1939).writev support for TcpStream (#1956).time::throttle for throttling streams (#1949).Stream for time::DelayQueue (#1975).sync::broadcast provides a fan-out channel (#1943).sync::Semaphore provides an async semaphore (#1973).stream::StreamExt provides stream utilities (#1962).sync::MutexGuard debug output (#1961).runtime::Builder::core_threads and
runtime::Builder::max_threads. runtime::Builder::num_threads is
deprecated (#1977).generics on #[tokio::main] function ([#2177]).
#[tokio::main] function ([#2177]).tokio::select! ([#2152]).sync::Mutex deadlock when lock() future is dropped early (#1898).### Fixed - Revert breaking change.
AsyncReadExt and AsyncWriteExt (#1863).read_buf / write_buf for reading / writing Buf / BufMut (#1881).TcpStream::poll_peek - pollable API for performing TCP peek (#1864).sync::oneshot::error::TryRecvError provides variants to detect the error
kind (#1874).LocalSet::block_on accepts !'static task (#1882).task::JoinError is now Sync (#1888).tokio::time::Instant and
std::time::Instant (#1904).General refactoring and inclusion of additional runtime options ([#2022] and [#2038])
basic_scheduler (#1861).spawn panic message to specify that a task scheduler is required (#1839).runtime::Builder to include a task scheduler (#1841).LocalSet (#1843).Builder::{basic, threaded}_scheduler (#1858).Stream for signal::unix::Signal (#1849).signal::ctrl_c and signal::unix::Signal (#1854).signal::unix::Signal::{recv, poll_recv} and signal::windows::CtrlBreak::{recv, poll_recv} (#1854).File::into_std and File::try_into_std methods (#1856).inherit visibility when wrapping async fn ([#1954]).
[#1954]: https://github.com/tokio-rs/tokio/pull/1954 [#2022]: https://github.com/tokio-rs/tokio/pull/2022 [#2038]: https://github.com/tokio-rs/tokio/p
A major breaking change. Most implementation and APIs have changed one way or another. This changelog entry contains a highlight
async / await.tokio-* crates are collapsed into this crate.tokio::spawn returns a JoinHandle.bytes 0.5tokio::codec is moved to tokio-util.timer and net drivers are removed, use Runtime insteadcurrent_thread runtime is removed, use tokio::runtime::Runtime with
basic_scheduler instead.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →