ConfigsMay 29, 2026·3 min read

Binaryen — WebAssembly Compiler and Optimization Toolchain

A compiler infrastructure and toolchain library for WebAssembly that provides optimization, code generation, and interpretation in a single C++ library.

Agent ready

Ready-to-run agent install

This asset can be installed after the agent chooses its runtime, checks the plan, and runs the matching command.

Native · 98/100Policy: allow
Agent surface
Any MCP/CLI agent
Kind
Skill
Install
Single
Trust
Trust: Established
Entrypoint
Binaryen Overview
Direct install command
npx -y tokrepo@latest install cadc6f7a-5b9b-11f1-9bc6-00163e2b0d79 --target codex

Run after dry-run confirms the install plan.

Introduction

Binaryen is a compiler and toolchain infrastructure library for WebAssembly, developed under the official WebAssembly GitHub organization. It provides a C/C++ API for generating, optimizing, and transforming WebAssembly modules. Binaryen powers the optimization pipeline of Emscripten and is used by multiple language compilers targeting WebAssembly.

What Binaryen Does

  • Optimizes WebAssembly modules with configurable pass pipelines (wasm-opt)
  • Converts between WAT (text) and WASM (binary) formats
  • Provides a C API for building WebAssembly modules programmatically
  • Includes a WebAssembly interpreter for testing without a browser
  • Merges, splits, and transforms WebAssembly modules

Architecture Overview

Binaryen represents WebAssembly programs as an AST-based intermediate representation (IR). The optimizer runs a configurable pipeline of passes over this IR, including dead code elimination, inlining, constant folding, and memory optimization. The IR can be lowered to binary WebAssembly or printed as WAT text. A built-in interpreter executes the IR directly for validation and testing.

Self-Hosting & Configuration

  • Install via Homebrew, apt, or build from source with CMake
  • Use wasm-opt as a standalone CLI for optimizing any .wasm file
  • Integrate the C API (binaryen-c.h) into compiler backends
  • Configure optimization levels from -O0 (none) to -Oz (size-optimized)
  • Enable specific passes individually for fine-grained control

Key Features

  • Production-grade optimizer that typically reduces wasm binary size by 10-30%
  • Used by Emscripten, AssemblyScript, Kotlin/Wasm, and other compiler toolchains
  • Fast parallel compilation and optimization pipeline
  • Support for all WebAssembly proposals including SIMD, threads, and GC
  • Fuzzer and validator tools for testing WebAssembly modules

Comparison with Similar Tools

  • wasm-tools (Bytecode Alliance) — focuses on parsing and validation; Binaryen provides deeper optimization
  • Wabt — a simpler toolkit for format conversion; Binaryen includes a full optimization pipeline
  • LLVM WebAssembly backend — generates wasm from LLVM IR; Binaryen optimizes the output further downstream
  • wasm-pack — Rust-specific build tool; Binaryen is language-agnostic and used as a post-processing step

FAQ

Q: Should I use wasm-opt on all my WebAssembly output? A: Generally yes. Running wasm-opt -O3 or -Oz after your compiler typically reduces binary size and improves runtime performance.

Q: Does Binaryen support the WebAssembly GC proposal? A: Yes. Binaryen tracks WebAssembly proposals and supports GC types, reference types, and other in-progress specifications.

Q: Can I use Binaryen from JavaScript? A: Yes. Binaryen provides binaryen.js, a compiled-to-JS version of the library that runs in Node.js or the browser.

Q: How does Binaryen relate to Emscripten? A: Emscripten uses Binaryen as its WebAssembly optimization backend. When you compile C/C++ with Emscripten, wasm-opt runs automatically.

Sources

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets