github tokio-rs/tokio tokio-1.54.0
Tokio v1.54.0

7 hours ago

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)

Don't miss a new tokio release

NewReleases is sending notifications on new releases.