A list of awesome Rust and WebAssembly projects, libraries, tools, and resources.
If you want to contribute, read this.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
-
macro_railroad — Generating "railroad style" syntax diagrams for
macro_rules!()
macros. Diagrams are generated fully automatically from rust-source as Scalable Vector Graphics, using customizable CSS for layout. -
snowhash — Procedurally generate a unique snowflake from a hash.
-
wasmbooth — Video effect booth written in Rust and WebAssembly.
- wasm-pack
—
wasm-pack
seeks to be a one-stop shop for building and working with Rust-generated WebAssembly that you would like to interoperate with JavaScript, on the Web or with Node.js.wasm-pack
helps you build and publish Rust-generated WebAssembly to the npm registry to be used alongside any other JavaScript package in workflows that you already use.
-
wasm-objdump
— Print low-level details about a
.wasm
binary and each of its sections. Also supports disassembling into the WAT text format. It's likeobjdump
but for WebAssembly. -
wasm-nm
— List the imported, exported, and private function symbols defined within a
.wasm
binary. It's likenm
but for WebAssembly.
-
wasm-gc
— A small tool to garbage collect a WebAssembly module and remove all unneeded exports, imports, functions, etc. This is effectively a
--gc-sections
linker flag for WebAssembly. -
wasm-opt
— The
wasm-opt
tool reads WebAssembly as input, runs transformation, optimization, and/or instrumentation passes on it, and then emits the transformed WebAssembly as output. Running it on the.wasm
binaries produced by LLVM by way ofrustc
will usually create.wasm
binaries that are both smaller and execute faster. -
wasm-snip
—
wasm-snip
replaces a WebAssembly function's body with anunreachable
instruction. This is useful for forcibly removing Rust's panicking infrastructure in non-debug production builds.
- twiggy
—
twiggy
is a code size profiler for.wasm
binaries. It analyzes a binary's call graph to answer questions about which functions take up the most space.
- wasm2js
— The
wasm2js
tool compiles WebAssembly into "almost asm.js". This is great for supporting browsers that don't have a WebAssembly implementation, such as Internet Explorer 11.
- wee_alloc
— The Wasm-Enabled, Elfin Allocator. A small (~1K uncompressed
.wasm
) allocator implementation for when code size is a greater concern than allocation performance.
- console_error_panic_hook
— This crate lets you debug panics on
wasm32-unknown-unknown
by providing a panic hook that forwards panic messages toconsole.error
.
- gate
— Gate is a game development library tailored to 2D pixel-art games, written in Rust.
-
js-sys
— Raw
wasm-bindgen
imports for all the JavaScript global types and methods, such asObject
,Function
,eval
, etc. These APIs are portable across all standard ECMAScript environments, not just the Web, such as Node.js. -
wasm-bindgen
—
wasm-bindgen
facilitates high-level interactions between Rust and JavaScript. It allows one to import JavaScript things into Rust and export Rust things to JavaScript. -
wasm-bindgen-futures
—
wasm-bindgen-futures
is a bridge connecting JavaSriptPromise
s and RustFuture
s. It can convert in both directions and is useful when working with asynchronous tasks in Rust, and allows interacting with DOM events and I/O operations.
-
cranelift-wasm
— Compile WebAssembly to the native host's machine code. Part of the Cranelift (né Cretonne) code generator project.
-
wasmi
— An embeddable WebAssembly interpreter.
-
parity-wasm
— Low-level WebAssembly format library for serializing, deserializing, and building
.wasm
binaries. Good support for well-known custom sections, such as the "names" section. -
wasmparser
— A simple, event-driven library for parsing WebAssembly binary files.
- The Rust and WebAssembly Book — The official Rust and WebAssembly book authored by the Rust and WebAssembly domain working group.