Skip to content

Latest commit

Β 

History

54 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

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.

  • Modsurfer | home, repo
    Diagnostics and auditing tool for searching, browsing, validating, and investigating WebAssembly modules and components.

Static analysis

  • Twiggy | repo
    Code size profiler, analyzes a binary's call graph.

  • Manticore | repo, article
    Symbolic execution of WebAssembly binaries.

  • Owi | docs, repo
    Framework for WebAssembly analysis and manipulation, with a focus on practical symbolic execution.

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

  • watr | repo, npm, demo
    Light and fast WAT compiler for compiling, parsing, printing, formatting, optimizing, and polyfilling WebAssembly text.

Component Model and WIT

  • jco | docs, repo
    JavaScript-native toolchain for working with WebAssembly Components, including transpiling components to ES modules and creating components from JavaScript.

  • ComponentizeJS | repo
    Tool for turning JavaScript modules into WebAssembly components.

  • wit-bindgen | repo
    Guest language bindings generator for WIT and the WebAssembly Component Model.

  • wac | repo, docs
    WebAssembly Compositions tool for composing components together from the command line or from .wac composition files.

  • cargo-component | repo, crate
    Cargo subcommand for building Rust WebAssembly components from WIT worlds.

  • wkg, wasm-pkg-tools | repo, crate
    Tools for fetching and publishing WebAssembly components and WIT packages to OCI or Warg registries.

  • WASI-Virt | repo
    Virtualization component generator for WASI Preview 2 APIs, useful for encapsulating or restricting component access to host capabilities.

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.

Editing

  • wasm-language-tools | home, repo
    Language server and formatter for WebAssembly Text Format, with completion, diagnostics, navigation, inlay hints, and call hierarchy.

  • Hexana | docs, repo
    WebAssembly and binary analysis toolkit for JetBrains IDEs and VS Code, including structured .wasm inspection, WAT and WIT support, and run/debug integrations.

  • vscode-wit | repo
    Visual Studio Code extension for WIT, with syntax highlighting, validation, formatting, bindings generation, and component inspection.

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.

  • Binaryen | repo
    WebAssembly compiler and toolchain infrastructure with tools for parsing, emitting, optimizing, interpreting, reducing, merging, and compiling WebAssembly.

  • WABT | repo
    The WebAssembly Binary Toolkit, a suite of command-line tools for converting, inspecting, validating, and manipulating WebAssembly binaries and text.

  • Javy | repo
    JavaScript-to-WebAssembly toolchain based on QuickJS, producing compact WASI modules.

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

  • waffle | repo, crate
    Rust SSA IR framework for WebAssembly analysis and Wasm-to-Wasm transforms.

  • 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

Application frameworks and deployment

  • Extism | home, repo
    Cross-language framework for building WebAssembly-based plugin systems with host SDKs and guest PDKs.

  • Spin | home, repo
    Framework and CLI for building, running, and distributing serverless WebAssembly applications.

  • wasmCloud, wash | docs, repo
    Cloud-native platform and CLI for developing, building, publishing, and running WebAssembly components.

  • SpinKube | home, repos
    Kubernetes-native stack for deploying and operating Spin-based WebAssembly workloads.

  • runwasi | docs, repo
    Containerd shim infrastructure for running WebAssembly workloads through containerd and Kubernetes.

Other

  • WebAssembly Opcode Table | docs

  • WebAssembly Feature Status | docs
    Matrix tracking WebAssembly feature support across popular browsers, standalone runtimes, and tools.

About

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

Topics

Resources

Contributing

Stars

526 stars

Watchers

10 watching

Forks

Used by

Contributors