# 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][rustwasm]. If you're not familiar already with `wasm-bindgen` it's recommended to start by reading the [Game of Life tutorial][gol]. If you're curious about `wasm-pack`, you can find that [documentation here][wasm-pack]. The `wasm-bindgen` tool is sort of half polyfill for features like the [host bindings proposal][host] 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][dom-ex], [console logging][console-log], or [performance monitoring][perf-ex]. * 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`][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! [host]: https://github.com/WebAssembly/host-bindings [dom-ex]: https://github.com/rustwasm/wasm-bindgen/tree/master/examples/dom [console-log]: https://github.com/rustwasm/wasm-bindgen/tree/master/examples/console_log [perf-ex]: https://github.com/rustwasm/wasm-bindgen/tree/master/examples/performance [hello-online]: https://webassembly.studio/?f=gzubao6tg3 [rustwasm]: https://rustwasm.github.io/ [gol]: https://rustwasm.github.io/docs/book/ [wasm-pack]: https://rustwasm.github.io/docs/wasm-pack/