Repository navigation
Releases: tokio-rs/tokio
Releases · tokio-rs/tokio
Release list
Tokio v1.54.1
Tokio v1.54.0
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, andfs::FileTimes(#8504) - net: implement
Defaultfornamed_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_acquiremethods toSemaphore(#8269) - sync: add
watch::Receiver::is_closed(#8481) - wasm: support JSPI for Emscripten target (#8285, #8627)
- wasm: support the
wasm32-unknown-emscriptentarget (#8281, #8422, #8528, #8628)
Changed
- fs: reject zero in
File::set_max_buf_size(#8449) - io: make
copy_bufcooperative (#8459) - io: panic when
BufReaderorBufStreamis 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::pairandUnixDatagram::pairsockets as writable (#8444) - net: start accepted sockets as readable and writable (#8435)
- net: support
UCredon Fuchsia (#8257) - process: use
mio::unix::pipefor 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_ioavailable wheneverrtis enabled (#8387) - runtime: move
block_in_placesetup 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_tickis zero (#8476) - runtime: suggest
.awaitin nestedblock_onpanic 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
Fileinternal 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
ScheduledIotick in readiness events (#8331) - io: read lines as bytes so a partial line survives an I/O error (#8400)
- io: retry on
ErrorKind::Interruptedin more I/O operations (#8417, #8432, #8448, #8453, #8455, #8460) - io: use
spawn_mandatory_blockingfor stdout and stderr (#8506) - io: wait for pending operations before
BufReaderseeks (#8599) - net: close
CreateFileWhandle onSetNamedPipeHandleStatefailure (#8418) - net: fix peer credentials on NetBSD (#8589)
- net: saturate
TcpSocketandUnixSocketlisten backlog (#8511) - net: treat
ENOTCONNas success inUnixStream::shutdown(#8526) - runtime: allow building with
--all-featureswithouttokio_unstable(#8401) - runtime: avoid overflow in
shutdown_timeout()(#8497) - runtime: fix
spawn_blockinghang 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
usizefor permit count inSemaphorePermit(#8405) - time: avoid interval deadline overflow (#8385)
- time: handle wrapped top-level timer-wheel slots (#8334)
Unstable
- fs: fall back when
io_uringhas no IO driver (#8165) - metrics: cap log histogram precision (#8496)
- runtime: add an opt-in sharded
spawn_blockingqueue (#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::connectreturns only the last error (#8421) - runtime: add error documentation for
runtime::Builder(#8297) - runtime: link
available_parallelismin worker count docs (#8625) - sync: clarify panic behavior of
broadcast::channel()(#8420) - sync: fix typo in
Semaphoredocumentation (#8521)
Tokio v1.53.3
1.53.3 (October 13th, 2026)
Added
- io: add
AsyncFd::registerandAsyncFd::register_with_interest(#8587)
Changed
- io: deprecate
AsyncFd::{new, with_interest, try_new, try_with_interest}(#8587)
Fixed
- io: wake and drop
DuplexStreamwakers outside the lock (#8618) - macros: avoid
unreachable_codeinjoin!andtry_join!forInfallible(#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_uringop alive when submission fails after push (#8185)
Tokio v1.51.6
1.51.6 (October 13th, 2026)
Added
- io: add
AsyncFd::registerandAsyncFd::register_with_interest(#8587)
Changed
- io: deprecate
AsyncFd::{new, with_interest, try_new, try_with_interest}(#8587)
Fixed
- io: wake and drop
DuplexStreamwakers outside the lock (#8618) - macros: avoid
unreachable_codeinjoin!andtry_join!forInfallible(#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
1.53.2 (October 3rd, 2026)
Fixed
- fs: handle integer overflow in buffered relative seek (#8574)
- io: revert "always cleanup
AsyncFdregistration 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
Permitbefore sending value (#8560) - sync: validate
MAX_PERMITSinSemaphore::acquire(#8548) - sync: wake broadcast
Sender::closedoutside 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_uringread length tou32::MAX(#8572) - rt: ignore
current_threadtask dumps from other runtimes (#8544) - rt: preserve
io_uringcontext 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
1.51.5 (October 3rd, 2026)
Fixed
- fs: handle integer overflow in buffered relative seek (#8574)
- io: revert "always cleanup
AsyncFdregistration 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
Permitbefore sending value (#8560) - sync: validate
MAX_PERMITSinSemaphore::acquire(#8548) - sync: wake broadcast
Sender::closedoutside 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)
Tokio v1.53.1
Tokio v1.53.0
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)
Tokio v1.52.4
Tokio v1.51.4
1.51.4 (July 16th, 2026)
Fixed
- runtime: don't skip the driver when
before_parkschedules work (#8222)