wasm-tools
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
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 binarieswat
- a library to parse the WebAssembly text formatwast
- like wat
, except provides an ASTwasmprinter
- prints WebAssembly binaries in their
string formwasm-mutate
- a WebAssembly test case mutatorwasm-shrink
- a WebAssembly test case shrinkerwasm-smith
- a WebAssembly test case generatorwasm-encoder
- a crate to generate a binary
WebAssembly modulewit-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.
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.