Skip to content

😎 A curated list of awesome, language-agnostic WebAssembly tools

Notifications You must be signed in to change notification settings

vshymanskyy/awesome-wasm-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

52 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Stand With Ukraine

Awesome WebAssembly Tools Awesome

A collection of useful, language-agnostic WebAssembly development tools.

πŸ‘‰ Contributions are welcome! Please read the contribution guidelines. 😎

Inspecting

  • WebAssembly Code Explorer | online tool
    A simple binary explorer with neat binary code highlighting.

  • Weave | online tool
    Another simple binary explorer.

  • wasm-opt | part of 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, article
    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, online tool
    Converts WebAssembly binaries to C. Similar to wasm2c.

  • wasp | repo
    Generate callgraphs, CFG and DFG graphs for wasm functions.

  • wasm-objdump | part of WABT
    Print low-level details about a .wasm binary and each of its sections.

  • wasm-nm | repo
    List the imported, exported, and private function symbols defined within a .wasm binary.

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, article 1, article 2
    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

  • Chrome DevTools | article

  • LLDB | article

  • 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.

  • Articles

Other

  • WebAssembly Opcode Table | docs

About

😎 A curated list of awesome, language-agnostic WebAssembly tools

Topics

Resources

Stars

Watchers

Forks