tokio
An event-driven, non-blocking I/O platform for writing asynchronous I/O backed applications.
1.53.1
900M downloads/mo
#62 most downloaded on crates.io
tokio-rs/tokio
What this package is like to depend on
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 173 of 184 stable releases
5 versions withdrawn
withdrawn after publishing
10 years old
195 releases · first in 2016
21 releases in the last 12 months
see the full history below
Release timeline
195 releases · Jul 2016 to Jul 2026Releases
latest 60 of 195-
1.53.120 Jul 2026Release notes
Open source →1.53.1 (July 20th, 2026)
Fixed
- signal: restore MSRV by removing
OnceLock::waitfrom the Windows handler (#8300)
Fixed (unstable)
- time: fix alt timer cancellation and insertion race (#8252)
Documented
- runtime: remove dead link definition in Runtime::block_on (#8301)
Release notes
Open source →Fixed
- signal: restore MSRV by removing
OnceLock::waitfrom the Windows handler (#8300)
Fixed (unstable)
- time: fix alt timer cancellation and insertion race (#8252)
Documented
- runtime: remove dead link definition in Runtime::block_on (#8301)
- signal: restore MSRV by removing
-
1.53.017 Jul 2026Release notes
Open source →1.53.0 (July 17th, 2026)
Added
- fs: implement
From<OwnedFd>andFrom<OwnedHandle>forFile(#8266) - metrics: add task schedule latency metric (#7986)
- net: add
SocketAddrmethods to Unix sockets (#8144)
Changed
- io: add
#[inline]to IO trait impls for in-memory types (#8242) - net: implement UCred::pid on FreeBSD (#8086)
- net: support Nuttx target os (#8259)
- signal: refactor global variables on Windows (#8231)
- sync:
mpsc::{Receiver,UnboundedReceiver}now drops waker on drop, even if there are still senders (#8095) - taskdump: support taskdumps on s390x (#8192)
- time: add
#[track_caller]totimeout_at()(#8077) - time: consolidate mutex locks on spurious poll (#8124)
- time: defer waker clone on spurious poll (#8107)
- time: move lazy-registration state into
Sleep(#8132) - tracing: remove unnecessary span clone (#8126)
Fixed
- io: do not treat zero-length reads as EOF in
Chain(#8251) - net: use getpeereid for QNX peer credentials (#8270)
- runtime: avoid illegal state in
FastRand(#8078) - sync: wake mpsc receiver when a queued
reserve[_many]returns permits (#8260) - taskdump: skip double wake on
Trace::capture/Trace::trace_with(#8043) - time: avoid stack overflow in runtime constructor (#8093)
- time (alt timer): ensure timers stay in the same runtime after
.reset()(#8169)
IO uring (unstable)
- fs: use io-uring for
fs::try_exists(#8080) - fs: use io-uring for renaming files (#7800)
- rt: flush io-uring CQE in case of CQE overflow (#8277)
Documented
- docs: clarify cancel safety wording (#8181)
- fs: clarify
create_dir_allsucceeds if path exists (#8149) - io: add warning about stdout reordering with multiple handles (#8276)
- net: document pipe
try_read*/try_write*readiness behavior (#8032) - runtime: document interaction with fork() (#8202)
- sync: clarify broadcast lagging semantics (#8239)
- sync: document memory ordering guarantees for Semaphore (#8119)
- task: explain why
yield_nowdefers its waker (#8254) - time: add panic docs to
timeout_at()(#8077) - time: fix reversed poll order in timeout doc (#8214)
Release notes
Open source →Added
- fs: implement
From<OwnedFd>andFrom<OwnedHandle>forFile(#8266) - metrics: add task schedule latency metric (#7986)
- net: add
SocketAddrmethods to Unix sockets (#8144)
Changed
- io: add
#[inline]to IO trait impls for in-memory types (#8242) - net: implement UCred::pid on FreeBSD (#8086)
- net: support Nuttx target os (#8259)
- signal: refactor global variables on Windows (#8231)
- sync:
mpsc::{Receiver,UnboundedReceiver}now drops waker on drop, even if there are still senders (#8095) - taskdump: support taskdumps on s390x (#8192)
- time: add
#[track_caller]totimeout_at()(#8077) - time: consolidate mutex locks on spurious poll (#8124)
- time: defer waker clone on spurious poll (#8107)
- time: move lazy-registration state into
Sleep(#8132) - tracing: remove unnecessary span clone (#8126)
Fixed
- io: do not treat zero-length reads as EOF in
Chain(#8251) - net: use getpeereid for QNX peer credentials (#8270)
- runtime: avoid illegal state in
FastRand(#8078) - sync: wake mpsc receiver when a queued
reserve[_many]returns permits (#8260) - taskdump: skip double wake on
Trace::capture/Trace::trace_with(#8043) - time: avoid stack overflow in runtime constructor (#8093)
- time (alt timer): ensure timers stay in the same runtime after
.reset()(#8169)
IO uring (unstable)
- fs: use io-uring for
fs::try_exists(#8080) - fs: use io-uring for renaming files (#7800)
- rt: flush io-uring CQE in case of CQE overflow (#8277)
Documented
- docs: clarify cancel safety wording (#8181)
- fs: clarify
create_dir_allsucceeds if path exists (#8149) - io: add warning about stdout reordering with multiple handles (#8276)
- net: document pipe
try_read*/try_write*readiness behavior (#8032) - runtime: document interaction with fork() (#8202)
- sync: clarify broadcast lagging semantics (#8239)
- sync: document memory ordering guarantees for Semaphore (#8119)
- task: explain why
yield_nowdefers its waker (#8254) - time: add panic docs to
timeout_at()(#8077) - time: fix reversed poll order in timeout doc (#8214)
- fs: implement
-
1.52.416 Jul 2026Release notes
Open source →1.52.4 (July 16th, 2026)
Fixed
- runtime: don't skip the driver when
before_parkschedules work (#8222)
Fixed (unstable)
- taskdump: remove crate disambiguators from output (#8264)
Release notes
Open source →Fixed
- runtime: don't skip the driver when
before_parkschedules work ([#8222])
Fixed (unstable)
- taskdump: remove crate disambiguators from output (#8264)
- runtime: don't skip the driver when
-
1.52.308 May 2026Release notes
Open source →Fixed
- sync: fix underflow in mpsc channel
len()([#8062]) - sync: notify receivers in mpsc
OwnedPermit::release()method ([#8075]) - sync: require that an
RwLockhasmax_readers != 0([#8076]) - sync: return
Emptyfromtry_recv()when mpsc is closed with outstanding permits ([#8074])
- sync: fix underflow in mpsc channel
-
1.52.204 May 2026Release notes
Open source →This release reverts the LIFO slot stealing change introduced in 1.51.0 ([#7431]), due to [its performance impact][#8065]. ([#8100])
-
1.52.116 Apr 2026Release notes
Open source →Fixed
- runtime: revert #7757 to fix a regression that causes
spawn_blockingto hang (#8057)
- runtime: revert #7757 to fix a regression that causes
-
1.52.014 Apr 2026Release notes
Open source →Added
- io:
AioSource::register_borrowedfor I/O safety support (#7992) - net: add
try_iofunction tounix::pipesender and receiver types (#8030)
Added (unstable)
- runtime:
Builder::enable_eager_driver_handoffsetting enable eager hand off of the I/O and time drivers before polling tasks (#8010) - taskdump: add
trace_with()for customized task dumps (#8025) - taskdump: allow
impl FnMut()intrace_withinstead of justfn()(#8040) - fs: support
io_uringinAsyncReadforFile(#7907)
Changed
- runtime: improve
spawn_blockingscalability with sharded queue (#7757) - runtime: use
compare_exchange_weak()in worker queue (#8028)
Fixed
- runtime: overflow second half of tasks when local queue is filled instead of first half (#8029)
Documented
- io:
-
1.51.416 Jul 2026Release notes
Open source →1.51.4 (July 16th, 2026)
Fixed
- runtime: don't skip the driver when
before_parkschedules work (#8222)
Release notes
Open source →Fixed
- runtime: don't skip the driver when
before_parkschedules work (#8222)
- runtime: don't skip the driver when
-
1.51.308 May 2026Release notes
Open source →Fixed
- sync: fix underflow in mpsc channel
len()([#8062]) - sync: notify receivers in mpsc
OwnedPermit::release()method ([#8075]) - sync: require that an
RwLockhasmax_readers != 0([#8076]) - sync: return
Emptyfromtry_recv()when mpsc is closed with outstanding permits ([#8074])
- sync: fix underflow in mpsc channel
-
1.51.204 May 2026Release notes
Open source →This release reverts the LIFO slot stealing change introduced in 1.51.0 ([#7431]), due to its performance impact. (#8100)
-
1.51.108 Apr 2026Release notes
Open source →Fixed
- sync: fix semaphore reopens after forget (#8021)
- net: surface errors from
SO_ERRORonrecvfor UDP sockets on Linux (#8001)
Fixed (unstable)
-
1.51.003 Apr 2026Release notes
Open source →Added
- net: implement
get_peer_credon Hurd (#7989) - runtime: add
tokio::runtime::worker_index()(#7921) - runtime: add runtime name (#7924)
- runtime: stabilize
LocalRuntime(#7557) - wasm: add wasm32-wasip2 networking support (#7933)
Changed
- runtime: steal tasks from the LIFO slot (#7431)
Fixed
- net: implement
-
1.50.003 Mar 2026Release notes
Open source →Added
Changed
- io: add optimizer hint that
memchrreturns in-bounds pointer (#7792) - io: implement vectored writes for
write_buf(#7871) - runtime: panic when
event_intervalis set to 0 (#7838) - runtime: shorten default thread name to fit in Linux limit (#7880)
- signal: remember the result of
SetConsoleCtrlHandler(#7833) - signal: specialize windows
Registry(#7885)
Fixed
- io: always cleanup
AsyncFdregistration list on deregister (#7773) - macros: remove (most) local
usedeclarations intokio::select!(#7929) - net: fix
GET_BUF_SIZEconstant fortarget_os = "android"(#7889) - runtime: avoid redundant unpark in current_thread scheduler (#7834)
- runtime: don't park in
current_threadifbefore_parkdefers waker (#7835) - io: fix write readiness on ESP32 on short writes (#7872)
- runtime: wake deferred tasks before entering
block_in_place(#7879) - sync: drop rx waker when oneshot receiver is dropped (#7886)
- runtime: fix double increment of
num_idle_threadson shutdown (#7910, #7918, #7922)
Unstable
- fs: check for io-uring opcode support (#7815)
- runtime: avoid lock acquisition after uring init (#7850)
Documented
- docs: update outdated unstable features section (#7839)
- io: clarify the behavior of
AsyncWriteExt::shutdown()(#7908) - io: explain how to flush stdout/stderr (#7904)
- io: fix incorrect and confusing
AsyncWritedocumentation (#7875) - rt: clarify the documentation of
Runtime::spawn(#7803) - rt: fix missing quotation in docs (#7925)
- runtime: correct the default thread name in docs (#7896)
- runtime: fix
event_intervaldoc (#7932) - sync: clarify RwLock fairness documentation (#7919)
- sync: clarify that
recvreturnsNoneonce closed and no more messages (#7920) - task: clarify when to use
spawn_blockingvs dedicated threads (#7923) - task: doc that task drops before
JoinHandlecompletion (#7825) - signal: guarantee that listeners never return
None(#7869) - task: fix task module feature flags in docs (#7891)
- task: fix two typos (#7913)
- task: improve the docs of
Builder::spawn_local(#7828) - time: add docs about auto-advance and when to use sleep (#7858)
- util: fix typo in docs (#7926)
- io: add optimizer hint that
-
1.49.003 Jan 2026Release notes
Open source →Added
- net: add support for
TCLASSoption on IPv6 (#7781) - runtime: stabilize
runtime::id::Id(#7125) - task: implement
ExtendforJoinSet(#7195) - task: stabilize the
LocalSet::id()(#7776)
Changed
- net: deprecate
{TcpStream,TcpSocket}::set_linger(#7752)
Fixed
- macros: fix the hygiene issue of
join!andtry_join!(#7766) - runtime: revert "replace manual vtable definitions with Wake" (#7699)
- sync: return
TryRecvError::DisconnectedfromReceiver::try_recvafterReceiver::close(#7686) - task: remove unnecessary trait bounds on the
Debugimplementation (#7720)
Unstable
- fs: handle
EINTRinfs::writefor io-uring (#7786) - fs: support io-uring with
tokio::fs::read(#7696) - runtime: disable io-uring on
EPERM(#7724) - time: add alternative timer for better multicore scalability (#7467)
Documented
- docs: fix a typos in
bounded.rsandpark.rs(#7817) - io: add
SyncIoBridgecross-references tocopyandcopy_buf(#7798) - io: doc that
AsyncWritedoes not inherit fromstd::io::Write(#7705) - metrics: clarify that
num_alive_tasksis not strongly consistent (#7614) - net: clarify the cancellation safety of the
TcpStream::peek(#7305) - net: clarify the drop behavior of
unix::OwnedWriteHalf(#7742) - net: clarify the platform-dependent backlog in
TcpSocketdocs (#7738) - runtime: mention
LocalRuntimeinnew_current_threaddocs (#7820) - sync: add missing period to
mpsc::Sender::try_senddocs (#7721) - sync: clarify the cancellation safety of
oneshot::Receiver(#7780) - sync: improve the docs for the
errorsof mpsc (#7722) - task: add example for
spawn_localusage on local runtime (#7689)
- net: add support for
-
1.48.014 Oct 2025Release notes
Open source →The MSRV is increased to 1.71.
Added
- fs: add
File::max_buf_size(#7594) - io: export
ChainofAsyncReadExt::chain(#7599) - net: add
SocketAddr::as_abstract_name(#7491) - net: add
TcpStream::quickackandTcpStream::set_quickack(#7490) - net: implement
AsRef<Self>forTcpStreamandUnixStream(#7573) - task: add
LocalKey::try_get(#7666) - task: implement
Ordfortask::Id(#7530)
Changed
- deps: bump windows-sys to version 0.61 (#7645)
- fs: preserve
max_buf_sizewhen cloning aFile(#7593) - macros: suppress
clippy::unwrap_in_resultin#[tokio::main](#7651) - net: remove
PollEventednoise from Debug formats (#7675) - process: upgrade
Command::spawn_withto useFnOnce(#7511) - sync: remove inner mutex in
SetOnce(#7554) - sync: use
UnsafeCell::get_mutinMutex::get_mutandRwLock::get_mut(#7569) - time: reduce the generated code size of
Timeout<T>::poll(#7535)
Fixed
- macros: fix hygiene issue in
join!andtry_join!(#7638) - net: fix copy/paste errors in udp peek methods (#7604)
- process: fix error when runtime is shut down on nightly-2025-10-12 (#7672)
- runtime: use release ordering in
wake_by_ref()even if already woken (#7622) - sync: close the
broadcast::Senderinbroadcast::Sender::new()(#7629) - sync: fix implementation of unused
RwLock::try_*methods (#7587)
Unstable
- tokio: use cargo features instead of
--cfgflags fortaskdumpandio_uring(#7655, #7621) - fs: support
io_uringinfs::write(#7567) - fs: support
io_uringwithFile::open()(#7617) - fs: support
io_uringwithOpenOptions(#7321) - macros: add
localruntime flavor (#7375, #7597)
Documented
- io: clarify the zero capacity case of
AsyncRead::poll_read(#7580) - io: fix typos in the docs of
AsyncFdreadiness guards (#7583) - net: clarify socket gets closed on drop (#7526)
- net: clarify the behavior of
UCred::pid()on Cygwin (#7611) - net: clarify the supported platform of
set_reuseport()andreuseport()(#7628) - net: qualify that
SO_REUSEADDRis only set on Unix (#7533) - runtime: add guide for choosing between runtime types (#7635)
- runtime: clarify the behavior of
Handle::block_on(#7665) - runtime: clarify the edge case of
Builder::global_queue_interval()(#7605) - sync: clarify bounded channel panic behavior (#7641)
- sync: clarify the behavior of
tokio::sync::watch::Receiver(#7584) - sync: document cancel safety on
SetOnce::wait(#7506) - sync: fix the docs of
parking_lotfeature flag (#7663) - sync: improve the docs of
UnboundedSender::send(#7661) - sync: improve the docs of
sync::watch(#7601) - sync: reword allocation failure paragraph in broadcast docs (#7595)
- task: clarify the behavior of several
spawn_localmethods (#7669) - task: clarify the task ID reuse guarantees (#7577)
- task: improve the example of
poll_proceed(#7586)
- fs: add
-
1.47.507 May 2026 -
1.47.402 Apr 2026Release notes
Open source →Fixed
- sync: fix panic in
Chan::recv_manywhen called with non-empty vector on closed channel (#7991)
- sync: fix panic in
-
1.47.302 Jan 2026Release notes
Open source →Fixed
- sync: return
TryRecvError::DisconnectedfromReceiver::try_recvafterReceiver::close([#7686])
- sync: return
-
1.47.214 Oct 2025 -
1.47.101 Aug 2025Release notes
Open source →Fixed
- process: fix panic from spurious pidfd wakeup ([#7494])
- sync: fix broken link of Python
asyncio.EventinSetOncedocs (#7485)
-
1.47.026 Jul 2025Release notes
Open source →This release adds
poll_proceedandcooperativeto thecoopmodule for cooperative scheduling, addsSetOnceto thesyncmodule which provides similar functionality to [std::sync::OnceLock], and adds a new methodsync::Notify::notified_owned()which returns anOwnedNotifiedwithout a lifetime parameter.Added
- coop: add
cooperativeandpoll_proceed(#7405) - sync: add
SetOnce(#7418) - sync: add
sync::Notify::notified_owned()(#7465)
Changed
- deps: upgrade windows-sys 0.52 → 0.59 (#7117)
- deps: update to socket2 v0.6 (#7443)
- sync: improve
AtomicWaker::wakeperformance (#7450)
Documented
- coop: add
-
1.46.104 Jul 2025Release notes
Open source →This release fixes incorrect spawn locations in runtime task hooks for tasks spawned using
tokio::spawnrather thanRuntime::spawn. This issue only affected the spawn location inTaskMeta::spawned_at, and did not affect task locations in Tracing events.Unstable
- runtime: add
TaskMeta::spawned_attracking where a task was spawned (#7440)
- runtime: add
-
1.46.002 Jul 2025Release notes
Open source →Fixed
- net: fixed
TcpStream::shutdownincorrectly returning an error on macOS (#7290)
Added
- sync:
mpsc::OwnedPermit::{same_channel, same_channel_as_sender}methods (#7389) - macros:
biasedoption forjoin!andtry_join!, similar toselect!(#7307) - net: support for cygwin (#7393)
- net: support
pipe::OpenOptions::read_writeon Android (#7426) - net: add
Cloneimplementation fornet::unix::SocketAddr(#7422)
Changed
- runtime: eliminate unnecessary lfence while operating on
queue::Local<T>(#7340) - task: disallow blocking in
LocalSet::{poll,drop}(#7372)
Unstable
- runtime: add
TaskMeta::spawn_locationtracking where a task was spawned (#7417) - runtime: removed borrow from
LocalOptionsparameter toruntime::Builder::build_local(#7346)
Documented
- io: clarify behavior of seeking when
start_seekis not used (#7366) - io: document cancellation safety of
AsyncWriteExt::flush(#7364) - net: fix docs for
recv_buffer_sizemethod (#7336) - net: fix broken link of
RawFdinTcpSocketdocs (#7416) - net: update
AsRawFddoc link to current Rust stdlib location (#7429) - readme: fix double period in reactor description (#7363)
- runtime: add doc note that
on_*_task_pollis unstable (#7311) - sync: update broadcast docs on allocation failure (#7352)
- time: add a missing panic scenario of
time::advance(#7394)
- net: fixed
-
1.45.124 May 2025Release notes
Open source →This fixes a regression on the wasm32-unknown-unknown target, where code that previously did not panic due to calls to
Instant::now()started failing. This is due to the stabilization of the first time-based metric.Fixed
- Disable time-based metrics on wasm32-unknown-unknown (#7322)
-
1.45.006 May 2025Release notes
Open source →Added
- metrics: stabilize
worker_total_busy_duration,worker_park_count, andworker_unpark_count(#6899, #7276) - process: add
Command::spawn_with(#7249)
Changed
- io: do not require
Unpinfor some trait impls (#7204) - rt: mark
runtime::Handleas unwind safe (#7230) - time: revert internal sharding implementation (#7226)
Unstable
- rt: remove alt multi-threaded runtime (#7275)
- metrics: stabilize
-
1.44.205 Apr 2025Release notes
Open source →This release fixes a soundness issue in the broadcast channel. The channel accepts values that are
Sendbut!Sync. Previously, the channel calledclone()on these values without synchronizing. This release fixes the channel by synchronizing calls to.clone()(Thanks Austin Bonander for finding and reporting the issue).Fixed
- sync: synchronize
clone()call in broadcast channel (#7232)
- sync: synchronize
-
1.44.113 Mar 2025 -
1.44.007 Mar 2025Release notes
Open source →This release changes the
from_stdmethod on sockets to panic if a blocking socket is provided. We determined this change is not a breaking change as Tokio is not intended to operate using blocking sockets. Doing so results in runtime hangs and should be considered a bug. Accidentally passing a blocking socket to Tokio is one of the most common user mistakes. If this change causes an issue for you, please comment on #7172.Added
- coop: add
task::coopmodule (#7116) - process: add
Command::get_kill_on_drop()(#7086) - sync: add
broadcast::Sender::closed(#6685, #7090) - sync: add
broadcast::WeakSender(#7100) - sync: add
oneshot::Receiver::is_empty()(#7153) - sync: add
oneshot::Receiver::is_terminated()(#7152)
Fixed
- fs: empty reads on
Fileshould not start a background read (#7139) - process: calling
start_killon exited child should not fail (#7160) - signal: fix
CTRL_CLOSE,CTRL_LOGOFF,CTRL_SHUTDOWNon windows (#7122) - sync: properly handle panic during mpsc drop (#7094)
Changes
- runtime: clean up magic number in registration set (#7112)
- coop: make coop yield using waker defer strategy (#7185)
- macros: make
select!budget-aware (#7164) - net: panic when passing a blocking socket to
from_std(#7166) - io: clean up buffer casts (#7142)
Changes to unstable APIs
- rt: add before and after task poll callbacks (#7120)
- tracing: make the task tracing API unstable public (#6972)
Documented
- docs: fix nesting of sections in top-level docs (#7159)
- fs: rename symlink and hardlink parameter names (#7143)
- io: swap reader/writer in simplex doc test (#7176)
- macros: docs about
select!alternatives (#7110) - net: rename the argument for
send_to(#7146) - process: add example for reading
Childstdout (#7141) - process: clarify
Child::killbehavior (#7162) - process: fix grammar of the
ChildStdinstruct doc comment (#7192) - runtime: consistently use
worker_threadsinstead ofcore_threads(#7186)
- coop: add
-
1.43.402 Jan 2026Release notes
Open source →Fixed
- sync: return
TryRecvError::DisconnectedfromReceiver::try_recvafterReceiver::close(#7686)
- sync: return
-
1.43.314 Oct 2025 -
1.43.201 Aug 2025 -
1.43.104 Apr 2025Release notes
Open source →This release fixes a soundness issue in the broadcast channel. The channel accepts values that are
Sendbut!Sync. Previously, the channel calledclone()on these values without synchronizing. This release fixes the channel by synchronizing calls to.clone()(Thanks Austin Bonander for finding and reporting the issue).Fixed
- sync: synchronize
clone()call in broadcast channel (#7232)
- sync: synchronize
-
1.43.008 Jan 2025Release notes
Open source →Added
- net: add
UdpSocket::peekmethods (#7068) - net: add support for Haiku OS (#7042)
- process: add
Command::into_std()(#7014) - signal: add
SignalKind::infoon illumos (#6995) - signal: add support for realtime signals on illumos (#7029)
Fixed
- io: don't call
set_lenbefore initializing vector inBlocking(#7054) - macros: suppress
clippy::needless_returnin#[tokio::main](#6874) - runtime: fix thread parking on WebAssembly (#7041)
Changes
- chore: use unsync loads for
unsync_load(#7073) - io: use
Buf::put_bytesinRepeatread impl (#7055) - task: drop the join waker of a task eagerly (#6986)
Changes to unstable APIs
- metrics: improve flexibility of H2Histogram Configuration (#6963)
- taskdump: add accessor methods for backtrace (#6975)
Documented
- net: add
-
1.42.108 Apr 2025Release notes
Open source →This release fixes a soundness issue in the broadcast channel. The channel accepts values that are
Sendbut!Sync. Previously, the channel calledclone()on these values without synchronizing. This release fixes the channel by synchronizing calls to.clone()(Thanks Austin Bonander for finding and reporting the issue).Fixed
- sync: synchronize
clone()call in broadcast channel (#7232)
- sync: synchronize
-
1.42.003 Dec 2024Release notes
Open source →Added
- io: add
AsyncFd::{try_io, try_io_mut}(#6967)
Fixed
- io: avoid
ptr->ref->ptrroundtrip in RegistrationSet (#6929) - runtime: do not defer
yield_nowinsideblock_in_place(#6999)
Changes
- io: simplify io readiness logic (#6966)
Documented
- io: add
-
1.41.107 Nov 2024 -
1.41.022 Oct 2024Release notes
Open source →Added
- metrics: stabilize
global_queue_depth(#6854, #6918) - net: add conversions for unix
SocketAddr(#6868) - sync: add
watch::Sender::sender_count(#6836) - sync: add
mpsc::Receiver::blocking_recv_many(#6867) - task: stabilize
Idapis (#6793, #6891)
Added (unstable)
- metrics: add H2 Histogram option to improve histogram granularity (#6897)
- metrics: rename some histogram apis (#6924)
- runtime: add
LocalRuntime(#6808)
Changed
- runtime: box futures larger than 16k on release mode (#6826)
- sync: add
#[must_use]toNotified(#6828) - sync: make
watchcooperative (#6846) - sync: make
broadcast::Receivercooperative (#6870) - task: add task size to tracing instrumentation (#6881)
- wasm: enable
cfg_fsforwasitarget (#6822)
Fixed
- net: fix regression of abstract socket path in unix socket (#6838)
Documented
- io: recommend
OwnedFdwithAsyncFd(#6821) - io: document cancel safety of
AsyncFdmethods (#6890) - macros: render more comprehensible documentation for
joinandtry_join(#6814, #6841) - net: fix swapped examples for
TcpSocket::set_nodelayandTcpSocket::nodelay(#6840) - sync: document runtime compatibility (#6833)
- metrics: stabilize
-
1.40.030 Aug 2024Release notes
Open source →Added
- io: add
util::SimplexStream(#6589) - process: stabilize
Command::process_group(#6731) - sync: add
{TrySendError,SendTimeoutError}::into_inner(#6755) - task: add
JoinSet::join_all(#6784)
Added (unstable)
- runtime: add
Builder::{on_task_spawn, on_task_terminate}(#6742)
Changed
- io: use vectored io for
write_all_bufwhen possible (#6724) - runtime: prevent niche-optimization to avoid triggering miri (#6744)
- sync: mark mpsc types as
UnwindSafe(#6783) - sync,time: make
SleepandBatchSemaphoreinstrumentation explicit roots (#6727) - task: use
NonZeroU64fortask::Id(#6733) - task: include panic message when printing
JoinError(#6753) - task: add
#[must_use]toJoinHandle::abort_handle(#6762) - time: eliminate timer wheel allocations (#6779)
Documented
- io: add
-
1.39.317 Aug 2024Release notes
Open source →This release fixes a regression where the unix socket api stopped accepting the abstract socket namespace. (#6772)
-
1.39.227 Jul 2024Release notes
Open source →This release fixes a regression where the
select!macro stopped accepting expressions that make use of temporary lifetime extension. (#6722) -
1.39.123 Jul 2024Release notes
Open source →This release reverts "time: avoid traversing entries in the time wheel twice" because it contains a bug. (#6715)
-
1.39.023 Jul 2024 withdrawnRelease notes
Open source →Yanked. Please use 1.39.1 instead.
- This release bumps the MSRV to 1.70. (#6645)
- This release upgrades to mio v1. (#6635)
- This release upgrades to windows-sys v0.52 (#6154)
Added
- io: implement
AsyncSeekforEmpty(#6663) - metrics: stabilize
num_alive_tasks(#6619, #6667) - process: add
Command::as_std_mut(#6608) - sync: add
watch::Sender::same_channel(#6637) - sync: add
{Receiver,UnboundedReceiver}::{sender_strong_count,sender_weak_count}(#6661) - sync: implement
Defaultforwatch::Sender(#6626) - task: implement
CloneforAbortHandle(#6621) - task: stabilize
consume_budget(#6622)
Changed
- io: improve panic message of
ReadBuf::put_slice()(#6629) - io: read during write in
copy_bidirectionalandcopy(#6532) - runtime: replace
num_cpuswithavailable_parallelism(#6709) - task: avoid stack overflow when passing large future to
block_on(#6692) - time: avoid traversing entries in the time wheel twice (#6584)
- time: support
IntoFuturewithtimeout(#6666) - macros: support
IntoFuturewithjoin!andselect!(#6710)
Fixed
- docs: fix docsrs builds with the fs feature enabled (#6585)
- io: only use short-read optimization on known-to-be-compatible platforms (#6668)
- time: fix overflow panic when using large durations with
Interval(#6612)
Added (unstable)
- macros: allow
unhandled_panicbehavior for#[tokio::main]and#[tokio::test](#6593) - metrics: add
spawned_tasks_count(#6114) - metrics: add
worker_park_unpark_count(#6696) - metrics: add worker thread id (#6695)
Documented
-
1.38.203 Apr 2025Release notes
Open source →This release fixes a soundness issue in the broadcast channel. The channel accepts values that are
Sendbut!Sync. Previously, the channel calledclone()on these values without synchronizing. This release fixes the channel by synchronizing calls to.clone()(Thanks Austin Bonander for finding and reporting the issue).Fixed
- sync: synchronize
clone()call in broadcast channel (#7232)
- sync: synchronize
-
1.38.116 Jul 2024Release notes
Open source →This release fixes the bug identified as (#6682), which caused timers not to fire when they should.
Fixed
- time: update
wake_upwhile holding all the locks of sharded time wheels (#6683)
- time: update
-
1.38.030 May 2024Release notes
Open source →This release marks the beginning of stabilization for runtime metrics. It stabilizes
RuntimeMetrics::worker_count. Future releases will continue to stabilize more metrics.Added
- fs: add
File::create_new(#6573) - io: add
copy_bidirectional_with_sizes(#6500) - io: implement
AsyncBufReadforJoin(#6449) - net: add Apple visionOS support (#6465)
- net: implement
CloneforNamedPipeInfo(#6586) - net: support QNX OS (#6421)
- sync: add
Notify::notify_last(#6520) - sync: add
mpsc::Receiver::{capacity,max_capacity}(#6511) - sync: add
splitmethod to the semaphore permit (#6472, #6478) - task: add
tokio::task::join_set::Builder::spawn_blocking(#6578) - wasm: support rt-multi-thread with wasm32-wasi-preview1-threads (#6510)
Changed
- macros: make
#[tokio::test]append#[test]at the end of the attribute list (#6497) - metrics: fix
blocking_threadscount (#6551) - metrics: stabilize
RuntimeMetrics::worker_count(#6556) - runtime: move task out of the
lifo_slotinblock_in_place(#6596) - runtime: panic if
global_queue_intervalis zero (#6445) - sync: always drop message in destructor for oneshot receiver (#6558)
- sync: instrument
Semaphorefor task dumps (#6499) - sync: use FIFO ordering when waking batches of wakers (#6521)
- task: make
LocalKey::getwork with Clone types (#6433) - tests: update nix and mio-aio dev-dependencies (#6552)
- time: clean up implementation (#6517)
- time: lazily init timers on first poll (#6512)
- time: remove the
true_whenfield inTimerShared(#6563) - time: use sharding for timer implementation (#6534)
Fixed
- taskdump: allow building taskdump docs on non-unix machines (#6564)
- time: check for overflow in
Interval::poll_tick(#6487) - sync: fix incorrect
is_emptyon mpsc block boundaries (#6603)
Documented
- fs: rewrite file system docs (#6467)
- io: fix
stdindocumentation (#6581) - io: fix obsolete reference in
ReadHalf::unsplit()documentation (#6498) - macros: render more comprehensible documentation for
select!(#6468) - net: add missing types to module docs (#6482)
- net: fix misleading
NamedPipeServerexample (#6590) - sync: add examples for
SemaphorePermit,OwnedSemaphorePermit(#6477) - sync: document that
Barrier::waitis not cancel safe (#6494) - sync: explain relation between
watch::Sender::{subscribe,closed}(#6490) - task: clarify that you can't abort
spawn_blockingtasks (#6571) - task: fix a typo in doc of
LocalSet::run_until(#6599) - time: fix test-util requirement for pause and resume in docs (#6503)
- fs: add
-
1.37.028 Mar 2024Release notes
Open source →Added
- fs: add
set_max_buf_sizetotokio::fs::File(#6411) - io: add
try_newandtry_with_interesttoAsyncFd(#6345) - sync: add
forget_permitsmethod to semaphore (#6331) - sync: add
is_closed,is_empty, andlento mpsc receivers (#6348) - sync: add a
rwlock()method to ownedRwLockguards (#6418) - sync: expose strong and weak counts of mpsc sender handles (#6405)
- sync: implement
Cloneforwatch::Sender(#6388) - task: add
TaskLocalFuture::take_value(#6340) - task: implement
FromIteratorforJoinSet(#6300)
Changed
- io: make
io::splituse a mutex instead of a spinlock (#6403)
Fixed
- docs: fix docsrs build without net feature (#6360)
- macros: allow select with only else branch (#6339)
- runtime: fix leaking registration entries when os registration fails (#6329)
Documented
- io: document cancel safety of
AsyncBufReadExt::fill_buf(#6431) - io: document cancel safety of
AsyncReadExt's primitive read functions (#6337) - runtime: add doc link from
Runtimeto#[tokio::main](#6366) - runtime: make the
enterexample deterministic (#6351) - sync: add Semaphore example for limiting the number of outgoing requests (#6419)
- sync: fix missing period in broadcast docs (#6377)
- sync: mark
mpsc::Sender::downgradewith#[must_use](#6326) - sync: reorder
const_newbeforenew_with(#6392) - sync: update watch channel docs (#6395)
- task: fix documentation links (#6336)
Changed (unstable)
- fs: add
-
1.36.002 Feb 2024Release notes
Open source →Added
- io: add
tokio::io::Join(#6220) - io: implement
AsyncWriteforEmpty(#6235) - net: add support for anonymous unix pipes (#6127)
- net: add
UnixSocket(#6290) - net: expose keepalive option on
TcpSocket(#6311) - sync: add
{Receiver,UnboundedReceiver}::poll_recv_many(#6236) - sync: add
Sender::{try_,}reserve_many(#6205) - sync: add
watch::Receiver::mark_unchanged(#6252) - task: add
JoinSet::try_join_next(#6280)
Changed
- io: make
copycooperative (#6265) - io: make
repeatandsinkcooperative (#6254) - io: simplify check for empty slice (#6293)
- process: use pidfd on Linux when available (#6152)
- sync: use AtomicBool in broadcast channel future (#6298)
Documented
- io: add
-
1.35.119 Dec 2023Release notes
Open source →This is a forward part of a change that was backported to 1.25.3.
Fixed
- io: add budgeting to
tokio::runtime::io::registration::async_io(#6221)
- io: add budgeting to
-
1.35.008 Dec 2023Release notes
Open source →Added
- net: add Apple watchOS support (#6176)
Changed
- io: drop the
Sizedrequirements fromAsyncReadExt.read_buf(#6169) - runtime: make
Runtimeunwind safe (#6189) - runtime: reduce the lock contention in task spawn (#6001)
- tokio: update nix dependency to 0.27.1 (#6190)
Fixed
- chore: make
--cfg docsrswork without net feature (#6166) - chore: use relaxed load for
unsync_loadon miri (#6179) - runtime: handle missing context on wake (#6148)
- taskdump: fix taskdump cargo config example (#6150)
- taskdump: skip notified tasks during taskdumps (#6194)
- tracing: avoid creating resource spans with current parent, use a None parent instead (#6107)
- tracing: make task span explicit root (#6158)
Documented
-
1.34.009 Nov 2023Release notes
Open source →Fixed
- io: allow
clear_readinessafter io driver shutdown (#6067) - io: fix integer overflow in
take(#6080) - io: fix I/O resource hang (#6134)
- sync: fix
broadcast::channellink (#6100)
Changed
- macros: use
::corequalified imports instead of::stdinsidetokio::testmacro (#5973)
Added
- io: allow
-
1.33.009 Oct 2023Release notes
Open source →Fixed
- io: mark
Interest::addwith#[must_use](#6037) - runtime: fix cache line size for RISC-V (#5994)
- sync: prevent lock poisoning in
watch::Receiver::wait_for(#6021) - task: fix
spawn_localsource location (#5984)
Changed
- sync: use Acquire/Release orderings instead of SeqCst in
watch(#6018)
Added
- fs: add vectored writes to
tokio::fs::File(#5958) - io: add
Interest::removemethod (#5906) - io: add vectored writes to
DuplexStream(#5985) - net: add Apple tvOS support (#6045)
- sync: add
?Sizedbound to{MutexGuard,OwnedMutexGuard}::map(#5997) - sync: add
watch::Receiver::mark_unseen(#5962, #6014, #6017) - sync: add
watch::Sender::new(#5998) - sync: add const fn
OnceCell::from_value(#5903)
Removed
- remove unused
statsfeature (#5952)
Documented
- add missing backticks in code examples (#5938, #6056)
- fix typos (#5988, #6030)
- process: document that
Child::waitis cancel safe (#5977) - sync: add examples for
Semaphore(#5939, #5956, #5978, #6031, #6032, #6050) - sync: document that
broadcastcapacity is a lower bound (#6042) - sync: document that
const_newis not instrumented (#6002) - sync: improve cancel-safety documentation for
mpsc::Sender::send(#5947) - sync: improve docs for
watchchannel (#5954) - taskdump: render taskdump documentation on docs.rs (#5972)
Unstable
- taskdump: fix potential deadlock (#6036)
- io: mark
-
1.32.119 Dec 2023Release notes
Open source →This is a forward part of a change that was backported to 1.25.3.
Fixed
- io: add budgeting to
tokio::runtime::io::registration::async_io(#6221)
- io: add budgeting to
-
1.32.016 Aug 2023Release notes
Open source →Fixed
- sync: fix potential quadratic behavior in
broadcast::Receiver(#5925)
Added
Unstable
- rt(alt): improve scalability of alt runtime as the number of cores grows (#5935)
- sync: fix potential quadratic behavior in
-
1.31.012 Aug 2023 -
1.30.009 Aug 2023Release notes
Open source →This release bumps the MSRV of Tokio to 1.63. (#5887)
Changed
- tokio: reduce LLVM code generation (#5859)
- io: support
--cfg mio_unsupported_force_poll_pollflag (#5881) - sync: make
const_newmethods always available (#5885) - sync: avoid false sharing in mpsc channel (#5829)
- rt: pop at least one task from inject queue (#5908)
Added
- sync: add
broadcast::Sender::new(#5824) - net: implement
UCredfor espidf (#5868) - fs: add
File::options()(#5869) - time: implement extra reset variants for
Interval(#5878) - process: add
{ChildStd*}::into_owned_{fd, handle}(#5899)
Removed
Documented
- sync: mention lagging in docs for
broadcast::send(#5820) - runtime: expand on sharing runtime docs (#5858)
- io: use vec in example for
AsyncReadExt::read_exact(#5863) - time: mark
Sleepas!Unpinin docs (#5916) - process: fix
raw_argnot showing up in docs (#5865)
Unstable
-
1.29.129 Jun 2023Release notes
Open source →Fixed
- rt: fix nesting two
block_in_placewith ablock_onbetween (#5837)
- rt: fix nesting two
-
1.29.027 Jun 2023Release notes
Open source →Technically a breaking change, the
Sendimplementation is removed fromruntime::EnterGuard. This change fixes a bug and should not impact most users.Breaking
- rt:
EnterGuardshould not beSend(#5766)
Fixed
- fs: reduce blocking ops in
fs::read_dir(#5653) - rt: fix possible starvation (#5686, #5712)
- rt: fix stacked borrows issue in
JoinSet(#5693) - rt: panic if
EnterGuarddropped incorrect order (#5772) - time: do not overflow to signal value (#5710)
- fs: wait for in-flight ops before cloning
File(#5803)
Changed
Added
- net: add uds doc alias for unix sockets (#5659)
- rt: add metric for number of tasks (#5628)
- sync: implement more traits for channel errors (#5666)
- net: add nodelay methods on TcpSocket (#5672)
- sync: add
broadcast::Receiver::blocking_recv(#5690) - process: add
raw_argmethod toCommand(#5704) - io: support PRIORITY epoll events (#5566)
- task: add
JoinSet::poll_join_next(#5721) - net: add support for Redox OS (#5790)
Unstable
- rt:
-
1.28.227 May 2023Release notes
Open source → -
1.28.110 May 2023Release notes
Open source →This release fixes a mistake in the build script that makes
AsFdimplementations unavailable on Rust 1.63. (#5677) -
1.28.025 Apr 2023Release notes
Open source →Added
- io: add
AsyncFd::async_io(#5542) - io: impl BufMut for ReadBuf (#5590)
- net: add
recv_bufforUdpSocketandUnixDatagram(#5583) - sync: add
OwnedSemaphorePermit::semaphore(#5618) - sync: add
same_channelto broadcast channel (#5607) - sync: add
watch::Receiver::wait_for(#5611) - task: add
JoinSet::spawn_blockingandJoinSet::spawn_blocking_on(#5612)
Changed
- deps: update windows-sys to 0.48 (#5591)
- io: make
read_to_endnot grow unnecessarily (#5610) - macros: make entrypoints more efficient (#5621)
- sync: improve Debug impl for
RwLock(#5647) - sync: reduce contention in
Notify(#5503)
Fixed
- net: support
get_peer_credon AIX (#5065) - sync: avoid deadlocks in
broadcastwith custom wakers (#5578)
Documented
- io: add