📦 ✨ wasm-pack
Your favorite rust -> wasm workflow tool!
This tool seeks to be a one-stop shop for building and working with rust-
generated WebAssembly that you would like to interop with JavaScript, in the
browser 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, such as webpack or greenkeeper.
This project is a part of the rust-wasm group. You can find more info by visiting that repo!
🔮 Prerequisities
This project requires Rust 1.30.0 or later.
🎙️ Commands
init
(⚠️ DEPRECATED): This command has been deprecated since release0.5.0
, in favor ofbuild
.0.4.2
and previous use this command.build
: Generate an npm wasm pkg from a rustwasm cratepack
andpublish
: Create a tarball of your rustwasm pkg and/or publish to a registry
📝 Logging
wasm-pack
uses env_logger
to produces logs when wasm-pack
runs.
To configure your log level, use the RUST_LOG
environment variable. For example:
RUST_LOG=info wasm-pack build
👯 Contributing
Read our guide on getting up and running for developing wasm-pack
, and
check out our contribution policy.
⚡ Quickstart Guide
- Write a crate in Rust.
- Add
wasm-bindgen
to yourCargo.toml
:
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
- Add this to the top of your
src/lib.rs
:
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
- Annotate your public functions with
#[wasm_bindgen]
, for example:
#[wasm_bindgen]
extern {
pub fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet(name: &str) {
alert(&format!("Hello, {}!", name));
}
- Install this tool:
cargo install wasm-pack
- Run
wasm-pack build
, optionally, pass a path to a dir or a scope (see above for details) - This tool generates files in a
pkg
dir - To publish to npm, run
wasm-pack publish
. You may need to login to the registry you want to publish to. You can login usingwasm-pack login
.