Crates You Should Know

This is a curated list of awesome crates you should know about for doing Rustand WebAssembly development.

You can also browse all the crates published to crates.io in the WebAssemblycategory.

Interacting with JavaScript and the DOM

wasm-bindgen | crates.io | repository

wasm-bindgen facilitates high-level interactions between Rust andJavaScript. It allows one to import JavaScript things into Rust and export Rustthings to JavaScript.

wasm-bindgen-futures | crates.io | repository

wasm-bindgen-futures is a bridge connecting JavaSript Promises and RustFutures. It can convert in both directions and is useful when working withasynchronous tasks in Rust, and allows interacting with DOM events and I/Ooperations.

js-sys | crates.io | repository

Raw wasm-bindgen imports for all the JavaScript global types and methods, suchas Object, Function, eval, etc. These APIs are portable across allstandard ECMAScript environments, not just the Web, such as Node.js.

web-sys | crates.io | repository

Raw wasm-bindgen imports for all the Web's APIs, such as DOM manipulation,setTimeout, Web GL, Web Audio, etc.

Error Reporting and Logging

console_error_panic_hook | crates.io | repository

This crate lets you debug panics on wasm32-unknown-unknown by providing apanic hook that forwards panic messages to console.error.

console_log | crates.io | repository

This crate provides a backend for the logcrate that routes logged messages to the devtoolsconsole.

Dynamic Allocation

wee_alloc | crates.io | repository

The Wasm-Enabled, Elfin Allocator. A small (~1K uncompressed.wasm) allocator implementation for when code size is a greater concern thanallocation performance.

Parsing and Generating .wasm Binaries

parity-wasm | crates.io | repository

Low-level WebAssembly format library for serializing, deserializing, andbuilding .wasm binaries. Good support for well-known custom sections, such asthe "names" section and "reloc.WHATEVER" sections.

wasmparser | crates.io | repository

A simple, event-driven library for parsing WebAssembly binary files. Providesthe byte offsets of each parsed thing, which is necessary when interpretingrelocs, for example.

Interpreting and Compiling WebAssembly

wasmi | crates.io | repository

An embeddable WebAssembly interpreter from Parity.

cranelift-wasm | crates.io | repository

Compile WebAssembly to the native host's machine code. Part of the Cranelift (néCretonne) code generator project.