#once #lazy #static


Asynchronous versions of OnceCell and Lazy

2 unstable releases

0.2.0 Apr 16, 2021
0.1.0 Apr 8, 2021

#664 in Asynchronous

Download history 163/week @ 2022-06-09 183/week @ 2022-06-16 243/week @ 2022-06-23 209/week @ 2022-06-30 226/week @ 2022-07-07 209/week @ 2022-07-14 221/week @ 2022-07-21 225/week @ 2022-07-28 169/week @ 2022-08-04 201/week @ 2022-08-11 130/week @ 2022-08-18 161/week @ 2022-08-25 95/week @ 2022-09-01 123/week @ 2022-09-08 123/week @ 2022-09-15 208/week @ 2022-09-22

577 downloads per month
Used in jcargo


164 lines


Crates.io MIT or Apache 2.0 licensed Continuous integration

This crate offers an asynchronous version of Rust's OnceCell and Lazy structs, which allows its users to use async/await inside of the OnceCell and Lazy constructors.

The crate should work with any stable asynchronous runtime like tokio and async-std and only depends on the futures crate for an async aware Mutex.


The OnceCell can be used the similarly to the other popular OnceCell crates, and the implementation in the standard library with the exception that a Future is given instead of a closjure and that some functions return a Future.


use async_oncecell::OnceCell;

async fn main() {
    let cell = OnceCell::new();
    let v = cell.get_or_init(async { 
        // Expensive operation
    assert_eq!(cell.get(), Some(v));

The same holds for Lazy, however since the get() method needs to be awaited, no automatic dereferencing is implemented.


use async_oncecell::Lazy;

async fn main() {
    let lazy_value = Lazy::new(async {
        // Expensive operation
    assert_eq!(lazy_value.get().await, /* result of expensive operation */);


This crate is extremely new and has therefore not extensively been tested. Next to that, the author is also inexperienced in working with unsafe Rust. While care has been taken in making this crate safe, it is not recommended for production use. As mentioned in the Contributing section: feedback and pull requests are very much appreciated, even more so if you see any problems with the soundness of the crate.


Contributions are always welcome! Please create an issue or pull request if you have any insight which might help to improve this crate. This is my first real Rust crate, so I'm eager to learn from the community.


In the future I hope to add asynchronous transform structs as well to be able to transform data lazily.


~16K SLoC