yamux
Multiplexer over reliable, ordered connections
0.14.0
27M downloads/mo
#1793 most downloaded on crates.io
paritytech/yamux
What this package is like to depend on
Last release 2 months ago
20 Jun 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 47 of 48 stable releases
1 version withdrawn
withdrawn after publishing
8 years old
50 releases · first in 2018
5 releases in the last 12 months
see the full history below
Release timeline
50 releases · Nov 2018 to Jun 2026Releases
latest 50-
0.14.020 Jun 2026 -
0.13.1009 Mar 2026Release notes
Open source →Fix panic when processing oversized inbound Data|SYN frames. See ac71745 and GHSA-vxx9-2994-q338.
Release notes
Open source →- Fix panic when processing oversized inbound Data|SYN frames. See ac71745 and GHSA-vxx9-2994-q338.
-
0.13.927 Feb 2026Release notes
Open source →- Improve flow-control credit verification for window updates. See PR 221.
-
0.13.824 Oct 2025Release notes
Open source →Introduce WriteState::Poisoned to avoid further reads after the returned number of bytes from a write operation is bigger than the header size. See #211.
Release notes
Open source →- Introduce
WriteState::Poisonedto avoid further reads after the returned number of bytes from a write operation is bigger than the header size. See PR 211.
- Introduce
-
0.13.701 Oct 2025 -
0.13.624 Jul 2025Release notes
Open source →Fix panic on frame io when the returned number of bytes from a write operation is bigger than the header size. See #202.
Release notes
Open source →- Fix panic on frame io when the returned number of bytes from a write operation is bigger than the header size. See PR 202.
-
0.13.514 May 2025 -
0.13.418 Nov 2024 -
0.13.307 Jun 2024 -
0.13.230 Apr 2024 -
0.13.106 Dec 2023Release notes
Open source →- Fix WASM support using
instant::{Duration, Instant}instead ofstd::time::{Duration, Instant}. See PR 179.
- Fix WASM support using
-
0.13.006 Dec 2023Release notes
Open source →- Introduce dynamic stream receive window auto-tuning. While low-resourced deployments maintain the benefit of small buffers, high resource deployments eventually end-up with a window of roughly the bandwidth-delay-product (ideal) and are thus able to use the entire available bandwidth. See PR 176 for performance results and details on the implementation.
- Remove
WindowUpdateMode. Behavior will always beWindowUpdateMode::OnRead, thus enabling flow-control and enforcing backpressure. See PR 178.
-
0.12.124 Nov 2023Release notes
Open source →- Deprecate
WindowUpdateMode::OnReceive. It does not enforce flow-control, i.e. breaks backpressure. UseWindowUpdateMode::OnReadinstead. See PR #177.
- Deprecate
-
0.12.020 Jul 2023 -
0.11.126 May 2023Release notes
Open source →- Avoid race condition between pending frames and closing stream. See PR 156.
-
0.11.001 Dec 2022Release notes
Open source →- Remove
Connection::controlin favor ofControl::new. RemoveConnection::next_streamin favor ofConnection::poll_next_inbound. See PR 142.
- Remove
-
0.10.205 Aug 2022Release notes
Open source →- Process command or socket result immediately and thereby no longer accessing the socket after it returned an error. See PR 138 for details.
-
0.10.114 Mar 2022Release notes
Open source → -
0.10.1-rc.125 Feb 2022 pre-releaseNothing published for this version
-
0.10.013 Jan 2022Release notes
Open source →-
Default to
WindowUpdateMode::OnRead, thus enabling full Yamux flow-control, exercising back pressure on senders, preventing stream resets due to reaching the buffer limit.See the
WindowUpdateModedocumentation for details, especially the section on deadlocking when sending data larger than the receivers window.
-
-
0.9.016 Feb 2021Release notes
Open source →-
Force-split larger frames, for better interleaving of reads and writes between different substreams and to avoid single, large writes. By default frames are capped at, and thus split at,
16KiB, which can be adjusted by a new configuration option, if necessary. -
Send window updates earlier, when half of the window has been consumed, to minimise pauses due to transmission delays, particularly if there is just a single dominant substream.
-
Avoid possible premature stream resets of streams that have been properly closed and already dropped but receive window update or other frames while the remaining buffered frames are still sent out. Incoming frames for unknown streams are now ignored, instead of triggering a stream reset for the remote.
-
-
0.8.116 Feb 2021Release notes
Open source →- Avoid possible premature stream resets of streams that have been properly closed and already dropped but receive window update or other frames while the remaining buffered frames are still sent out. Incoming frames for unknown streams are now ignored, instead of triggering a stream reset for the remote.
-
0.8.008 Sep 2020Release notes
Open source →- Upgrade step 4 of 4. This version always assumes the new semantics and no longer sets the non-standard flag in intial window updates.
- The configuration option
lazy_openis removed. Initial window updates are sent automatically if the receive window is configured to be larger than the default.
-
0.7.008 Sep 2020Release notes
Open source →Upgrade step 3 of 4. This version sets the non-standard flag, but irrespective of whether it is present or not, always assumes the new additive semantics of the intial window update.
-
0.6.008 Sep 2020Release notes
Open source →Upgrade step 2 of 4. This version sets the non-standard flag, version 0.5.0 already recognises.
-
0.5.008 Sep 2020Release notes
Open source →This version begins the upgrade process spawning multiple versions that changes the meaning of the initial window update from "This is the total size of the receive window." to "This is the size of the receive window in addition to the default size." This is necessary for compatibility with other yamux implementations. See issue #92 for details.
As a first step, version 0.5.0 interprets a non-standard flag to imply the new meaning. Future versions will set this flag and eventually the new meaning will always be assumed. Upgrading from the current implemention to the new semantics requires deployment of every intermediate version, each of which is only compatible with its immediate predecessor. Alternatively, if the default configuration together with
lazy_openset totrueis deployed on all communicating endpoints, one can skip directly to the end of the transition. -
0.4.927 Aug 2020 -
0.4.826 Aug 2020 -
0.4.718 Jun 2020 -
0.4.617 Jun 2020 withdrawnRelease notes
Open source →- Send RST frame if the window of a dropped stream is 0 and it is in state
SendClosed(#84).
- Send RST frame if the window of a dropped stream is 0 and it is in state
-
0.4.523 Mar 2020Release notes
Open source →- Removed
bytes(#77) andthiserror(#78) dependencies. - Removed implicit
BufWritercreation (#77). Client code that depends on this (undocumented) behaviour needs to wrap the socket in aBufWriterbefore passing it toConnection::new. - Added
Connection::is_closedflag (#80) to immediately returnOk(None)fromConnection::next_streamafterErr(_)orOk(None)have been returned previously.
- Removed
-
0.4.428 Feb 2020Release notes
Open source →- Control and stream command channels are now closed and drained immediately
on error. This is done to prevent client code from submitting further close
or other commands which will never be acted upon since the API contract of
Connection::next_streamis that afterNoneor anErr(_)is returned it must not be called again.
- Control and stream command channels are now closed and drained immediately
on error. This is done to prevent client code from submitting further close
or other commands which will never be acted upon since the API contract of
-
0.4.318 Feb 2020 -
0.4.204 Feb 2020Release notes
Open source →- A new configuration option
lazy_open(off by default) has been added and inbound streams are now acknowledged (#73). Iflazy_openis set totruewe will not immediately send an initialWindowUpdateframe but instead just set theSYNflag on the first outboundDataframe. SeeConfiguration::set_lazy_openfor details.
- A new configuration option
-
0.4.128 Jan 2020 -
0.4.030 Dec 2019 -
0.3.020 Dec 2019Release notes
Open source →Update to use and work with async/await:
Config::set_max_pending_frameshas been removed. Internal back-pressure made the setting unnecessary. As another consequence the errorConnectionError::TooManyPendingFrameshas been removed.Connectionno longer has methods to open a new stream or to close the connection. Instead a separate handle typeControlhas been added which allows these operations concurrently to the connection itself.- In Yamux 0.2.x every
StreamHandleI/O operation would drive theConnection. Now, the only way theConnectionmakes progress is through itsnext_streammethod which must be called continuously. For convenience a functioninto_streamhas been added which turns theConnectioninto afutures::stream::Streamimpl, invokingnext_streamin itspoll_nextmethod. StreamHandlehas been renamed toStreamand its methodscreditandstatehave been removed.Streamalso implementsfutures::stream::Streamand producesPackets.ConnectionError::StreamNotFoundhas been removed. Incoming frames for unknown streams are answered with a RESET frame, unless they finish the stream.DecodeErrorhas been renamed toFrameDecodeErrorandDecodeError::Typecorresponds toFramedDecodeError::Headerwhich handles not just unknown frame type errors, but more. Hence a new errorHeaderDecodeErrorhas been added for those error cases.
-
0.2.218 Oct 2019 -
0.2.126 Apr 2019 -
0.2.018 Apr 2019Release notes
Open source →- Added
max_pending_framessetting toConfig. AConnectionbuffers outgoing frames up to this limit (see pull request #51). - Added
ConnectionError::TooManyPendingFramesifmax_pending_frameshas been reached. - Changed error types of
Connection::closeandConnection::flushfromstd::io::Errortoyamux::ConnectionError. - Removed
Connection::shutdownmethod which was deprecated since version 0.1.8.
- Added
-
0.1.911 Mar 2019Release notes
Open source →- Add
read_after_closesetting toConfigwhich defaults totrueto match the behaviour of previous versions. Settingread_after_closetofalsewill cause stream reads to return withOk(0)as soon as the connection is closed, preventing them from reading data from their buffer.
- Add
-
0.1.801 Mar 2019 -
0.1.718 Feb 2019Release notes
Open source →- Bugfix release (#36).
- Support for half-closed streams (#38).
- Avoids redundant RESET frames (#37).
- Better test coverage (#40, #42).
-
0.1.607 Jan 2019 -
0.1.503 Jan 2019 -
0.1.421 Dec 2018 -
0.1.317 Dec 2018 -
0.1.210 Dec 2018 -
0.1.104 Dec 2018Release notes
Open source →- Forward
Stream::pollto the newly addedConnection::pollmethod which acceptsselfas a shared reference. See pull request #24 for details.
- Forward
-
0.1.009 Nov 2018Nothing published for this version