PackageTrack
Sign in Get early access

async-std

Deprecated in favor of `smol` - Async version of the Rust standard library

1.13.2 90M downloads/mo #858 most downloaded on crates.io async-rs/async-std

What this package is like to depend on

Last release 1 years ago

15 Aug 2025

Ships unpredictably

gaps range from 2 weeks to 2.2 years

Most releases are documented

notes for 31 of 36 stable releases

Nothing withdrawn

no release was ever pulled

7 years old

38 releases · first in 2019

0 releases in the last 12 months

see the full history below

Release timeline

38 releases · May 2019 to Aug 2025
2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 38
  1. 1.13.2 15 Aug 2025

    Nothing published for this version

  2. 1.13.1 15 Mar 2025
    Release notes

    async-std has officially been discontinued. We recommend that all users and libraries migrate to the excellent smol project.

    We created async-std to demonstrate the value of making a library as close to std as possible, but async. We think that demonstration was successful, and we hope it will influence future design and development directions of async in std. However, in the meantime, the smol project came about and provided a great executor and libraries for asynchronous use in the Rust ecosystem. We think that resources would be better spent consolidating around smol, rather than continuing to provide occasional maintenance of async-std. As such, we recommend that all users of async-std, and all libraries built on async-std, switch to smol instead.

    In addition to the smol project as a direct replacement, you may find other parts of the futures ecosystem useful, including futures-concurrency, async-io, futures-lite, and async-compat.

    Open source →
    Release notes

    async-std has officially been discontinued. We recommend that all users and libraries migrate to the excellent smol project.

    Open source →
  3. 1.13.0 06 Sep 2024
    Release notes

    Added

    • IO Safety traits implementations

    Changed

    • Various dependencies updates
    • Export BufReadExt and SeekExt from async_std::io
    Open source →
    Release notes

    Added

    • IO Safety traits implementations

    Changed

    • Various dependencies updates
    • Export BufReadExt and SeekExt from async_std::io
    Open source →
  4. 1.12.0 18 Jun 2022
    Release notes

    This release stabilizes some long-awaited APIs that help people build async interfaces and interoperate with other APIs.

    Added

    • task::spawn_blocking is now stabilized. We consider it a fundamental API for bridging between blocking code and async code, and we widely use it within async-std's own implementation.
    • Add TryFrom implementations to convert TcpListener, TcpStream, UdpSocket, UnixDatagram, UnixListener, and UnixStream to their synchronous equivalents, including putting them back into blocking mode.

    Changed

    • async-std no longer depends on num_cpus; it uses functionality in the standard library instead (via async-global-executor).
    • Miscellaneous documentation fixes and cleanups.
    Open source →
    Release notes

    Added

    • async_std::task::spawn_blocking is now stabilized. We consider it a fundamental API for bridging between blocking code and async code, and we widely use it within async-std's own implementation.
    • Add TryFrom implementations to convert TcpListener, TcpStream, UdpSocket, UnixDatagram, UnixListener, and UnixStream to their synchronous equivalents, including putting them back into blocking mode.

    Changed

    • async-std no longer depends on num_cpus; it uses functionality in the standard library instead (via async-global-executor).
    • Miscellaneous documentation fixes and cleanups.
    Open source →
  5. 1.11.0 22 Mar 2022
    Release notes

    This release improves compile times by up to 55% on initial builds, and up to 75% on recompilation. Additionally we've added a few new APIs and made some tweaks.

    Added

    • TcpListener::into_incoming to convert a TcpListener into a stream of incoming TCP connections

    Removed

    • The internal extension_trait macro had been removed. This drastically improves compile times for async-std, but changes the way our documentation is rendered. This is a cosmetic change only, and all existing code should continue to work as it did be
      fore.

    Changed

    • Some internal code has been de-macro-ified, making for quicker compile times.
    • We now use the default recursion limit.

    Docs

    • Several docs improvements / fixes.
    Open source →
    Release notes

    This release improves compile times by up to 55% on initial builds, and up to 75% on recompilation. Additionally we've added a few new APIs and made some tweaks.

    Added

    • TcpListener::into_incoming to convert a TcpListener into a stream of incoming TCP connections

    Removed

    • The internal extension_trait macro had been removed. This drastically improves compile times for async-std, but changes the way our documentation is rendered. This is a cosmetic change only, and all existing code should continue to work as it did before.

    Changed

    • Some internal code has been de-macro-ified, making for quicker compile times.
    • We now use the default recursion limit.

    Docs

    • Several docs improvements / fixes.
    Open source →
  6. 1.10.0 26 Aug 2021
    Release notes

    This release comes with an assortment of small features and fixes.

    Added

    • File now implements Clone so that Files can be passed into closures for use in spawn_blocking.
      • File's contents are already wrapped in Arcs, so the implementation of Clone is straightforward.
    • task::try_current() which returns a handle to the current task if called within the context of a task created by async-std.
    • async_std::io now re-exports WriteExt directly.

    Fixed

    • write! now takes already written bytes into account on File.

    Internal

    • TcpStream now properly makes use of vectored IO.
    • The net::*::Incoming implementations now do less allocation.

    Docs

    • Several docs improvements / fixes.
    Open source →
  7. 1.9.0 15 Jan 2021
    Release notes

    Happy New Year everyone! This patch stabilizes the async_std::channel
    submodule, removes the deprecated sync::channel types, and introduces the
    tokio1 feature.

    New Channels

    As part of our 1.8.0 release last month we introduced the new
    async_std::channel submodule and deprecated the unstable
    async_std::sync::channel types. You can read our full motiviation for this
    change in the last patch notes. But the short version is that the old
    channels had some fundamental problems, and the sync submodule is a bit of
    a mess.

    This release of async-std promotes async_std::channel to stable, and
    fully removes the async_std::sync::channel types. In practice many
    libraries have already been upgraded to the new channels in the past month,
    and this will enable much of the ecosystem to switch off "unstable" versions
    of async-std.

    use async_std::channel;
    
    let (sender, receiver) = channel::unbounded();
    
    assert_eq!(sender.send("Hello").await, Ok(()));
    assert_eq!(receiver.recv().await, Ok("Hello"));

    Tokio 1.0 compat

    The Tokio project recently released version 1.0 of their runtime, and the
    async-std team would like to congratulate the Tokio team on achieving this
    milestone.

    This release of async-std adds the tokio1 feature flag, enabling Tokio's
    TLS constructors to be initialized within the async-std runtime. This is in
    addition to the tokio02 and tokio03 feature flags which we were already
    exposing.

    In terms of stability it's worth noting that we will continue to provide
    support for the tokio02, tokio03, and tokio1 on the current major
    release line of async-std. These flags are part of our public API, and
    removing compat support for older Tokio versions is considered a breaking
    change.

    Added

    • Added the tokio1 feature (#924)
    • Stabilized the async_std::channel submodule (#934)

    Removed

    • Removed deprecated sync::channel (#933)

    Fixed

    • Fixed a typo for [sic] FuturesExt trait (#930)
    • Update the link to cargo-edit in the installation section of the docs (#932)
    • Fixed a small typo for stream (#926)

    Internal

    • Updated rand to 0.8 (#923)
    • Migrated RwLock and Barrier to use the async-lock crate internally (#925)
    • Replaced uses of deprecated the compare_and_swap method with compare_exchange (#927)
    Open source →
    Release notes

    This patch stabilizes the async_std::channel submodule, removes the deprecated sync::channel types, and introduces the tokio1 feature.

    New Channels

    As part of our 1.8.0 release last month we introduced the new async_std::channel submodule and deprecated the unstable async_std::sync::channel types. You can read our full motivation for this change in the last patch notes. But the short version is that the old channels had some fundamental problems, and the sync submodule is a bit of a mess.

    This release of async-std promotes async_std::channel to stable, and fully removes the async_std::sync::channel types. In practice many libraries have already been upgraded to the new channels in the past month, and this will enable much of the ecosystem to switch off "unstable" versions of async-std.

    use async_std::channel;
    
    let (sender, receiver) = channel::unbounded();
    
    assert_eq!(sender.send("Hello").await, Ok(()));
    assert_eq!(receiver.recv().await, Ok("Hello"));
    

    Tokio 1.0 compat

    The Tokio project recently released version 1.0 of their runtime, and the async-std team would like to congratulate the Tokio team on achieving this milestone.

    This release of async-std adds the tokio1 feature flag, enabling Tokio's TLS constructors to be initialized within the async-std runtime. This is in addition to the tokio02 and tokio03 feature flags which we were already exposing.

    In terms of stability it's worth noting that we will continue to provide support for the tokio02, tokio03, and tokio1 on the current major release line of async-std. These flags are part of our public API, and removing compat support for older Tokio versions is considered a breaking change.

    Added

    • Added the tokio1 feature (#924)
    • Stabilized the async_std::channel submodule (#934)

    Removed

    • Removed deprecated sync::channel (#933)

    Fixed

    • Fixed a typo for [sic] FuturesExt trait (#930)
    • Update the link to cargo-edit in the installation section of the docs (#932)
    • Fixed a small typo for stream (#926)

    Internal

    • Updated rand to 0.8 (#923)
    • Migrated RwLock and Barrier to use the async-lock crate internally (#925)
    • Replaced uses of deprecated the compare_and_swap method with compare_exchange (#927)
    Open source →
  8. 1.8.0 08 Dec 2020
    Release notes

    This patch introduces async_std::channel, a new submodule for our async channels implementation. channels have been one of async-std's most requested features, and have existed as "unstable" for the past year. We've been cautious about stabilizing channels, and this caution turned out to be warranted: we realized our channels could hang indefinitely under certain circumstances, and people ended up expressing a need for unbounded channels.

    So today we're introducing the new async_std::channel submodule which exports the async-channel crate, and we're marking the older unstable async_std::sync::channel API as "deprecated". This release includes both APIs, but we intend to stabilize async_std::channel and remove the older API in January. This should give dependent projects a month to upgrade, though we can extend that if it proves to be too short.

    The rationale for adding a new top-level channel submodule, rather than extending sync is that the std::sync and async_std::sync submodule are a bit of a mess, and the libs team has been talking about splitting std::sync up into separate modules. The stdlib has to guarantee it'll forever be backwards compatible, but async-std does not (we fully expect a 2.0 once we have async closures & traits). So we're experimenting with this change before std does, with the expectation that this change can serve as a data point when the libs team decides how to proceed in std.

    Added

    • async_std::channel as "unstable" #915
    • async_std::process as "unstable" #916

    Fixed

    • Fixed mentions of the tokio03 flags in the docs #909
    • Fixed a double drop issue in StreamExt::cycle #903

    Internal

    • updated pin-project to v0.2.0
    Open source →
    Release notes

    This patch introduces async_std::channel, a new submodule for our async channels implementation. channels have been one of async-std's most requested features, and have existed as "unstable" for the past year. We've been cautious about stabilizing channels, and this caution turned out to be warranted: we realized our channels could hang indefinitely under certain circumstances, and people ended up expressing a need for unbounded channels.

    So today we're introducing the new async_std::channel submodule which exports the async-channel crate, and we're marking the older unstable async_std::sync::channel API as "deprecated". This release includes both APIs, but we intend to stabilize async_std::channel and remove the older API in January. This should give dependent projects a month to upgrade, though we can extend that if it proves to be too short.

    The rationale for adding a new top-level channel submodule, rather than extending sync is that the std::sync and async_std::sync submodule are a bit of a mess, and the libs team has been talking about splitting std::sync up into separate modules. The stdlib has to guarantee it'll forever be backwards compatible, but async-std does not (we fully expect a 2.0 once we have async closures & traits). So we're experimenting with this change before std does, with the expectation that this change can serve as a data point when the libs team decides how to proceed in std.

    Added

    • async_std::channel as "unstable" #915
    • async_std::process as "unstable" #916

    Fixed

    • Fixed mentions of the tokio03 flags in the docs #909
    • Fixed a double drop issue in StreamExt::cycle #903

    Internal

    • updated pin-project to v0.2.0
    Open source →
  9. 1.7.0 04 Nov 2020
    Release notes

    docs.rs documentation

    This patch adds a feature to enable compatibility with the new tokio 0.3.0 release, and updates internal dependencies.

    Tokio 0.3.x compat

    Since earlier this year async-std has shipped with a tokio-02 feature flag that enables libraries written for the tokio runtime to work on async-std as well. When this flag is enabled async-std ensures that whenever it spawns a thread on its executor, the right tokio-specific thread state is initialized for it. That means no more thread 'main' panicked at 'not currently running on the Tokio runtime.' errors when running async-std and tokio in the same application.

    This patch introduces a new feature flag: tokio-03 which enables the same mechanism for the latest version of the tokio runtime. As applications migrate from tokio 0.2.x to 0.3.x, mixing dependencies that use both async-std and tokio will continue to work.

    Added

    • Add tokio03 feature flag (#895)

    Internal

    • chore: update dependencies (#897)
    Open source →
    Release notes

    This patch adds a feature to enable compatibility with the new tokio 0.3.0 release, and updates internal dependencies.

    Added

    • Add tokio03 feature (#895)

    Internal

    • chore: update dependencies (#897)
    Open source →
  10. 1.6.5 28 Sep 2020
    Release notes

    Fixed

    • Fix TcpListener::incoming. (#889)
    • Fix tokio compatability flag. (#882)
    Open source →
    Release notes

    Fixed

    • Fix TcpListener::incoming. (#889)
    • Fix tokio compatibility flag. (#882)
    Open source →
  11. 1.6.4 17 Sep 2020
    Release notes

    Added

    • Added UdpSocket::peek and UdpSocket::peek_from (#853)

    Changed

    Fixed

    • Ensure UnixStream::into_raw_fd doesn't close the file descriptor (#855)
    • Fixed wasm builds and ensured better dependency management depending on the compile target (#863)
    Open source →
  12. 1.6.3 13 Aug 2020
    Release notes

    Added

    Changed

    • Switched from smol to individual executor parts. (#836)
    • Replaced internal Mutex implementation with async-mutex. (#822)

    Fixed

    • Added missing Send guards to Stream::collect. (#665)
    Open source →
  13. 1.6.2 19 Jun 2020
    Release notes

    Added

    • Add UdpSocket::peer_addr (#816)

    Changed

    Fixed

    • Ensure the reactor is running for sockets and timers (#819).
    • Avoid excessive polling in flatten and flat_map (#701)
    Open source →
  14. 1.6.1 11 Jun 2020
    Release notes

    Added

    Changed

    • Removed unstable stdio lock methods, due to their unsoundness (#807).

    Fixed

    • Fixed wrong slice index for file reading (#802).
    • Fixed recursive calls to block_on (#799) and (#809).
    • Remove default feature requirement for the unstable feature (#806).
    Open source →
  15. 1.6.0 22 May 2020
    Release notes

    See 1.6.0-beta.1 and 1.6.0-beta.2.

    Open source →
  16. 1.6.0-beta.2 20 May 2020 pre-release
    Release notes

    Added

    • Added an environment variable to configure the thread pool size of the runtime. (#774)
    • Implement Clone for UnixStream (#772)

    Changed

    Fixed

    • Use smol::block_on to handle drop of File, avoiding nested executor panic. (#768)
    Open source →
  17. 1.6.0-beta.1 07 May 2020 pre-release
    Release notes

    Added

    • Added task::spawn_local. (#757)
    • Added out of the box support for wasm. (#757)
    • Added JoinHandle::cancel (#757)
    • Added sync::Condvar (#369)
    • Added sync::Sender::try_send and sync::Receiver::try_recv (#585)
    • Added no_std support for task, future and stream (#680)

    Changed

    • Switched underlying runtime to smol. (#757)
    • Switched implementation of sync::Barrier to use sync::Condvar like std does. (#581)

    Fixed

    • Allow compilation on 32 bit targets, by using AtomicUsize for TaskId. (#756)
    Open source →
  18. 1.5.0 03 Feb 2020
    Release notes

    API Documentation

    This patch includes various quality of life improvements to async-std. Including improved performance, stability, and the addition of various Clone impls that replace the use of Arc in many cases.

    Added

    • Added links to various ecosystem projects from the README (#660)
    • Added an example on FromStream for Result<T, E> (#643)
    • Added stream::pending as "unstable" (#615)
    • Added an example of stream::timeout to document the error flow (#675)
    • Implement Clone for DirEntry (#682)
    • Implement Clone for TcpStream (#689)

    Changed

    • Removed internal comment on stream::Interval (#645)
    • The "unstable" feature can now be used without requiring the "default" feature (#647)
    • Removed unnecessary trait bound on stream::FlatMap (#651)
    • Updated the "broadcaster" dependency used by "unstable" to 1.0.0 (#681)
    • Updated async-task to 1.2.1 (#676)
    • task::block_on now parks after a single poll, improving performance in many cases (#684)
    • Improved reading flow of the "client" part of the async-std tutorial (#550)
    • Use take_while instead of scan in impl of Product, Sum and FromStream (#667)
    • TcpStream::connect no longer uses a thread from the threadpool, improving performance (#687)

    Fixed

    • Fixed crate documentation typo (#655)
    • Fixed documentation for UdpSocket::recv (#648)
    • Fixed documentation for UdpSocket::send (#671)
    • Fixed typo in stream documentation (#650)
    • Fixed typo on sync::JoinHandle documentation (#659)
    • Removed use of std::error::Error::description which failed CI (#661)
    • Removed the use of rustfmt's unstable format_code_in_doc_comments option which failed CI (#685)
    • Fixed a code typo in the task::sleep example (#688)
    Open source →
  19. 1.4.0 20 Dec 2019
    Release notes

    API Documentation

    This patch adds Future::timeout, providing a method counterpart to the future::timeout free function. And includes several bug fixes around missing APIs. Notably we're not shipping our new executor yet, first announced on our blog.

    Examples

    use async_std::prelude::*;
    use async_std::future;
    use std::time::Duration;
    
    let fut = future::pending::<()>(); // This future will never resolve.
    let res = fut.timeout(Duration::from_millis(100)).await;
    assert!(res.is_err()); // The future timed out, returning an err.
    

    Added

    • Added Future::timeout as "unstable" (#600)

    Fixes

    • Fixed a doc test and enabled it on CI (#597)
    • Fixed a rendering issue with the stream submodule documentation (#621)
    • Write::write_fmt's future is now correctly marked as #[must_use] (#628)
    • Fixed the missing io::Bytes export (#633)
    • Fixed the missing io::Chain export (#633)
    • Fixed the missing io::Take export (#633)
    Open source →
  20. 1.3.0 13 Dec 2019
    Release notes

    API Documentation

    This patch introduces Stream::delay, more methods on DoubleEndedStream, and improves compile times. Stream::delay is a new API that's similar to task::sleep, but can be passed as part of as stream, rather than as a separate block. This is useful for examples, or when manually debugging race conditions.

    Examples

    let start = Instant::now();
    let mut s = stream::from_iter(vec![0u8, 1]).delay(Duration::from_millis(200));
    
    // The first time will take more than 200ms due to delay.
    s.next().await;
    assert!(start.elapsed().as_millis() >= 200);
    
    // There will be no delay after the first time.
    s.next().await;
    assert!(start.elapsed().as_millis() <= 210);
    

    Added

    • Added Stream::delay as "unstable" (#309)
    • Added DoubleEndedStream::next_back as "unstable" (#562)
    • Added DoubleEndedStream::nth_back as "unstable" (#562)
    • Added DoubleEndedStream::rfind as "unstable" (#562)
    • Added DoubleEndedStream::rfold as "unstable" (#562)
    • Added DoubleEndedStream::try_rfold as "unstable" (#562)
    • stream::Once now implements DoubleEndedStream (#562)
    • stream::FromIter now implements DoubleEndedStream (#562)

    Changed

    • Removed our dependency on async-macros, speeding up compilation (#610)

    Fixes

    • Fixed a link in the task docs (#598)
    • Fixed the UdpSocket::recv example (#603)
    • Fixed a link to task::block_on (#608)
    • Fixed an incorrect API mention in task::Builder (#612)
    • Fixed leftover mentions of futures-preview (#595)
    • Fixed a typo in the tutorial (#614)
    • <TcpStream as Write>::poll_close now closes the write half of the stream (#618)
    Open source →
  21. 1.2.0 27 Nov 2019
    Release notes

    API Documentation

    This patch includes some minor quality-of-life improvements, introduces a new Stream::unzip API, and adds verbose errors to our networking types.

    This means if you can't connect to a socket, you'll never have to wonder again which address it was you couldn't connect to, instead of having to go through the motions to debug what the address was.

    Example

    Unzip a stream of tuples into two collections:

    use async_std::prelude::*;
    use async_std::stream;
    
    let s = stream::from_iter(vec![(1,2), (3,4)]);
    
    let (left, right): (Vec<_>, Vec<_>) = s.unzip().await;
    
    assert_eq!(left, [1, 3]);
    assert_eq!(right, [2, 4]);
    

    Added

    • Added Stream::unzip as "unstable".
    • Added verbose errors to the networking types.

    Changed

    • Enabled CI.
    • Future::join and Future::try_join can now join futures with different output types.

    Fixed

    • Fixed the docs and Debug output of BufWriter.
    • Fixed a bug in Stream::throttle that made it consume too much CPU.
    Open source →
  22. 1.1.0 21 Nov 2019
    Release notes

    API Documentation

    This patch introduces a faster scheduler algorithm, Stream::throttle, and stabilizes task::yield_now. Additionally we're introducing several more stream APIs, bringing us to almost complete parity with the standard library.

    Furthermore our path submodule now returns more context in errors. So if opening a file fails, async-std will tell you which file was failed to open, making it easier to write and debug programs.

    Examples

    let start = Instant::now();
    
    let mut s = stream::interval(Duration::from_millis(5))
        .throttle(Duration::from_millis(10))
        .take(2);
    
    s.next().await;
    assert!(start.elapsed().as_millis() >= 5);
    
    s.next().await;
    assert!(start.elapsed().as_millis() >= 15);
    
    s.next().await;
    assert!(start.elapsed().as_millis() >= 25);
    

    Added

    • Added Stream::throttle as "unstable".
    • Added Stream::count as "unstable".
    • Added Stream::max as "unstable".
    • Added Stream::successors as "unstable".
    • Added Stream::by_ref as "unstable".
    • Added Stream::partition as "unstable".
    • Added contextual errors to the path submodule.
    • Added os::windows::symlink_dir as "unstable".
    • Added os::windows::symlink_file as "unstable".
    • Stabilized task::yield_now.

    Fixes

    • We now ignore seek errors when rolling back failed read calls on File.
    • Fixed a bug where Stream::max_by_key was returning the wrong result.
    • Fixed a bug where Stream::min_by_key was returning the wrong result.

    Changed

    • Applied various fixes to the tutorial.
    • Fixed an issue with Clippy.
    • Optimized an internal code generation macro, improving compilation speeds.
    • Removed an Unpin bound from stream::Once.
    • Removed various extra internal uses of pin_mut!.
    • Simplified Stream::any and Stream::all's internals.
    • The surf example is now enabled again.
    • Tweaked some streams internals.
    • Updated futures-timer to 2.0.0, improving compilation speed.
    • Upgraded async-macros to 2.0.0.
    • Stream::merge now uses randomized ordering to reduce overall latency.
    • The scheduler is now more efficient by keeping a slot for the next task to run. This is similar to Go's scheduler, and Tokio's scheduler.
    • Fixed the documentation of the channel types to link back to the channel function.
    Open source →
  23. 1.0.1 12 Nov 2019
    Release notes

    API Documentation

    We were seeing a regression in our fs performance, caused by too many long-running tasks. This patch fixes that regression by being more proactive about closing down idle threads.

    Changes

    • Improved thread startup/shutdown algorithm in task::spawn_blocking.
    • Fixed a typo in the tutorial.
    Open source →
  24. 1.0.0 11 Nov 2019
    Release notes

    API Documentation

    This release marks the 1.0.0 release of async-std; a major milestone for our development. This release itself mostly includes quality of life improvements for all of modules, including more consistent API bounds for a lot of our submodules.

    The biggest change is that we're now using the full semver range, major.minor.patch, and any breaking changes to our "stable" APIs will require an update of the major number.

    We're excited we've hit this milestone together with you all. Thank you!

    Added

    • Added Future::join as "unstable", replacing future::join!.
    • Added Future::try_join as "unstable", replacing future::try_join!.
    • Enabled stable and beta channel testing on CI.
    • Implemented FromIterator and Extend for PathBuf.
    • Implemented FromStream for PathBuf.
    • Loosened the trait bounds of io::copy on "unstable".

    Changed

    • Added a Sync bound to RwLock, resolving a memory safety issue.
    • Fixed a bug in Stream::take_while where it could continue after it should've ended.
    • Fixed a bug where our attributes Cargo feature wasn't working as intended.
    • Improved documentation of Stream::merge, documenting ordering guarantees.
    • Update doc imports in examples to prefer async-std's types.
    • Various quality of life improvements to the future submodule.
    • Various quality of life improvements to the path submodule.
    • Various quality of life improvements to the stream submodule.

    Removed

    • Removed future::join! in favor of Future::join.
    • Removed future::try_join! in favor of Future::try_join.
    Open source →
  25. 0.99.12 08 Nov 2019
    Release notes

    API Documentation

    This patch upgrades us to futures 0.3, support for async/await on Rust Stable, performance improvements, and brand new module-level documentation.

    Added

    • Added Future::flatten as "unstable".
    • Added Future::race as "unstable" (replaces future::select!).
    • Added Future::try_race as "unstable" (replaces future::try_select!).
    • Added Stderr::lock as "unstable".
    • Added Stdin::lock as "unstable".
    • Added Stdout::lock as "unstable".
    • Added Stream::copied as "unstable".
    • Added Stream::eq as "unstable".
    • Added Stream::max_by_key as "unstable".
    • Added Stream::min as "unstable".
    • Added Stream::ne as "unstable".
    • Added Stream::position as "unstable".
    • Added StreamExt and FutureExt as enumerable in the prelude.
    • Added TcpListener and TcpStream integration tests.
    • Added stream::from_iter.
    • Added sync::WakerSet for internal use.
    • Added an example to handle both IP v4 and IP v6 connections.
    • Added the default Cargo feature.
    • Added the attributes Cargo feature.
    • Added the std Cargo feature.

    Changed

    • Fixed a bug in the blocking threadpool where it didn't spawn more than one thread.
    • Fixed a bug with Stream::merge where sometimes it ended too soon.
    • Fixed a bug with our GitHub actions setup.
    • Fixed an issue where our channels could spuriously deadlock.
    • Refactored the task module.
    • Removed a deprecated GitHub action.
    • Replaced futures-preview with futures.
    • Replaced lazy_static with once_cell.
    • Replaced all uses of VecDequeue in the examples with stream::from_iter.
    • Simplified sync::RwLock using the internal sync::WakerSet type.
    • Updated the path submodule documentation to match std.
    • Updated the mod-level documentation to match std.

    Removed

    • Removed future::select! (replaced by Future::race).
    • Removed future::try_select! (replaced by Future::try_race).
    Open source →
  26. 0.99.11 29 Oct 2019
    Release notes

    This patch introduces async_std::sync::channel, a novel asynchronous port of the ultra-fast Crossbeam channels. This has been one of the most anticipated features for async-std, and we're excited to be providing a first version of this!

    In addition to channels, this patch has the regular list of new methods, types, and doc fixes.

    Examples

    Send and receive items from a channel

    // Create a bounded channel with a max-size of 1
    let (s, r) = channel(1);
    
    // This call returns immediately because there is enough space in the channel.
    s.send(1).await;
    
    task::spawn(async move {
        // This call blocks the current task because the channel is full.
        // It will be able to complete only after the first message is received.
        s.send(2).await;
    });
    
    // Receive items from the channel
    task::sleep(Duration::from_secs(1)).await;
    assert_eq!(r.recv().await, Some(1));
    assert_eq!(r.recv().await, Some(2));
    

    Added

    • Added Future::delay as "unstable"
    • Added Stream::flat_map as "unstable"
    • Added Stream::flatten as "unstable"
    • Added Stream::product as "unstable"
    • Added Stream::sum as "unstable"
    • Added Stream::min_by_key
    • Added Stream::max_by
    • Added Stream::timeout as "unstable"
    • Added sync::channel as "unstable".
    • Added doc links from instantiated structs to the methods that create them.
    • Implemented Extend + FromStream for PathBuf.

    Changed

    • Fixed an issue with block_on so it works even when nested.
    • Fixed issues with our Clippy check on CI.
    • Replaced our uses of cfg_if with our own macros, simplifying the codebase.
    • Updated the homepage link in Cargo.toml to point to async.rs.
    • Updated the module-level documentation for stream and sync.
    • Various typos and grammar fixes.
    • Removed redundant file flushes, improving the performance of File operations

    Removed

    Nothing was removed in this release.

    Open source →
  27. 0.99.10 16 Oct 2019
    Release notes

    This patch stabilizes several core concurrency macros, introduces async versions of Path and PathBuf, and adds almost 100 other commits.

    Examples

    Asynchronously read directories from the filesystem

    use async_std::fs;
    use async_std::path::Path;
    use async_std::prelude::*;
    
    let path = Path::new("/laputa");
    let mut dir = fs::read_dir(&path).await.unwrap();
    while let Some(entry) = dir.next().await {
        if let Ok(entry) = entry {
            println!("{:?}", entry.path());
        }
    }
    

    Cooperatively reschedule the current task on the executor

    use async_std::prelude::*;
    use async_std::task;
    
    task::spawn(async {
        let x = fibonacci(1000); // Do expensive work
        task::yield_now().await;  // Allow other tasks to run
        x + fibonacci(100)       // Do more work
    })
    

    Create an interval stream

    use async_std::prelude::*;
    use async_std::stream;
    use std::time::Duration;
    
    let mut interval = stream::interval(Duration::from_secs(4));
    while let Some(_) = interval.next().await {
        println!("prints every four seconds");
    }
    

    Added

    • Added FutureExt to the prelude, allowing us to extend Future
    • Added Stream::cmp
    • Added Stream::ge
    • Added Stream::last
    • Added Stream::le
    • Added Stream::lt
    • Added Stream::merge as "unstable", replacing stream::join!
    • Added Stream::partial_cmp
    • Added Stream::take_while
    • Added Stream::try_fold
    • Added future::IntoFuture as "unstable"
    • Added io::BufRead::split
    • Added io::Write::write_fmt
    • Added print!, println!, eprint!, eprintln! macros as "unstable"
    • Added process as "unstable", re-exporting std types only for now
    • Added std::net re-exports to the net submodule
    • Added std::path::PathBuf with all associated methods
    • Added std::path::Path with all associated methods
    • Added stream::ExactSizeStream as "unstable"
    • Added stream::FusedStream as "unstable"
    • Added stream::Product
    • Added stream::Sum
    • Added stream::from_fn
    • Added stream::interval as "unstable"
    • Added stream::repeat_with
    • Added task::spawn_blocking as "unstable", replacing task::blocking
    • Added task::yield_now
    • Added write! and writeln! macros as "unstable"
    • Stabilized future::join! and future::try_join!
    • Stabilized future::timeout
    • Stabilized path
    • Stabilized task::ready!

    Changed

    • Fixed BufWriter::into_inner so it calls flush before yielding
    • Refactored io::BufWriter internals
    • Refactored net::ToSocketAddrs internals
    • Removed Travis CI entirely
    • Rewrote the README.md
    • Stabilized io::Cursor
    • Switched bors over to use GitHub actions
    • Updated the io documentation to match std's io docs
    • Updated the task documentation to match std's thread docs

    Removed

    • Removed the "unstable" stream::join! in favor of Stream::merge
    • Removed the "unstable" task::blocking in favor of task::spawn_blocking
    Open source →
  28. 0.99.9 09 Oct 2019
    Release notes

    This patch upgrades our futures-rs version, allowing us to build on the 1.39 beta. Additionally we've introduced map and for_each to Stream. And we've added about a dozen new FromStream implementations for std types, bringing us up to par with std's FromIterator implementations.

    And finally we've added a new "unstable" task::blocking function which can be used to convert blocking code into async code using a threadpool. We've been using this internally for a while now to async-std to power our fs and net::SocketAddr implementations. With this patch userland code now finally has access to this too.

    Example

    Create a stream of tuples, and collect into a hashmap

    let a = stream::once(1u8);
    let b = stream::once(0u8);
    
    let s = a.zip(b);
    
    let map: HashMap<u8, u8> = s.collect().await;
    assert_eq!(map.get(&1), Some(&0u8));
    

    Spawn a blocking task on a dedicated threadpool

    task::blocking(async {
        println!("long-running task here");
    }).await;
    

    Added

    • Added stream::Stream::map
    • Added stream::Stream::for_each
    • Added stream::Stream::try_for_each
    • Added task::blocking as "unstable"
    • Added FromStream for all std::{option, collections, result, string, sync} types.
    • Added the path submodule as "unstable".

    Changed

    • Updated futures-preview to 0.3.0-alpha.19, allowing us to build on rustc 1.39.0-beta.
    • As a consequence of this upgrade, all of our concrete stream implementations now make use of Stream::size_hint to optimize internal allocations.
    • We now use GitHub Actions through actions-rs, in addition to Travis CI. We intend to fully switch in the near future.
    • Fixed a bug introduced in 0.99.6 where Unix Domain Listeners would sometimes become unresponsive.
    • Updated our sync::Barrier docs to match std.
    • Updated our stream::FromStream docs to match std's FromIterator.
    Open source →
  29. 0.99.8 28 Sep 2019
    Release notes

    Added

    • Added README to examples directory.
    • Added concurrency documentation to the futures submodule.
    • Added io::Read::take method.
    • Added io::Read::by_ref method.
    • Added io::Read::chain method.

    Changed

    • Pin futures-preview to 0.3.0-alpha.18, to avoid rustc upgrade problems.
    • Simplified extension traits using a macro.
    • Use the broadcast module with std::sync::Mutex, reducing dependencies.
    Open source →
  30. 0.99.7 26 Sep 2019
    Release notes

    Added

    • Added future::join macro as "unstable"
    • Added future::select macro as "unstable"
    • Added future::try_join macro as "unstable"
    • Added future::try_select macro as "unstable"
    • Added io::BufWriter struct
    • Added stream::Extend trait
    • Added stream::Stream::chain method
    • Added stream::Stream::filter method
    • Added stream::Stream::inspect method
    • Added stream::Stream::skip_while method
    • Added stream::Stream::skip method
    • Added stream::Stream::step_by method
    • Added sync::Arc struct from stdlib
    • Added sync::Barrier struct as "unstable"
    • Added sync::Weak struct from stdlib
    • Added task::ready macro as "unstable"

    Changed

    • Correctly marked the pin submodule as "unstable" in the docs
    • Updated tutorial to have certain functions suffixed with _loop
    • io traits are now re-exports of futures-rs types, allowing them to be implemented
    • stream traits are now re-exports of futures-rs types, allowing them to be implemented
    • prelude::* now needs to be in scope for functions io and stream traits to work
    Open source →
  31. 0.99.6 19 Sep 2019
    Release notes

    Added

    • Added stream::Stream::collect as "unstable"
    • Added stream::Stream::enumerate
    • Added stream::Stream::fuse
    • Added stream::Stream::fold
    • Added stream::Stream::scan
    • Added stream::Stream::zip
    • Added stream::join macro as "unstable"
    • Added stream::DoubleEndedStream as "unstable"
    • Added stream::FromStream trait as "unstable"
    • Added stream::IntoStream trait as "unstable"
    • Added io::Cursor as "unstable"
    • Added io::BufRead::consume method
    • Added io::repeat
    • Added io::Slice and io::SliceMut
    • Added documentation for feature flags
    • Added pin submodule as "unstable"
    • Added the ability to collect a stream of Result<T, E>s into a Result<impl FromStream<T>, E>

    Changed

    • Refactored the scheduling algorithm of our executor to use work stealing
    • Refactored the network driver, removing 400 lines of code
    • Removed the Send bound from task::block_on
    • Removed Unpin bound from impl<T: futures::stream::Stream> Stream for T
    Open source →
  32. 0.99.5 12 Sep 2019
    Release notes

    Added

    • Added tests for io::timeout
    • Added io::BufRead::fill_buf, an async fn counterpart to poll_fill_buf
    • Added fs::create_dir_all
    • Added future::timeout, a free function to time out futures after a threshold
    • Added io::prelude
    • Added net::ToSocketAddrs, a non-blocking version of std's ToSocketAddrs
    • Added stream::Stream::all
    • Added stream::Stream::filter_map
    • Added stream::Stream::find_map
    • Added stream::Stream::find
    • Added stream::Stream::min_by
    • Added stream::Stream::nth

    Changed

    • Polished the text and examples of the tutorial
    • cargo fmt on all examples
    • Simplified internals of TcpStream::connect_to
    • Modularized our CI setup, enabled a rustfmt fallback, and improved caching
    • Reduced our dependency on the futures-rs crate, improving compilation times
    • Split io::Read, io::Write, io::BufRead, and stream::Stream into multiple files
    • fs::File now flushes more often to prevent flushes during seek
    • Updated all dependencies
    • Fixed a bug in the conversion of File into raw handle
    • Fixed compilation errors on the latest nightly

    Removed

    Open source →
  33. 0.99.4 22 Aug 2019
    Release notes

    Changes

    • Many small changes in the book, mostly typos
    • Documentation fixes correcting examples
    • Now works with recent nightly with stabilised async/await (> 2019-08-21)
    Open source →
  34. 0.99.3 16 Aug 2019
    Release notes
    • Initial beta release
    Open source →
  35. 0.99.2 16 Aug 2019

    Nothing published for this version

  36. 0.99.1 16 Aug 2019

    Nothing published for this version

  37. 0.99.0 16 Aug 2019

    Nothing published for this version

  38. 0.1.0 30 May 2019

    Nothing published for this version

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