PackageTrack
Sign in Get early access

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 2026
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 195
  1. 1.53.1 20 Jul 2026
    Release notes

    1.53.1 (July 20th, 2026)

    Fixed

    • signal: restore MSRV by removing OnceLock::wait from 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)
    Open source →
    Release notes

    Fixed

    • signal: restore MSRV by removing OnceLock::wait from 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)
    Open source →
  2. 1.53.0 17 Jul 2026
    Release notes

    1.53.0 (July 17th, 2026)

    Added

    • fs: implement From<OwnedFd> and From<OwnedHandle> for File (#8266)
    • metrics: add task schedule latency metric (#7986)
    • net: add SocketAddr methods 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] to timeout_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_all succeeds 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_now defers its waker (#8254)
    • time: add panic docs to timeout_at() (#8077)
    • time: fix reversed poll order in timeout doc (#8214)
    Open source →
    Release notes

    Added

    • fs: implement From<OwnedFd> and From<OwnedHandle> for File (#8266)
    • metrics: add task schedule latency metric (#7986)
    • net: add SocketAddr methods 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] to timeout_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_all succeeds 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_now defers its waker (#8254)
    • time: add panic docs to timeout_at() (#8077)
    • time: fix reversed poll order in timeout doc (#8214)
    Open source →
  3. 1.52.4 16 Jul 2026
    Release notes

    1.52.4 (July 16th, 2026)

    Fixed

    • runtime: don't skip the driver when before_park schedules work (#8222)

    Fixed (unstable)

    • taskdump: remove crate disambiguators from output (#8264)
    Open source →
    Release notes

    Fixed

    • runtime: don't skip the driver when before_park schedules work ([#8222])

    Fixed (unstable)

    • taskdump: remove crate disambiguators from output (#8264)
    Open source →
  4. 1.52.3 08 May 2026
    Release notes

    1.52.3 (May 8th, 2026)

    Fixed

    • sync: fix underflow in mpsc channel len() (#8062)
    • sync: notify receivers in mpsc OwnedPermit::release() method (#8075)
    • sync: require that an RwLock has max_readers != 0 (#8076)
    • sync: return Empty from try_recv() when mpsc is closed with outstanding permits (#8074)
    Open source →
    Release notes

    Fixed

    • sync: fix underflow in mpsc channel len() ([#8062])
    • sync: notify receivers in mpsc OwnedPermit::release() method ([#8075])
    • sync: require that an RwLock has max_readers != 0 ([#8076])
    • sync: return Empty from try_recv() when mpsc is closed with outstanding permits ([#8074])
    Open source →
  5. 1.52.2 04 May 2026
    Release notes

    This release reverts the LIFO slot stealing change introduced in 1.51.0 ([#7431]), due to [its performance impact][#8065]. ([#8100])

    Open source →
  6. 1.52.1 16 Apr 2026
    Release notes

    Fixed

    Open source →
  7. 1.52.0 14 Apr 2026
    Release notes

    Added

    • io: AioSource::register_borrowed for I/O safety support (#7992)
    • net: add try_io function to unix::pipe sender and receiver types (#8030)

    Added (unstable)

    • runtime: Builder::enable_eager_driver_handoff setting 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() in trace_with instead of just fn() (#8040)
    • fs: support io_uring in AsyncRead for File (#7907)

    Changed

    • runtime: improve spawn_blocking scalability 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

    • docs: fix typo in oneshot::Sender::send docs (#8026)
    • docs: hide #[tokio::main] attribute in the docs of sync::watch (#8035)
    • net: add docs on ConnectionRefused errors with UDP sockets (#7870)
    Open source →
  8. 1.51.4 16 Jul 2026
    Release notes

    1.51.4 (July 16th, 2026)

    Fixed

    • runtime: don't skip the driver when before_park schedules work (#8222)
    Open source →
    Release notes

    Fixed

    • runtime: don't skip the driver when before_park schedules work (#8222)
    Open source →
  9. 1.51.3 08 May 2026
    Release notes

    1.51.3 (May 8th, 2026)

    Fixed

    • sync: fix underflow in mpsc channel len() (#8062)
    • sync: notify receivers in mpsc OwnedPermit::release() method (#8075)
    • sync: require that an RwLock has max_readers != 0 (#8076)
    • sync: return Empty from try_recv() when mpsc is closed with outstanding permits (#8074)
    Open source →
    Release notes

    Fixed

    • sync: fix underflow in mpsc channel len() ([#8062])
    • sync: notify receivers in mpsc OwnedPermit::release() method ([#8075])
    • sync: require that an RwLock has max_readers != 0 ([#8076])
    • sync: return Empty from try_recv() when mpsc is closed with outstanding permits ([#8074])
    Open source →
  10. 1.51.2 04 May 2026
    Release notes

    This release reverts the LIFO slot stealing change introduced in 1.51.0 ([#7431]), due to its performance impact. (#8100)

    Open source →
  11. 1.51.1 08 Apr 2026
    Release notes

    Fixed

    • sync: fix semaphore reopens after forget (#8021)
    • net: surface errors from SO_ERROR on recv for UDP sockets on Linux (#8001)

    Fixed (unstable)

    • metrics: fix worker_local_schedule_count test (#8008)
    • rt: do not leak fd when cancelling io_uring open operation (#7983)
    Open source →
  12. 1.51.0 03 Apr 2026
    Release notes

    Added

    • net: implement get_peer_cred on 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

    • docs: do not show "Available on non-loom only." doc label (#7977)
    • macros: improve overall macro hygiene (#7997)
    • sync: fix notify_waiters priority in Notify (#7996)
    • sync: fix panic in Chan::recv_many when called with non-empty vector on closed channel (#7991)
    Open source →
  13. 1.50.0 03 Mar 2026
    Release notes

    Added

    • net: add TcpStream::set_zero_linger (#7837)
    • rt: add is_rt_shutdown_err (#7771)

    Changed

    • io: add optimizer hint that memchr returns in-bounds pointer (#7792)
    • io: implement vectored writes for write_buf (#7871)
    • runtime: panic when event_interval is 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 AsyncFd registration list on deregister (#7773)
    • macros: remove (most) local use declarations in tokio::select! (#7929)
    • net: fix GET_BUF_SIZE constant for target_os = "android" (#7889)
    • runtime: avoid redundant unpark in current_thread scheduler (#7834)
    • runtime: don't park in current_thread if before_park defers 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_threads on 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 AsyncWrite documentation (#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_interval doc (#7932)
    • sync: clarify RwLock fairness documentation (#7919)
    • sync: clarify that recv returns None once closed and no more messages (#7920)
    • task: clarify when to use spawn_blocking vs dedicated threads (#7923)
    • task: doc that task drops before JoinHandle completion (#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)
    Open source →
  14. 1.49.0 03 Jan 2026
    Release notes

    Added

    • net: add support for TCLASS option on IPv6 (#7781)
    • runtime: stabilize runtime::id::Id (#7125)
    • task: implement Extend for JoinSet (#7195)
    • task: stabilize the LocalSet::id() (#7776)

    Changed

    • net: deprecate {TcpStream,TcpSocket}::set_linger (#7752)

    Fixed

    • macros: fix the hygiene issue of join! and try_join! (#7766)
    • runtime: revert "replace manual vtable definitions with Wake" (#7699)
    • sync: return TryRecvError::Disconnected from Receiver::try_recv after Receiver::close (#7686)
    • task: remove unnecessary trait bounds on the Debug implementation (#7720)

    Unstable

    • fs: handle EINTR in fs::write for 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.rs and park.rs (#7817)
    • io: add SyncIoBridge cross-references to copy and copy_buf (#7798)
    • io: doc that AsyncWrite does not inherit from std::io::Write (#7705)
    • metrics: clarify that num_alive_tasks is 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 TcpSocket docs (#7738)
    • runtime: mention LocalRuntime in new_current_thread docs (#7820)
    • sync: add missing period to mpsc::Sender::try_send docs (#7721)
    • sync: clarify the cancellation safety of oneshot::Receiver (#7780)
    • sync: improve the docs for the errors of mpsc (#7722)
    • task: add example for spawn_local usage on local runtime (#7689)
    Open source →
  15. 1.48.0 14 Oct 2025
    Release notes

    The MSRV is increased to 1.71.

    Added

    • fs: add File::max_buf_size (#7594)
    • io: export Chain of AsyncReadExt::chain (#7599)
    • net: add SocketAddr::as_abstract_name (#7491)
    • net: add TcpStream::quickack and TcpStream::set_quickack (#7490)
    • net: implement AsRef<Self> for TcpStream and UnixStream (#7573)
    • task: add LocalKey::try_get (#7666)
    • task: implement Ord for task::Id (#7530)

    Changed

    • deps: bump windows-sys to version 0.61 (#7645)
    • fs: preserve max_buf_size when cloning a File (#7593)
    • macros: suppress clippy::unwrap_in_result in #[tokio::main] (#7651)
    • net: remove PollEvented noise from Debug formats (#7675)
    • process: upgrade Command::spawn_with to use FnOnce (#7511)
    • sync: remove inner mutex in SetOnce (#7554)
    • sync: use UnsafeCell::get_mut in Mutex::get_mut and RwLock::get_mut (#7569)
    • time: reduce the generated code size of Timeout<T>::poll (#7535)

    Fixed

    • macros: fix hygiene issue in join! and try_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::Sender in broadcast::Sender::new() (#7629)
    • sync: fix implementation of unused RwLock::try_* methods (#7587)

    Unstable

    • tokio: use cargo features instead of --cfg flags for taskdump and io_uring (#7655, #7621)
    • fs: support io_uring in fs::write (#7567)
    • fs: support io_uring with File::open() (#7617)
    • fs: support io_uring with OpenOptions (#7321)
    • macros: add local runtime flavor (#7375, #7597)

    Documented

    • io: clarify the zero capacity case of AsyncRead::poll_read (#7580)
    • io: fix typos in the docs of AsyncFd readiness 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() and reuseport() (#7628)
    • net: qualify that SO_REUSEADDR is 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_lot feature 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_local methods (#7669)
    • task: clarify the task ID reuse guarantees (#7577)
    • task: improve the example of poll_proceed (#7586)
    Open source →
  16. 1.47.5 07 May 2026
    Release notes

    1.47.5 (May 7th, 2026)

    Fixed

    • sync: fix underflow in mpsc channel len() (#8062)
    • sync: notify receivers in mpsc OwnedPermit::release() method (#8075)
    • sync: require that an RwLock has max_readers != 0 (#8076)
    • sync: return Empty from try_recv() when mpsc is closed with outstanding permits (#8074)
    Open source →
    Release notes

    Fixed

    • sync: fix underflow in mpsc channel len() (#8062)
    • sync: notify receivers in mpsc OwnedPermit::release() method (#8075)
    • sync: require that an RwLock has max_readers != 0 (#8076)
    • sync: return Empty from try_recv() when mpsc is closed with outstanding permits (#8074)
    Open source →
  17. 1.47.4 02 Apr 2026
    Release notes

    Fixed

    • sync: fix panic in Chan::recv_many when called with non-empty vector on closed channel (#7991)
    Open source →
  18. 1.47.3 02 Jan 2026
    Release notes

    Fixed

    • sync: return TryRecvError::Disconnected from Receiver::try_recv after Receiver::close ([#7686])
    Open source →
  19. 1.47.2 14 Oct 2025
    Release notes

    Fixed

    • runtime: use release ordering in wake_by_ref() even if already woken (#7622)
    • sync: close the broadcast::Sender in broadcast::Sender::new() (#7629)
    • macros: fix hygiene issue in join! and try_join! (#7638)
    • process: fix error when runtime is shut down on nightly-2025-10-12 (#7672)
    Open source →
  20. 1.47.1 01 Aug 2025
    Release notes

    Fixed

    • process: fix panic from spurious pidfd wakeup ([#7494])
    • sync: fix broken link of Python asyncio.Event in SetOnce docs (#7485)
    Open source →
  21. 1.47.0 26 Jul 2025
    Release notes

    This release adds poll_proceed and cooperative to the coop module for cooperative scheduling, adds SetOnce to the sync module which provides similar functionality to [std::sync::OnceLock], and adds a new method sync::Notify::notified_owned() which returns an OwnedNotified without a lifetime parameter.

    Added

    • coop: add cooperative and poll_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::wake performance (#7450)

    Documented

    • metrics: fix listed feature requirements for some metrics (#7449)
    • runtime: improve safety comments of Readiness<'_> (#7415)
    Open source →
  22. 1.46.1 04 Jul 2025
    Release notes

    This release fixes incorrect spawn locations in runtime task hooks for tasks spawned using tokio::spawn rather than Runtime::spawn. This issue only affected the spawn location in TaskMeta::spawned_at, and did not affect task locations in Tracing events.

    Unstable

    • runtime: add TaskMeta::spawned_at tracking where a task was spawned (#7440)
    Open source →
  23. 1.46.0 02 Jul 2025
    Release notes

    Fixed

    • net: fixed TcpStream::shutdown incorrectly returning an error on macOS (#7290)

    Added

    • sync: mpsc::OwnedPermit::{same_channel, same_channel_as_sender} methods (#7389)
    • macros: biased option for join! and try_join!, similar to select! (#7307)
    • net: support for cygwin (#7393)
    • net: support pipe::OpenOptions::read_write on Android (#7426)
    • net: add Clone implementation for net::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_location tracking where a task was spawned (#7417)
    • runtime: removed borrow from LocalOptions parameter to runtime::Builder::build_local (#7346)

    Documented

    • io: clarify behavior of seeking when start_seek is not used (#7366)
    • io: document cancellation safety of AsyncWriteExt::flush (#7364)
    • net: fix docs for recv_buffer_size method (#7336)
    • net: fix broken link of RawFd in TcpSocket docs (#7416)
    • net: update AsRawFd doc link to current Rust stdlib location (#7429)
    • readme: fix double period in reactor description (#7363)
    • runtime: add doc note that on_*_task_poll is unstable (#7311)
    • sync: update broadcast docs on allocation failure (#7352)
    • time: add a missing panic scenario of time::advance (#7394)
    Open source →
  24. 1.45.1 24 May 2025
    Release notes

    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)
    Open source →
  25. 1.45.0 06 May 2025
    Release notes

    Added

    • metrics: stabilize worker_total_busy_duration, worker_park_count, and worker_unpark_count (#6899, #7276)
    • process: add Command::spawn_with (#7249)

    Changed

    • io: do not require Unpin for some trait impls (#7204)
    • rt: mark runtime::Handle as unwind safe (#7230)
    • time: revert internal sharding implementation (#7226)

    Unstable

    • rt: remove alt multi-threaded runtime (#7275)
    Open source →
  26. 1.44.2 05 Apr 2025
    Release notes

    This release fixes a soundness issue in the broadcast channel. The channel accepts values that are Send but !Sync. Previously, the channel called clone() 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)
    Open source →
  27. 1.44.1 13 Mar 2025
    Release notes

    Fixed

    • rt: skip defer queue in block_in_place context (#7216)
    Open source →
  28. 1.44.0 07 Mar 2025
    Release notes

    This release changes the from_std method 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::coop module (#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 File should not start a background read (#7139)
    • process: calling start_kill on exited child should not fail (#7160)
    • signal: fix CTRL_CLOSE, CTRL_LOGOFF, CTRL_SHUTDOWN on 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 Child stdout (#7141)
    • process: clarify Child::kill behavior (#7162)
    • process: fix grammar of the ChildStdin struct doc comment (#7192)
    • runtime: consistently use worker_threads instead of core_threads (#7186)
    Open source →
  29. 1.43.4 02 Jan 2026
    Release notes

    Fixed

    • sync: return TryRecvError::Disconnected from Receiver::try_recv after Receiver::close (#7686)
    Open source →
  30. 1.43.3 14 Oct 2025
    Release notes

    Fixed

    • runtime: use release ordering in wake_by_ref() even if already woken (#7622)
    • sync: close the broadcast::Sender in broadcast::Sender::new() (#7629)
    • process: fix error when runtime is shut down on nightly-2025-10-12 (#7672)
    Open source →
  31. 1.43.2 01 Aug 2025
    Release notes

    Fixed

    • process: fix panic from spurious pidfd wakeup (#7494)
    Open source →
  32. 1.43.1 04 Apr 2025
    Release notes

    This release fixes a soundness issue in the broadcast channel. The channel accepts values that are Send but !Sync. Previously, the channel called clone() 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)
    Open source →
  33. 1.43.0 08 Jan 2025
    Release notes

    Added

    • net: add UdpSocket::peek methods (#7068)
    • net: add support for Haiku OS (#7042)
    • process: add Command::into_std() (#7014)
    • signal: add SignalKind::info on illumos (#6995)
    • signal: add support for realtime signals on illumos (#7029)

    Fixed

    • io: don't call set_len before initializing vector in Blocking (#7054)
    • macros: suppress clippy::needless_return in #[tokio::main] (#6874)
    • runtime: fix thread parking on WebAssembly (#7041)

    Changes

    • chore: use unsync loads for unsync_load (#7073)
    • io: use Buf::put_bytes in Repeat read 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

    • io: clarify ReadBuf::uninit allows initialized buffers as well (#7053)
    • net: fix ambiguity in TcpStream::try_write_vectored docs (#7067)
    • runtime: fix LocalRuntime doc links (#7074)
    • sync: extend documentation for watch::Receiver::wait_for (#7038)
    • sync: fix typos in OnceCell docs (#7047)
    Open source →
  34. 1.42.1 08 Apr 2025
    Release notes

    This release fixes a soundness issue in the broadcast channel. The channel accepts values that are Send but !Sync. Previously, the channel called clone() 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)
    Open source →
  35. 1.42.0 03 Dec 2024
    Release notes

    Added

    • io: add AsyncFd::{try_io, try_io_mut} (#6967)

    Fixed

    • io: avoid ptr->ref->ptr roundtrip in RegistrationSet (#6929)
    • runtime: do not defer yield_now inside block_in_place (#6999)

    Changes

    • io: simplify io readiness logic (#6966)

    Documented

    • net: fix docs for tokio::net::unix::{pid_t, gid_t, uid_t} (#6791)
    • time: fix a typo in Instant docs (#6982)
    Open source →
  36. 1.41.1 07 Nov 2024
    Release notes

    Fixed

    • metrics: fix bug with wrong number of buckets for the histogram (#6957)
    • net: display net requirement for net::UdpSocket in docs (#6938)
    • net: fix typo in TcpStream internal comment (#6944)
    Open source →
  37. 1.41.0 22 Oct 2024
    Release notes

    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 Id apis (#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] to Notified (#6828)
    • sync: make watch cooperative (#6846)
    • sync: make broadcast::Receiver cooperative (#6870)
    • task: add task size to tracing instrumentation (#6881)
    • wasm: enable cfg_fs for wasi target (#6822)

    Fixed

    • net: fix regression of abstract socket path in unix socket (#6838)

    Documented

    • io: recommend OwnedFd with AsyncFd (#6821)
    • io: document cancel safety of AsyncFd methods (#6890)
    • macros: render more comprehensible documentation for join and try_join (#6814, #6841)
    • net: fix swapped examples for TcpSocket::set_nodelay and TcpSocket::nodelay (#6840)
    • sync: document runtime compatibility (#6833)
    Open source →
  38. 1.40.0 30 Aug 2024
    Release notes

    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_buf when possible (#6724)
    • runtime: prevent niche-optimization to avoid triggering miri (#6744)
    • sync: mark mpsc types as UnwindSafe (#6783)
    • sync,time: make Sleep and BatchSemaphore instrumentation explicit roots (#6727)
    • task: use NonZeroU64 for task::Id (#6733)
    • task: include panic message when printing JoinError (#6753)
    • task: add #[must_use] to JoinHandle::abort_handle (#6762)
    • time: eliminate timer wheel allocations (#6779)

    Documented

    • docs: clarify that [build] section doesn't go in Cargo.toml (#6728)
    • io: clarify zero remaining capacity case (#6790)
    • macros: improve documentation for select! (#6774)
    • sync: document mpsc channel allocation behavior (#6773)
    Open source →
  39. 1.39.3 17 Aug 2024
    Release notes

    This release fixes a regression where the unix socket api stopped accepting the abstract socket namespace. (#6772)

    Open source →
  40. 1.39.2 27 Jul 2024
    Release notes

    This release fixes a regression where the select! macro stopped accepting expressions that make use of temporary lifetime extension. (#6722)

    Open source →
  41. 1.39.1 23 Jul 2024
    Release notes

    This release reverts "time: avoid traversing entries in the time wheel twice" because it contains a bug. (#6715)

    Open source →
  42. 1.39.0 23 Jul 2024 withdrawn
    Release notes

    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 AsyncSeek for Empty (#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 Default for watch::Sender (#6626)
    • task: implement Clone for AbortHandle (#6621)
    • task: stabilize consume_budget (#6622)

    Changed

    • io: improve panic message of ReadBuf::put_slice() (#6629)
    • io: read during write in copy_bidirectional and copy (#6532)
    • runtime: replace num_cpus with available_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 IntoFuture with timeout (#6666)
    • macros: support IntoFuture with join! and select! (#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_panic behavior 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

    • io: update tokio::io::stdout documentation (#6674)
    • macros: typo fix in join.rs and try_join.rs (#6641)
    • runtime: fix typo in unhandled_panic (#6660)
    • task: document behavior of JoinSet::try_join_next when all tasks are running (#6671)
    Open source →
  43. 1.38.2 03 Apr 2025
    Release notes

    This release fixes a soundness issue in the broadcast channel. The channel accepts values that are Send but !Sync. Previously, the channel called clone() 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)
    Open source →
  44. 1.38.1 16 Jul 2024
    Release notes

    This release fixes the bug identified as (#6682), which caused timers not to fire when they should.

    Fixed

    • time: update wake_up while holding all the locks of sharded time wheels (#6683)
    Open source →
  45. 1.38.0 30 May 2024
    Release notes

    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 AsyncBufRead for Join (#6449)
    • net: add Apple visionOS support (#6465)
    • net: implement Clone for NamedPipeInfo (#6586)
    • net: support QNX OS (#6421)
    • sync: add Notify::notify_last (#6520)
    • sync: add mpsc::Receiver::{capacity,max_capacity} (#6511)
    • sync: add split method 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_threads count (#6551)
    • metrics: stabilize RuntimeMetrics::worker_count (#6556)
    • runtime: move task out of the lifo_slot in block_in_place (#6596)
    • runtime: panic if global_queue_interval is zero (#6445)
    • sync: always drop message in destructor for oneshot receiver (#6558)
    • sync: instrument Semaphore for task dumps (#6499)
    • sync: use FIFO ordering when waking batches of wakers (#6521)
    • task: make LocalKey::get work 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_when field in TimerShared (#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_empty on mpsc block boundaries (#6603)

    Documented

    • fs: rewrite file system docs (#6467)
    • io: fix stdin documentation (#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 NamedPipeServer example (#6590)
    • sync: add examples for SemaphorePermit, OwnedSemaphorePermit (#6477)
    • sync: document that Barrier::wait is not cancel safe (#6494)
    • sync: explain relation between watch::Sender::{subscribe,closed} (#6490)
    • task: clarify that you can't abort spawn_blocking tasks (#6571)
    • task: fix a typo in doc of LocalSet::run_until (#6599)
    • time: fix test-util requirement for pause and resume in docs (#6503)
    Open source →
  46. 1.37.0 28 Mar 2024
    Release notes

    Added

    • fs: add set_max_buf_size to tokio::fs::File (#6411)
    • io: add try_new and try_with_interest to AsyncFd (#6345)
    • sync: add forget_permits method to semaphore (#6331)
    • sync: add is_closed, is_empty, and len to mpsc receivers (#6348)
    • sync: add a rwlock() method to owned RwLock guards (#6418)
    • sync: expose strong and weak counts of mpsc sender handles (#6405)
    • sync: implement Clone for watch::Sender (#6388)
    • task: add TaskLocalFuture::take_value (#6340)
    • task: implement FromIterator for JoinSet (#6300)

    Changed

    • io: make io::split use 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 Runtime to #[tokio::main] (#6366)
    • runtime: make the enter example 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::downgrade with #[must_use] (#6326)
    • sync: reorder const_new before new_with (#6392)
    • sync: update watch channel docs (#6395)
    • task: fix documentation links (#6336)

    Changed (unstable)

    • runtime: include task Id in taskdumps (#6328)
    • runtime: panic if unhandled_panic is enabled when not supported (#6410)
    Open source →
  47. 1.36.0 02 Feb 2024
    Release notes

    Added

    • io: add tokio::io::Join (#6220)
    • io: implement AsyncWrite for Empty (#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 copy cooperative (#6265)
    • io: make repeat and sink cooperative (#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: clarify clear_ready docs (#6304)
    • net: document that *Fd traits on TcpSocket are unix-only (#6294)
    • sync: document FIFO behavior of tokio::sync::Mutex (#6279)
    • chore: typographic improvements (#6262)
    • runtime: remove obsolete comment (#6303)
    • task: fix typo (#6261)
    Open source →
  48. 1.35.1 19 Dec 2023
    Release notes

    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)
    Open source →
  49. 1.35.0 08 Dec 2023
    Release notes

    Added

    • net: add Apple watchOS support (#6176)

    Changed

    • io: drop the Sized requirements from AsyncReadExt.read_buf (#6169)
    • runtime: make Runtime unwind safe (#6189)
    • runtime: reduce the lock contention in task spawn (#6001)
    • tokio: update nix dependency to 0.27.1 (#6190)

    Fixed

    • chore: make --cfg docsrs work without net feature (#6166)
    • chore: use relaxed load for unsync_load on 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

    • io: flush in AsyncWriteExt examples (#6149)
    • runtime: document fairness guarantees and current behavior (#6145)
    • task: document cancel safety of LocalSet::run_until (#6147)
    Open source →
  50. 1.34.0 09 Nov 2023
    Release notes

    Fixed

    • io: allow clear_readiness after io driver shutdown (#6067)
    • io: fix integer overflow in take (#6080)
    • io: fix I/O resource hang (#6134)
    • sync: fix broadcast::channel link (#6100)

    Changed

    • macros: use ::core qualified imports instead of ::std inside tokio::test macro (#5973)

    Added

    • fs: update cfg attr in fs::read_dir to include aix (#6075)
    • sync: add mpsc::Receiver::recv_many (#6010)
    • tokio: added vita target support (#6094)
    Open source →
  51. 1.33.0 09 Oct 2023
    Release notes

    Fixed

    • io: mark Interest::add with #[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_local source 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::remove method (#5906)
    • io: add vectored writes to DuplexStream (#5985)
    • net: add Apple tvOS support (#6045)
    • sync: add ?Sized bound 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 stats feature (#5952)

    Documented

    • add missing backticks in code examples (#5938, #6056)
    • fix typos (#5988, #6030)
    • process: document that Child::wait is cancel safe (#5977)
    • sync: add examples for Semaphore (#5939, #5956, #5978, #6031, #6032, #6050)
    • sync: document that broadcast capacity is a lower bound (#6042)
    • sync: document that const_new is not instrumented (#6002)
    • sync: improve cancel-safety documentation for mpsc::Sender::send (#5947)
    • sync: improve docs for watch channel (#5954)
    • taskdump: render taskdump documentation on docs.rs (#5972)

    Unstable

    • taskdump: fix potential deadlock (#6036)
    Open source →
  52. 1.32.1 19 Dec 2023
    Release notes

    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)
    Open source →
  53. 1.32.0 16 Aug 2023
    Release notes

    Fixed

    • sync: fix potential quadratic behavior in broadcast::Receiver (#5925)

    Added

    • process: stabilize Command::raw_arg (#5930)
    • io: enable awaiting error readiness (#5781)

    Unstable

    • rt(alt): improve scalability of alt runtime as the number of cores grows (#5935)
    Open source →
  54. 1.31.0 12 Aug 2023
    Release notes

    Fixed

    • io: delegate WriteHalf::poll_write_vectored (#5914)

    Unstable

    • rt(alt): fix memory leak in unstable next-gen scheduler prototype (#5911)
    • rt: expose mean task poll time metric (#5927)
    Open source →
  55. 1.30.0 09 Aug 2023
    Release notes

    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_poll flag (#5881)
    • sync: make const_new methods 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 UCred for espidf (#5868)
    • fs: add File::options() (#5869)
    • time: implement extra reset variants for Interval (#5878)
    • process: add {ChildStd*}::into_owned_{fd, handle} (#5899)

    Removed

    • tokio: removed unused tokio_* cfgs (#5890)
    • remove build script to speed up compilation (#5887)

    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 Sleep as !Unpin in docs (#5916)
    • process: fix raw_arg not showing up in docs (#5865)

    Unstable

    • rt: add runtime ID (#5864)
    • rt: initial implementation of new threaded runtime (#5823)
    Open source →
  56. 1.29.1 29 Jun 2023
    Release notes

    Fixed

    • rt: fix nesting two block_in_place with a block_on between (#5837)
    Open source →
  57. 1.29.0 27 Jun 2023
    Release notes

    Technically a breaking change, the Send implementation is removed from runtime::EnterGuard. This change fixes a bug and should not impact most users.

    Breaking

    • rt: EnterGuard should not be Send (#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 EnterGuard dropped incorrect order (#5772)
    • time: do not overflow to signal value (#5710)
    • fs: wait for in-flight ops before cloning File (#5803)

    Changed

    • rt: reduce time to poll tasks scheduled from outside the runtime (#5705, #5720)

    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_arg method to Command (#5704)
    • io: support PRIORITY epoll events (#5566)
    • task: add JoinSet::poll_join_next (#5721)
    • net: add support for Redox OS (#5790)

    Unstable

    • rt: add the ability to dump task backtraces (#5608, #5676, #5708, #5717)
    • rt: instrument task poll times with a histogram (#5685)
    Open source →
  58. 1.28.2 27 May 2023
    Release notes

    Forward ports 1.18.6 changes.

    Fixed

    • deps: disable default features for mio (#5728)
    Open source →
  59. 1.28.1 10 May 2023
    Release notes

    This release fixes a mistake in the build script that makes AsFd implementations unavailable on Rust 1.63. (#5677)

    Open source →
  60. 1.28.0 25 Apr 2023
    Release notes

    Added

    • io: add AsyncFd::async_io (#5542)
    • io: impl BufMut for ReadBuf (#5590)
    • net: add recv_buf for UdpSocket and UnixDatagram (#5583)
    • sync: add OwnedSemaphorePermit::semaphore (#5618)
    • sync: add same_channel to broadcast channel (#5607)
    • sync: add watch::Receiver::wait_for (#5611)
    • task: add JoinSet::spawn_blocking and JoinSet::spawn_blocking_on (#5612)

    Changed

    • deps: update windows-sys to 0.48 (#5591)
    • io: make read_to_end not 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_cred on AIX (#5065)
    • sync: avoid deadlocks in broadcast with custom wakers (#5578)

    Documented

    • sync: fix typo in Semaphore::MAX_PERMITS (#5645)
    • sync: fix typo in tokio::sync::watch::Sender docs (#5587)
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive