Compile targets for WebAssembly

There are several Rust compiler targets for WebAssembly. They differ because different WebAssembly VMs supports different extensions. For example, some WebAssembly VMs have access the WASI extension that allows access to system resources such as the file system. The wasm32 target is the most general target that produces plain WebAssembly bytecode that can run on any WebAssembly VM.

To add the wasm32 target to the compiler toolchain, do the following on your operating system's command line.

$ rustup target add wasm32-unknown-unknown
$ rustup override set nightly
$ rustup target add wasm32-unknown-unknown --toolchain nightly

Check out the complete example source code here.

Now, create a Rust library project in cargo, and create a public function like the following.

#[no_mangle]
pub extern fn triple(x: i32) -> i32 {
  return 3 * x;
}

You can build the project into WebAssembly bytecode using cargo.

$ cargo +nightly build --target wasm32-unknown-unknown --release

The compiled WebAssembly bytecode application is a single file with the wasm extension. For example, here is the wasm file from our example target/wasm32-unknown-unknown/release/my_project_name.wasm.