WebAssembly/wabt

The WebAssembly Binary Toolkit

View on GitHub ↗Jump to charts ↓Open shareable report

Summary Information

Updated 51 minutes ago
Added to GitGenius on November 14th, 2024
Created on September 14th, 2015
Open Issues & Pull Requests: 226 (+0)
Number of forks: 820
Total Stargazers: 8,104 (+0)
Total Subscribers: 146 (+0)

Repository Insights (GitGenius)

Median issue/PR response: 10.7 hours
Mean response time: 201.1 days
90th percentile: 682.8 days
Tracked items: 133

How this project is maintained

Around half of the issues opened in the past year never receive a reply. 77% of open issues come from outside the core team, so the backlog reflects real-world use rather than internal planning. Only 5% of issues opened in the past year have been closed. Three people close 66% of everything that gets resolved.

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 178
New in 7 days: 4
Closed in 7 days: 3
Avg open age: 1,127 days
Stale 30+ days: 174
Stale 90+ days: 170

Recent activity

Opened in 7 days: 3
Closed in 7 days: 3
Comments in 7 days: 4
Events in 7 days: 12

Top labels

  • good-first-bug (17)
  • sanitizer failures (14)
  • wasm-decompile (10)
  • help wanted (8)
  • bug (3)
  • enhancement (3)
  • interpreter (2)

Detailed Description

WABT, the WebAssembly Binary Toolkit, is a comprehensive suite of command-line tools written in C++ for manipulating WebAssembly binaries and text formats. The toolkit provides bidirectional conversion between WebAssembly's binary format and its human-readable text format, along with numerous utilities for inspection, validation, interpretation, and transformation of WebAssembly modules.

The core functionality includes wat2wasm, which translates WebAssembly text format to binary, and wasm2wat, which performs the inverse operation. The toolkit also provides wasm-objdump for inspecting binary structure similar to traditional objdump utilities, and wasm-interp, a stack-based interpreter that can decode and execute WebAssembly binaries. Additional tools include wat-desugar for normalizing text format syntax, wasm2c for converting binaries to C source code, wasm-strip for removing binary sections, wasm-validate for syntax checking, wast2json for converting spec test formats, wasm-stats for generating module statistics, and spectest-interp for running WebAssembly specification tests.

A distinguishing design principle of WABT is its emphasis on full fidelity and compliance with the WebAssembly specification, including support for 1:1 round-trips with no instruction changes. Unlike Binaryen, WABT does not aim to provide optimization or serve as a higher-level compiler target. The toolkit is specifically designed for integration into other systems and toolchains that need to manipulate WebAssembly files, with C++ implementation chosen for easier system integration compared to the specification interpreter.

WABT supports an extensive range of WebAssembly proposals through command-line flags. These include exception handling, mutable globals, nontrapping float-to-int conversions, sign extension, SIMD, threads, multi-value returns, tail calls, bulk memory operations, reference types, memory64, multi-memory, extended constants, relaxed SIMD, custom page sizes, compact imports, function references, and wide arithmetic. Support varies across different tools, with some proposals available only for binary or text formats, and others limited to specific tools like wasm2c.

The repository has been compiled to JavaScript via Emscripten, making several tools available through online demos including wat2wasm and wasm2wat converters. The toolkit supports multiple build systems including CMake, a top-level Makefile using Ninja, and Visual Studio on Windows, with configurations for various compilers including GCC, Clang, and Emscripten.

The toolkit includes comprehensive testing infrastructure with support for LLVM sanitizers including Address Sanitizer, Memory Sanitizer, Leak Sanitizer, and Undefined Behavior Sanitizer. Fuzzing support via LLVM's libFuzzer is available for testing the binary reader and reproducing errors from oss-fuzz integration.