Built with 🦀🕸 by The Rust and WebAssembly Working Group

## Install `wasm-bindgen-cli`

You can install it using `cargo install`:

    cargo install wasm-bindgen-cli

Or, you can download it from the release page.

If you have `cargo-binstall` installed, then you can install the pre-built artifacts by running:

    cargo binstall wasm-bindgen-cli

## Example

Import JavaScript things into Rust and export Rust things to JavaScript.

    use wasm_bindgen::prelude::*;

    // Import the `window.alert` function from the Web.
    #[wasm_bindgen]
    extern "C" {
        fn alert(s: &str);
    }

    // Export a `greet` function from Rust to JavaScript, that alerts a
    // hello message.
    #[wasm_bindgen]
    pub fn greet(name: &str) {
        alert(&format!("Hello, {}!", name));
    }

Use exported Rust things from JavaScript with ECMAScript modules!

    import { greet } from "./hello_world";

    greet("World!");

## Features

- Lightweight. Only pay for what you use. `wasm-bindgen` only generates bindings and glue for the JavaScript imports you actually use and Rust functionality that you export. For example, importing and using the `document.querySelector` method doesn't cause `Node.prototype.appendChild` or `window.alert` to be included in the bindings as well.

- ECMAScript modules. Just import WebAssembly modules the same way you would import JavaScript modules. Future compatible with WebAssembly modules and ECMAScript modules integration.

- Designed with the "Web IDL bindings" proposal in mind. Eventually, there won't be any JavaScript shims between Rust-generated wasm functions and native DOM methods. Because the Wasm functions are statically type checked, some of those native methods' dynamic type checks should become unnecessary, promising to unlock even-faster-than-JavaScript DOM access.

## Guide

📚 Read the `wasm-bindgen` guide here! 📚

## API Docs

- wasm-bindgen
- js-sys
- web-sys
- wasm-bindgen-futures

## MSRV Policy

- Libraries that are released on crates.io have a MSRV of v1.71.
- CLI tools and their corresponding support libraries have a MSRV of v1.82.

The project aims to maintain a 2-year MSRV policy for libraries (meaning we support Rust versions released within the last 2 years), but with a shorter MSRV policy for the CLI. Changes to the MSRV may be made in patch versions, and will be logged in the CHANGELOG and MSRV history below.

### MSRV History

| Version | Library MSRV | CLI MSRV | Date | |---------|--------------|----------|------------| | 0.2.106 | 1.71 | 1.82 | 2025-11-xx | | 0.2.103 | 1.57 | 1.82 | 2025-09-17 | | 0.2.93 | 1.57 | 1.76 | 2024-08-13 |

## License

This project is licensed under either of

- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

## Contribution

See the "Contributing" section of the guide for information on hacking on `wasm-bindgen`!

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.