binaryen
by
WebAssembly

Description: Optimizer and compiler/toolchain library for WebAssembly

View on GitHub ↗

Summary Information

Updated 50 minutes ago
Added to GitGenius on November 14th, 2024
Created on October 29th, 2015
Open Issues & Pull Requests: 545 (+0)
Number of forks: 869
Total Stargazers: 8,546 (+0)
Total Subscribers: 174 (+0)

Issue Activity (beta)

Open issues: 330
New in 7 days: 0
Closed in 7 days: 0
Avg open age: 1,248 days
Stale 30+ days: 326
Stale 90+ days: 301

Recent activity

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

Top labels

  • help wanted (49)
  • good first bug (15)
  • interpreter (7)
  • enhancement (6)
  • plugins (2)
  • LLVM wasm backend (1)
  • Poppy IR (1)
  • bug (1)

Most active issues this week

No issue events were indexed in the last 7 days.

Repository Insights (GitGenius)

Median issue/PR response: 287.4 days
Mean response time: 931.7 days
90th percentile: 2831.3 days
Tracked items: 770

Most active contributors

Detailed Description

Binaryen is a compiler and toolchain infrastructure library for WebAssembly written in C++. It functions as both a standalone optimizer and a component library used by multiple major language toolchains. The project is designed around three core principles: making compilation to WebAssembly easy through simple APIs, fast through parallel processing and compact data structures, and effective through numerous optimization passes that reduce code size and improve performance.

The repository serves as a critical infrastructure component for the WebAssembly ecosystem. Major toolchains integrate Binaryen as a component, including Emscripten for C/C++ compilation, wasm-pack for Rust, J2CL and J2Wasm for Java, Kotlin/Wasm, Flutter for Dart, and wasm_of_ocaml for OCaml. Additionally, several compilers use Binaryen as a library, including AssemblyScript which compiles TypeScript variants to WebAssembly, wasm2js which converts WebAssembly to JavaScript, Asterius for Haskell compilation, and Grain for its own language compilation.

The core of Binaryen is its intermediate representation, which is designed to be both flexible for optimization and closely aligned with WebAssembly itself. The IR uses a tree structure rather than a stack machine format, making it convenient for optimization passes while remaining simple to convert to and from WebAssembly binary format. Binaryen IR includes features not present in standard WebAssembly, such as an unreachable type and support for tuple types in multivalue contexts, which enable local transformations without requiring global context awareness.

Beyond optimization, Binaryen provides comprehensive toolchain utilities. It can parse and emit WebAssembly, allowing users to load WebAssembly, optimize it, and re-emit it as a wasm-to-wasm optimizer. The library includes a WebAssembly interpreter capable of running spec tests, integrates with Emscripten for complete C and C++ compilation pipelines, and can polyfill WebAssembly by running it in a JavaScript-compiled interpreter for browsers lacking native support.

The project maintains active development with significant contributor engagement. According to GitGenius tracking data, tlively leads with 918 recorded events and kripken follows with 671 events, indicating sustained core team involvement. The repository shows median issue and pull request response latency of approximately 6896 hours with a mean of 22359 hours across 770 tracked items. The most frequently used issue labels are help wanted with 12 instances, interpreter with 7, and good first bug with 6, suggesting the project actively welcomes community contributions and maintains accessible entry points for new contributors.

The repository's classification spans binary optimization, compilation tools, static analysis, testing frameworks, debugging, bytecode manipulation, transpilers, LLVM backend integration, validation, and verification. This breadth reflects Binaryen's role as a comprehensive WebAssembly infrastructure library. The project maintains connections with other major repositories including rust-lang/rust, microsoft/vscode, and microsoft/typescript through overlapping contributors, indicating its importance across multiple language ecosystems and development tool chains.

binaryen
by
WebAssemblyWebAssembly/binaryen

Repository Details

Fetching additional details & charts...