Skip to content

vshymanskyy/awesome-wasm-tools

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
March 18, 2021 21:43
March 19, 2021 22:02
August 2, 2022 20:00

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.

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

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