Inspecting
Static analysis
- Twiggy | repo: Code size profiler, analyzes a binary's call graph.
- Manticore | repo, article: Symbolic execution of WebAssembly binaries.
- Octopus | repo: Security analysis framework for WebAssembly modules and Smart Contracts.
- Wassail | repo: A toolkit to perform both lightweight and heavyweight static analysis of WebAssembly modules.
- wasm-opcodecnt | part of
WABT: Count wasm opcode usage statistics.
Manipulating (optimization, transformation, instrumentation)
- wasm-opt | part of
Binaryen:
- Transform binary for asynchronous execution (read more in this article):
wasm-opt test.wasm --asyncify -O3 -o asyncified.wasm
- Instrument binary for dynamic execution tracing:
wasm-opt test.wasm --instrument-memory --instrument-locals --log-execution -o instrumetred.wasm
-
wizer | repo: Don't wait for your Wasm module to initialize itself, pre-initialize it! Wizer instantiates your WebAssembly module, executes its initialization function, and then snapshots the initialized state out into a new WebAssembly module.
- wasm2c | part of
WABT: Takes a WebAssembly module and produces an equivalent (and runnable) C source and header.
- wasm-snip | repo: Replaces a WebAssembly function's body with an
unreachable.
- wasmonkey | repo: Magically turns exported WASM functions into imported functions.
- wasm-meter | npm, repo: Injects metering into webassembly binaries. This counts computation time for a given program in units of
gas (and allows limiting it).
- CROW | repo: The Wasm superdiversifier. It takes C source code or LLVM bitcode as input and generates several functionally equivalent, but diverse Wasm binaries.
Dynamic analysis (tracing, profiling)
- wasm3-strace | wapm, repo: Structured, seamless tracing of arbitrary WebAssembly/WASI execution.
- Wasabi | home, repo: "WebAssembly analysis using binary instrumentation", a dynamic analysis framework.
- wasmsign2 | repo: A tool to add and verify digital signatures to/from WASM binaries.
- swam | repo: A WASM interpreter with advanced tracing capabilities.
Source-level debugging
- wasminspect | repo: An interactive and self-contained debugger for WebAssembly/WASI.
Tool development
- Tool Conventions | docs: Documents describing conventions useful for coordinating interoperability between wasm-related tools.
- wasm2json, json2wasm | npm, repo: A small toolkit for converting wasm binaries into json and back. Incredibly helpful for experimenting and creating your own transformations.
- walrus | repo: Rust library for performing WebAssembly transformations in a robust and ergonomic fashion.
- wasp | repo: C++ library designed to make it easy to work with WebAssembly modules.
- Binaryen.js | repo: A port of Binaryen to the Web, allowing you to generate WebAssembly using JavaScript.
- wasm-tools | repo: Rust tooling for low-level manipulation of WebAssembly modules.
wasm-smith test case generator is of particular interest.
wasm-shrink shrinks a Wasm file while preserving an interesting property (such as triggering a bug).
-
wasm-debug | repo, crate: A runtime-independent Rust library that provides functionality to read, transform, and write DWARF section.
- witx-codegen | repo: A code generator to access WebAssembly standard APIs from different programming languages. Can also generate documentation.
Reading
Articles/Blogs/Essays
Debugging
Reference
- WebAssembly Opcode Table | docs
Tags:
platform
tool
web assembly
Last modified 06 December 2025