Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vshymanskyy/awesome-wasm-tools
😎 A curated list of awesome, language-agnostic WebAssembly tools
https://github.com/vshymanskyy/awesome-wasm-tools
List: awesome-wasm-tools
awesome instruments language-agnostic tools wasi wasm webassembly
Last synced: 24 days ago
JSON representation
😎 A curated list of awesome, language-agnostic WebAssembly tools
- Host: GitHub
- URL: https://github.com/vshymanskyy/awesome-wasm-tools
- Owner: vshymanskyy
- Created: 2021-03-17T11:52:05.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-08-02T17:00:30.000Z (over 2 years ago)
- Last Synced: 2024-05-22T06:01:27.089Z (7 months ago)
- Topics: awesome, instruments, language-agnostic, tools, wasi, wasm, webassembly
- Homepage:
- Size: 346 KB
- Stars: 440
- Watchers: 11
- Forks: 19
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
- ultimate-awesome - awesome-wasm-tools - 😎 A curated list of awesome, language-agnostic WebAssembly tools. (Other Lists / Monkey C Lists)
README
[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://vshymanskyy.github.io/StandWithUkraine)
# Awesome WebAssembly Tools [![Awesome](https://awesome.re/badge.svg)](https://awesome.re)
A collection of useful, language-agnostic WebAssembly development tools.
[](https://raw.githubusercontent.com/vshymanskyy/awesome-wasm-tools/main/images/code-explorer.png)
[](https://raw.githubusercontent.com/vshymanskyy/awesome-wasm-tools/main/images/wasm-opt-callgraph.svg)
[](https://raw.githubusercontent.com/vshymanskyy/awesome-wasm-tools/main/images/wasm3-strace.png)
[](https://raw.githubusercontent.com/vshymanskyy/awesome-wasm-tools/main/images/chrome-dev-tools.png)👉 Contributions are welcome! Please read the [contribution guidelines](CONTRIBUTING.md). 😎
## Inspecting
- **WebAssembly Code Explorer** | [online tool](https://wasdk.github.io/wasmcodeexplorer/)
A simple binary explorer with neat binary code highlighting.- **Weave** | [online tool](https://evmar.github.io/weave)
Another simple binary explorer.- **wasm-opt** | part of [`Binaryen`](https://github.com/WebAssembly/binaryen)
- Color output of s-expression format:
`wasm-opt --print test.wasm`
- Plot the callgraph using `Graphviz`:
`wasm-opt --print-call-graph test.wasm | dot -Tpng -o callgraph.png`
- Dump DWARF debug info sections:
`wasm-opt --dwarfdump test.wasm`
- Print function metrics:
`wasm-opt --func-metrics test.wasm`- **wasm-decompile** | part of [`WABT`](https://github.com/WebAssembly/wabt), [article](https://v8.dev/blog/wasm-decompile)
`wasm-decompile` decompiles a wasm binary into readable code. It generates output that tries to look like a "very average programming language" while still staying close to the wasm it represents.- **wasmdec** | [repo](https://github.com/wwwg/wasmdec), [online tool](https://wwwg.github.io/web-wasmdec/)
Converts WebAssembly binaries to C. Similar to `wasm2c`.- **wasp** | [repo](https://github.com/WebAssembly/wasp)
Generate callgraphs, CFG and DFG graphs for wasm functions.- **wasm-objdump** | part of [`WABT`](https://github.com/WebAssembly/wabt)
Print low-level details about a `.wasm` binary and each of its sections.- **wasm-nm** | [repo](https://github.com/fitzgen/wasm-nm)
List the imported, exported, and private function symbols defined within a `.wasm` binary.## Static analysis
- **Twiggy** | [repo](https://github.com/rustwasm/twiggy)
Code size profiler, analyzes a binary's call graph.- **Manticore** | [repo](https://github.com/trailofbits/manticore), [article](https://blog.trailofbits.com/2020/01/31/symbolically-executing-webassembly-in-manticore/)
Symbolic execution of WebAssembly binaries.
- **Octopus** | [repo](https://github.com/pventuzelo/octopus)
Security analysis framework for WebAssembly modules and Smart Contracts.
- **Wassail** | [repo](https://github.com/acieroid/wassail)
A toolkit to perform both lightweight and heavyweight static analysis of WebAssembly modules.- **wasm-opcodecnt** | part of [`WABT`](https://github.com/WebAssembly/wabt)
Count wasm opcode usage statistics.## Manipulating (optimization, transformation, instrumentation)
- **wasm-opt** | part of [`Binaryen`](https://github.com/WebAssembly/binaryen)
- Transform binary for asynchronous execution (read more in [this article](https://kripken.github.io/blog/wasm/2019/07/16/asyncify.html)):
`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](https://github.com/bytecodealliance/wizer)
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`](https://github.com/WebAssembly/wabt/blob/main/wasm2c/README.md),
[article 1](https://kripken.github.io/blog/wasm/2020/07/27/wasmboxc.html),
[article 2](https://petersalomonsen.com/articles/wasm2c/wasm2c.html)
Takes a WebAssembly module and produces an equivalent (and runnable) C source and header.
- **wasm-snip** | [repo](https://github.com/rustwasm/wasm-snip)
Replaces a WebAssembly function's body with an `unreachable`.- **wasmonkey** | [repo](https://github.com/jedisct1/wasmonkey)
Magically turns exported WASM functions into imported functions.- **wasm-meter** | [npm](https://www.npmjs.org/package/wasm-metering), [repo](https://github.com/ewasm/wasm-metering)
Injects metering into webassembly binaries. This counts computation time for a given program in units of `gas` (and allows limiting it).- **CROW** | [repo](https://github.com/KTH/slumps/tree/master/crow)
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](https://wapm.io/package/vshymanskyy/wasm3), [repo](https://github.com/wasm3/wasm3)
Structured, seamless tracing of arbitrary WebAssembly/WASI execution.- **Wasabi** | [home](http://wasabi.software-lab.org/), [repo](https://github.com/danleh/wasabi)
"WebAssembly analysis using binary instrumentation", a dynamic analysis framework.- **wasmsign2** | [repo](https://github.com/wasm-signatures/wasmsign2)
A tool to add and verify digital signatures to/from WASM binaries.- **swam** | [repo](https://github.com/satabin/swam/)
A WASM interpreter with advanced tracing capabilities.## Source-level debugging
- **Chrome DevTools** | [article](https://developers.google.com/web/updates/2020/12/webassembly)
- **LLDB** | [article](https://hacks.mozilla.org/2019/09/debugging-webassembly-outside-of-the-browser/)
- **wasminspect** | [repo](https://github.com/kateinoigakukun/wasminspect)
An interactive and self-contained debugger for WebAssembly/WASI.## Tool development
- **Tool Conventions** | [docs](https://github.com/WebAssembly/tool-conventions)
Documents describing conventions useful for coordinating interoperability between wasm-related tools.- **wasm2json, json2wasm** | [npm](https://www.npmjs.com/package/wasm-json-toolkit), [repo](https://github.com/ewasm/wasm-json-toolkit)
A small toolkit for converting wasm binaries into json and back. Incredibly helpful for experimenting and creating your own transformations.- **walrus** | [repo](https://github.com/rustwasm/walrus)
Rust library for performing WebAssembly transformations in a robust and ergonomic fashion.- **wasp** | [repo](https://github.com/WebAssembly/wasp)
C++ library designed to make it easy to work with WebAssembly modules.- **Binaryen.js** | [repo](https://github.com/AssemblyScript/binaryen.js)
A port of Binaryen to the Web, allowing you to generate WebAssembly using JavaScript.- **wasm-tools** | [repo](https://github.com/bytecodealliance/wasm-tools)
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](https://github.com/wasmerio/wasm-debug), [crate](https://crates.io/crates/wasm-debug)
A runtime-independent Rust library that provides functionality to read, transform, and write DWARF section.- **witx-codegen** | [repo](https://github.com/jedisct1/witx-codegen)
A code generator to access WebAssembly standard APIs from different programming languages. Can also generate documentation.- **Articles**
- [Fuzzers & Reducers as Productivity Tools](https://kripken.github.io/blog/binaryen/2019/06/11/fuzz-reduce-productivity.html)## Other
- **WebAssembly Opcode Table** | [docs](https://pengowray.github.io/wasm-ops/)