Skip to content

Releases: tokio-rs/tokio

Tokio v1.54.1

Choose a tag to compare

@Darksonn Darksonn released this 21 Oct 21:07
b53b200

1.54.1 (October 21st, 2026)

Fixed

  • time: revert "remove the runtime handle from timers" (#8692)

Tokio v1.54.0

Choose a tag to compare

@Darksonn Darksonn released this 19 Oct 16:33
66d34e4

1.54.0 (October 19th, 2026)

The 1.54.0 release includes all changes up to 1.53.3.

The MSRV is increased to 1.85. (#8514)

Added

  • fs: add File::set_times, File::set_modified, and fs::FileTimes (#8504)
  • net: implement Default for named_pipe::{ClientOptions, ServerOptions} (#8378)
  • runtime: add Builder::max_io_events_per_busy_tick (#8410)
  • runtime: stabilize tokio::runtime::worker_index() (#8431)
  • sync: add SemaphorePermit::semaphore() (#8482)
  • sync: add blocking_acquire methods to Semaphore (#8269)
  • sync: add watch::Receiver::is_closed (#8481)
  • wasm: support JSPI for Emscripten target (#8285, #8627)
  • wasm: support the wasm32-unknown-emscripten target (#8281, #8422, #8528, #8628)

Changed

  • fs: reject zero in File::set_max_buf_size (#8449)
  • io: make copy_buf cooperative (#8459)
  • io: panic when BufReader or BufStream is created with zero capacity (#8494)
  • io: panic when in-memory pipe is created with zero capacity (#8397)
  • io: reject zero buffer size in copy_bidirectional_with_sizes (#8454)
  • io: support vectored writes in Sink (#8663)
  • net: start UnixStream::pair and UnixDatagram::pair sockets as writable (#8444)
  • net: start accepted sockets as readable and writable (#8435)
  • net: support UCred on Fuchsia (#8257)
  • process: use mio::unix::pipe for Unix child stdio (#8603)
  • runtime: cache-pad the shared injection queue and idle state (#8622)
  • runtime: decide auto-boxing of spawned futures at monomorphization time (#8414)
  • runtime: make enable_io available whenever rt is enabled (#8387)
  • runtime: move block_in_place setup into a non-generic function (#8315)
  • runtime: move the multi-thread inject queue to its own mutex (#8382)
  • runtime: panic when max_io_events_per_tick is zero (#8476)
  • runtime: suggest .await in nested block_on panic message (#8501)
  • sync: avoid atomic reader count in broadcast slots (#8357)
  • sync: use acquire/release orderings in Notify (#8325)
  • time: remove the runtime handle from timers (#8458)

Fixed

  • fs: restore File internal state when op fails (#8291)
  • io: complete zero-length memory stream operations immediately (#8323)
  • io: flush the writer when the reader stalls in copy_buf (#8424)
  • io: keep the shutdown bit when clearing readiness (#8435)
  • io: preserve the full ScheduledIo tick in readiness events (#8331)
  • io: read lines as bytes so a partial line survives an I/O error (#8400)
  • io: retry on ErrorKind::Interrupted in more I/O operations (#8417, #8432, #8448, #8453, #8455, #8460)
  • io: use spawn_mandatory_blocking for stdout and stderr (#8506)
  • io: wait for pending operations before BufReader seeks (#8599)
  • net: close CreateFileW handle on SetNamedPipeHandleState failure (#8418)
  • net: fix peer credentials on NetBSD (#8589)
  • net: saturate TcpSocket and UnixSocket listen backlog (#8511)
  • net: treat ENOTCONN as success in UnixStream::shutdown (#8526)
  • runtime: allow building with --all-features without tokio_unstable (#8401)
  • runtime: avoid overflow in shutdown_timeout() (#8497)
  • runtime: fix spawn_blocking hang when only scheduler workers exist (#8408)
  • runtime: fix misleading signal driver panic message (#8419)
  • sync: preserve FIFO lock order when coop budget is exhausted (#8371)
  • sync: use usize for permit count in SemaphorePermit (#8405)
  • time: avoid interval deadline overflow (#8385)
  • time: handle wrapped top-level timer-wheel slots (#8334)

Unstable

  • fs: fall back when io_uring has no IO driver (#8165)
  • metrics: cap log histogram precision (#8496)
  • runtime: add an opt-in sharded spawn_blocking queue (#8337)
  • runtime: expose schedule latency in task hooks (#8282)
  • taskdump: fix idle bookkeeping when a task dump wakes parked workers (#8372)
  • taskdump: skip non-idle tasks during taskdumps (#8568)

Documented

  • docs: fix stray braces and broken links in rustdoc (#8605)
  • fs: document cancellation behavior of tokio::fs (#8265)
  • net: add Safety docs for named pipe from_raw_handle (#8378)
  • net: document that TcpStream::connect returns only the last error (#8421)
  • runtime: add error documentation for runtime::Builder (#8297)
  • runtime: link available_parallelism in worker count docs (#8625)
  • sync: clarify panic behavior of broadcast::channel() (#8420)
  • sync: fix typo in Semaphore documentation (#8521)

Tokio v1.53.3

Choose a tag to compare

@Darksonn Darksonn released this 13 Oct 20:49
a85c3f5

1.53.3 (October 13th, 2026)

Added

  • io: add AsyncFd::register and AsyncFd::register_with_interest (#8587)

Changed

  • io: deprecate AsyncFd::{new, with_interest, try_new, try_with_interest} (#8587)

Fixed

  • io: wake and drop DuplexStream wakers outside the lock (#8618)
  • macros: avoid unreachable_code in join! and try_join! for Infallible (#8518)
  • runtime: fix paused time auto-advancing when I/O wakes a task on current_thread (#8595)
  • sync: wake waiters outside the lock when closing a semaphore (#8529)
  • test: fix several flaky tests (#8196, #8427, #8609)

Fixed (unstable)

  • rt: keep io_uring op alive when submission fails after push (#8185)

Tokio v1.51.6

Choose a tag to compare

@Darksonn Darksonn released this 13 Oct 20:49
f00b2e6

1.51.6 (October 13th, 2026)

Added

  • io: add AsyncFd::register and AsyncFd::register_with_interest (#8587)

Changed

  • io: deprecate AsyncFd::{new, with_interest, try_new, try_with_interest} (#8587)

Fixed

  • io: wake and drop DuplexStream wakers outside the lock (#8618)
  • macros: avoid unreachable_code in join! and try_join! for Infallible (#8518)
  • runtime: fix paused time auto-advancing when I/O wakes a task on current_thread (#8595)
  • sync: wake waiters outside the lock when closing a semaphore (#8529)
  • test: fix several flaky tests (#8196, #8427, #8609)

Tokio v1.53.2

Choose a tag to compare

@Darksonn Darksonn released this 04 Oct 06:26
ff0c406

1.53.2 (October 3rd, 2026)

Fixed

  • fs: handle integer overflow in buffered relative seek (#8574)
  • io: revert "always cleanup AsyncFd registration list on deregister" (#8540)
  • process: unregister Windows wait before closing child handle (#8564)
  • rt: drop blocking pool mutex before shutting down rejected task (#8562)
  • sync: fix mpsc index wraparound in block reclamation (#8546)
  • sync: forget mpsc Permit before sending value (#8560)
  • sync: validate MAX_PERMITS in Semaphore::acquire (#8548)
  • sync: wake broadcast Sender::closed outside mutex (#8558)
  • task: drop replaced waker outside lock in JoinSet (#8554)
  • time: drop timer lock before dropping waker in clear_entry (#8552)
  • time: expire timers directly on shutdown without rotating wheel (#8570)

Fixed (unstable)

  • fs: clamp io_uring read length to u32::MAX (#8572)
  • rt: ignore current_thread task dumps from other runtimes (#8544)
  • rt: preserve io_uring context if a completion waker panics (#8566)
  • sync: fix semaphore use-after-free and permit leak on tracing panic (#8542)
  • taskdump: restore deferred leaf wakes during capture (#8445)
  • time: drop stored waker when cancelling alt timer entry (#8550)

Tokio v1.51.5

Choose a tag to compare

@Darksonn Darksonn released this 04 Oct 06:25
ec31a9f

1.51.5 (October 3rd, 2026)

Fixed

  • fs: handle integer overflow in buffered relative seek (#8574)
  • io: revert "always cleanup AsyncFd registration list on deregister" (#8540)
  • process: unregister Windows wait before closing child handle (#8564)
  • rt: drop blocking pool mutex before shutting down rejected task (#8562)
  • sync: fix mpsc index wraparound in block reclamation (#8546)
  • sync: forget mpsc Permit before sending value (#8560)
  • sync: validate MAX_PERMITS in Semaphore::acquire (#8548)
  • sync: wake broadcast Sender::closed outside mutex (#8558)
  • task: drop replaced waker outside lock in JoinSet (#8554)
  • time: drop timer lock before dropping waker in clear_entry (#8552)
  • time: expire timers directly on shutdown without rotating wheel (#8570)

Fixed (unstable)

  • rt: ignore current_thread task dumps from other runtimes (#8544)
  • rt: preserve io_uring context if a completion waker panics (#8566)
  • sync: fix semaphore use-after-free and permit leak on tracing panic (#8542)
  • time: drop stored waker when cancelling alt timer entry (#8550)

Tokio v1.53.1

Choose a tag to compare

@Darksonn Darksonn released this 20 Jul 17:06
75fef53

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)

Tokio v1.53.0

Choose a tag to compare

@Darksonn Darksonn released this 17 Jul 08:14
be689a3

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)

Tokio v1.52.4

Choose a tag to compare

@Darksonn Darksonn released this 16 Jul 13:24
efdba5f

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)

Tokio v1.51.4

Choose a tag to compare

@Darksonn Darksonn released this 16 Jul 12:00
f84b209

1.51.4 (July 16th, 2026)

Fixed

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