# Crate of the Week

**URL:** <https://users.rust-lang.org/t/crate-of-the-week/2704>\
**Category:** community\
**Created:** [September 3, 2015, 3:41pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704 "2015-09-03T15:41:37Z")\
**Posts on this page:** 1\
**Showing post:** 1654

<div class="post-metadata">

**Author:** ![temeddix](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/temeddix/32/34135_2.png) [@temeddix](https://users.rust-lang.org/u/temeddix)\
**Post date:** [August 15, 2026, 10:33am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1654 "2026-08-15T10:33:29Z")

</div>

![output](https://us1.discourse-cdn.com/flex019/uploads/rust_lang/original/3X/4/1/41554a49f09c4058dd8318c237c86487cacd2616.avif)

Self-suggestion: I'd like to humbly suggest [tokio\_with\_wasm](https://crates.io/crates/tokio_with_wasm), a crate that lets a single tokio codebase run both natively and in web browsers.

It has already reached 1.7 million downloads on `crates.io`.

```rust
use tokio_with_wasm::alias as tokio;
use std::time::Duration;

let async_handle = tokio::task::spawn(async { fetch_data().await });
let blocking_handle = tokio::task::spawn_blocking(|| heavy_work());
tokio::time::sleep(Duration::from_secs(1)).await;

```

On native targets, the alias simply resolves to real tokio. On `wasm32-unknown-unknown`, it provides the same API on top of JavaScript web APIs — `spawn_blocking` runs on an auto-scaling pool of Web Workers. We hope it's useful for anyone bringing async Rust to the web!

---

_[View the full topic](https://users.rust-lang.org/t/crate-of-the-week/2704)._
