24 releases

0.1.24 Nov 29, 2023
0.1.23 Nov 20, 2023
0.1.20 Oct 30, 2023
0.1.14 Sep 27, 2023
0.1.1 Apr 27, 2023

#1290 in WebAssembly

Download history 232/week @ 2023-08-20 248/week @ 2023-08-27 237/week @ 2023-09-03 180/week @ 2023-09-10 260/week @ 2023-09-17 251/week @ 2023-09-24 353/week @ 2023-10-01 306/week @ 2023-10-08 432/week @ 2023-10-15 430/week @ 2023-10-22 491/week @ 2023-10-29 402/week @ 2023-11-05 439/week @ 2023-11-12 428/week @ 2023-11-19 501/week @ 2023-11-26 466/week @ 2023-12-03

1,864 downloads per month
Used in wasm-tools

Apache-2.0 WITH LLVM-exception

16K SLoC


A Bytecode Alliance project

Rust tooling for low-level manipulation of WebAssembly modules


This project can be installed and compiled from source with this Cargo command:

$ cargo install wasm-tools

Additionally there are precompiled artifacts built on CI which are available for download as well.

Installation can be confirmed with:

$ wasm-tools --version

Subcommands can be explored with:

$ wasm-tools help

Tools included

The wasm-tools binary internally contains a number of subcommands for working with wasm modules. Many subcommands also come with Rust crates that can be use programmatically as well:

Tool Crate Description
wasm-tools validate wasmparser Validate a WebAssembly file
wasm-tools parse wat and wast Translate the WebAssembly text format to binary
wasm-tools print wasmprinter Translate the WebAssembly binary format to text
wasm-tools smith wasm-smith Generate a "random" valid WebAssembly module
wasm-tools mutate wasm-mutate Mutate an input wasm file into a new valid wasm file
wasm-tools shrink wasm-shrink Shrink a wasm file while preserving a predicate
wasm-tools dump Print debugging information about the binary format
wasm-tools objdump Print debugging information about section headers
wasm-tools strip Remove custom sections from a WebAssembly file
wasm-tools demangle Demangle Rust and C++ symbol names in the name section
wasm-tools compose wasm-compose Compose wasm components together
wasm-tools component new wit-component Create a component from a core wasm binary
wasm-tools component wit Extract a *.wit interface from a component
wasm-tools component embed Embed a component-type custom section in a core wasm binary
wasm-tools metadata show wasm-metadata Show name and producer metadata in a component or module
wasm-tools metadata add Add name or producer metadata to a component or module
wasm-tools addr2line Translate wasm offsets to filename/line numbers with DWARF

The wasm-tools CLI is primarily intended to be a debugging aid. The various subcommands all have --help explainer texts to describe more about their functionality as well.


As mentioned above many of the tools of the wasm-tools CLI have libraries implemented in this repository as well. These libraries are:

  • wasmparser - a library to parse WebAssembly binaries
  • wat - a library to parse the WebAssembly text format
  • wast - like wat, except provides an AST
  • wasmprinter - prints WebAssembly binaries in their string form
  • wasm-mutate - a WebAssembly test case mutator
  • wasm-shrink - a WebAssembly test case shrinker
  • wasm-smith - a WebAssembly test case generator
  • wasm-encoder - a crate to generate a binary WebAssembly module
  • wit-parser - a crate to parse and manage *.wit files and interfaces.
  • wit-component - a crate to create components from core wasm modules.
  • wasm-metadata - a crate to manipulate name and producer metadata (custom sections) in a wasm module or component.

It's recommended to use the libraries directly rather than the CLI tooling when embedding into a separate project.

C/C++ bindings

Using the CMakeLists.txt in crates/c-api, wasm-tools can be used from the wasm-tools.h header.


This project is licensed under the Apache 2.0 license with the LLVM exception. See LICENSE for more details.


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 licensed as above, without any additional terms or conditions.


A small crate to generate arbitrary WIT documents.

This crate is modeled after the wasm-smith crate but is used to generate WIT documents instead of WebAssembly modules. This crate is intended to generate "interesting" WIT package structures in addition to interesting type structures.


~93K SLoC