• Stars
    star
    453
  • Rank 96,573 (Top 2 %)
  • Language
  • Created over 3 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ˜Ž A curated list of awesome, language-agnostic WebAssembly tools

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

More Repositories

1

TinyGSM

A small Arduino library for GSM modules, that just works
C++
1,935
star
2

StandWithUkraine

#StandWithUkraine banner and related documents
JavaScript
1,394
star
3

miband-js

MiBand 2 JS library for Node.JS and HTML5 (WebBluetooth)
JavaScript
342
star
4

ViperIDE

An innovative MicroPython / CircuitPython IDE for Web and Mobile
Python
341
star
5

blynk-library-python

Blynk library for Python. Works with Python 2, Python 3, MicroPython.
Python
284
star
6

muon

ยตON - a compact and simple binary object notation
Python
244
star
7

blynk-library-js

Blynk library for JS. Works with Browsers, Node.js, Espruino.
JavaScript
215
star
8

node-inline-cpp

Inline C++ with Node.js
JavaScript
168
star
9

wasm2native

Turn WASI apps into native executables
C
117
star
10

Preferences

Preferences library for Arduino, ESP8266, RP2040, Particle, Realtek Ameba
C
69
star
11

blynk-library-particle

Blynk library for Particle Core, Photon, Electon, P0, P1, RedBear Duo etc.
C++
46
star
12

wasm3_dino_rpi_pico

WebAssembly Dino game for PPi Pico
WebAssembly
45
star
13

interp

Interpreter experiment. Testing dispatch methods: Switching, Direct/Indirect Threaded Code, Tail-Calls and Inlining
C
43
star
14

Wasm3_RGB_Lamp

Animating an RGB lamp, using WebAssembly!
C++
42
star
15

blynk-library-lua

Blynk library for Lua. Works with Lua 5.1+, LuaJIT, NodeMCU.
Lua
41
star
16

w600tool

Firmware upload tool for Winner Micro W600 & W601 WiFi
Python
38
star
17

StreamDebugger

StreamDebugger allows easier debugging of Serial-based communication on Arduino, like AT command interface in ESP8266, SIM800, SIM900, and other GSM modules
C++
35
star
18

randomart

Generative WebGL Random Art renderer
JavaScript
31
star
19

ESP32_PPPoS

PPP over Serial for ESP32
C++
27
star
20

serial-server

Simple serial port server
JavaScript
26
star
21

GY80

Arduino/Processing sketch for GY80 9DOF AHRS
Arduino
22
star
22

UNO-R4-WiFi-freedom

UNO R4 WiFi set free!
C++
20
star
23

JIDL

Simple, flexible, JSON-based Interface Definition Language
Python
18
star
24

blynk-library-openwrt

OpenWRT packages for Blynk C++ library
Makefile
18
star
25

blynk-pc-remote

This app allows you to control your PC remotely using the Blynk App.
JavaScript
13
star
26

espruino-await

async/await example for Espruino
JavaScript
11
star
27

OpenWRT-Espruino-packages

Espruino package for OpenWRT
Makefile
10
star
28

blynk-tools

Tools for working with Blynk IoT Platform
JavaScript
8
star
29

blynk-library-ez-connect

Blynk example for Marvellยฎ EZ-Connectโ„ข MW302
C++
6
star
30

pypp

Python PreProcessor
Python
6
star
31

wasm2mpy

Running WebAssembly as a native MicroPython module
C
4
star
32

vshymanskyy

4
star
33

aiodns

A small async DNS client for MicroPython
Python
4
star
34

ESP_UNO_R4

C
4
star
35

TurtlOS

educational os project
C++
3
star
36

blynk-community-map

JavaScript
3
star
37

xplat

C++ cross-platform abstraction library
C++
1
star
38

vshymanskyy.github.io

1
star
39

bronyk

bronyk robot control system
C++
1
star
40

lbm-micropython

LoRa Basic Modem integration for MicroPython
C
1
star
41

kad

kademlia overlay network implementation
C++
1
star