Skip to content

drewcrawford/wasm_ffi

 
 

Repository files navigation

Fork manifesto

This is a fork of wasm-bindgen. Goals:

a) high velocity; unblock first, ask questions later

b) support "modern" workloads like multicore atomics, log-based debugging, or whatever your browser of choice broke this week.

c) more predictable crates.io release schedule

d) landing pad for things we'd all like in wasm-bindgen, but may benefit from incubation inside a higher-velocity fork

e) identical license with both wasm-bindgen, and also rust. So legally any code could flow both to wasm-bindgen, and subsequently, to rust itself.

Sunset

This fork will have at least three monthly releases:

1.x - January 2026

2.x - February 2026

3.x - March 2026, assuming breaking changes are needed

In April, we'll see if upstream has merged our patches or if we need to order another quarter of releases.

SLA

This fork will release one new major version every month, in the first week of that month. (Or a minor version, if no breaking changes were submitted.)

During the first week of a month I will update my crates to target the new release.

In addition I will rapidly fire point releases as soon as possible.

PR SLA

Obviously, try upstream first or in parallel. If you're reading this, you might be somehow disillusioned on that path.

If you send me a PR that seems to pass CI and merge cleanly, I guarantee that I will merge it. In case you don't want your actual feature to get broken later, consider writing better automated tests, which would benefit everybody.

For non-breaking changes, this will likely be the fastest review process you'll ever encounter.

For breaking changes, the merge window will be the last week of each month, when the monthly breakage has been scheduled. Review criteria will be similar, if it appears to pass CI I will try to merge it in that window.

On some roughly monthly cadence I will attempt to merge upstream's changes. But they've failed my CI tests for over a week now, so I guess we'll see how that goes.


Original wasm-bindgen README

wasm-bindgen

Facilitating high-level interactions between Wasm modules and JavaScript.

Build Status Crates.io version Download docs.rs docs

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

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

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.

About

High-velocity fork of wasm-bindgen

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 95.6%
  • JavaScript 3.1%
  • WebAssembly 1.1%
  • HTML 0.1%
  • TypeScript 0.1%
  • Shell 0.0%