Introduction

This book is about wasm-bindgen, a Rust library and CLI tool that facilitate high-level interactions between Wasm modules and JavaScript. The wasm-bindgen tool and crate are only one part of the Rust and WebAssembly ecosystem. If you're not familiar already with wasm-bindgen it's recommended to start by reading the Game of Life tutorial. If you're curious about wasm-pack, you can find that documentation here.

The wasm-bindgen tool is sort of half polyfill for features like the component model proposal and half features for empowering high-level interactions between JS and wasm-compiled code (currently mostly from Rust). More specifically this project allows JS/wasm to communicate with strings, JS objects, classes, etc, as opposed to purely integers and floats. Using wasm-bindgen for example you can define a JS class in Rust or take a string from JS or return one. The functionality is growing as well!

Currently this tool is Rust-focused but the underlying foundation is language-independent, and it's hoping that over time as this tool stabilizes that it can be used for languages like C/C++!

Notable features of this project includes:

  • Importing JS functionality in to Rust such as DOM manipulation, console logging, or performance monitoring.
  • Exporting Rust functionality to JS such as classes, functions, etc.
  • Working with rich types like strings, numbers, classes, closures, and objects rather than simply u32 and floats.
  • Automatically generating TypeScript bindings for Rust code being consumed by JS.

With the addition of wasm-pack you can run the gamut from running Rust on the web locally, publishing it as part of a larger application, or even publishing Rust-compiled-to-WebAssembly on NPM!