wabt
by
WebAssembly

Description: The WebAssembly Binary Toolkit

View on GitHub ↗

Summary Information

Updated 32 seconds ago
Added to GitGenius on November 14th, 2024
Created on September 14th, 2015
Open Issues & Pull Requests: 227 (+0)
Number of forks: 818
Total Stargazers: 8,058 (+0)
Total Subscribers: 149 (+0)

Issue Activity (beta)

Open issues: 180
New in 7 days: 0
Closed in 7 days: 1
Avg open age: 1,121 days
Stale 30+ days: 179
Stale 90+ days: 171

Recent activity

Opened in 7 days: 0
Closed in 7 days: 0
Comments in 7 days: 0
Events in 7 days: 0

Top labels

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

Repository Insights (GitGenius)

Median issue/PR response: 9.3 hours
Mean response time: 362.7 days
90th percentile: 1902.7 days
Tracked items: 145

Most active contributors

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.

According to GitGenius activity tracking, the repository shows median issue and pull request response latency of 9.3 hours across 145 tracked items, though mean latency is significantly higher at 8704.3 hours, indicating occasional slower responses on some items. The most active issue labels are wasm-decompile with 10 tracked items, sanitizer failures with 5 items, and good-first-bug with 4 items. Primary contributors tracked by GitGenius include sbc100 with 181 events, SoniEx2 with 54 events, and keithw with 39 events. The repository shares overlapping contributors with microsoft/vscode, rust-lang/rust, and webassembly/binaryen, indicating integration with major WebAssembly ecosystem projects.

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.

wabt
by
WebAssemblyWebAssembly/wabt

Repository Details

Fetching additional details & charts...