Watusi

A native Elixir implementation for converting WebAssembly Text (WAT) to the WebAssembly Binary Format (WASM).

Watusi provides a pure-Elixir pipeline for transforming human-readable WebAssembly into the standard binary format, supporting modern extensions and ensuring full compatibility with official tooling.

Why Watusi?

Specifications

Watusi adheres to the following standards:

Installation

Add watusi to your list of dependencies in mix.exs:

def deps do
  [
    {:watusi, "~> 0.1.0"}
  ]
end

Usage

The primary entry point is Watusi.to_wasm/2. It accepts WAT source as a string or iodata and returns the compiled WASM binary.

wat = \"\"\"
(module
  (func (export \"add\") (param $a i32) (param $b i32) (result i32)
    local.get $a
    local.get $b
    i32.add)
)
\"\"\"

wasm = Watusi.to_wasm(wat)
# <<0, 97, 115, 109, 1, 0, 0, 0, ...>>

Debug Names

You can include symbolic identifiers in the binary by passing debug_names: true. This adds a standard name custom section to the output.

wasm_with_names = Watusi.to_wasm(wat, debug_names: true)

Testing

Watusi is rigorously tested against the WebAssembly Binary Toolkit (WABT). Our test suite verifies bit-for-bit parity with wat2wasm and validates all generated output with wasm-validate.

Over 5,000 spec-compliant test vectors are included, covering core instructions and advanced extensions.

License

Watusi is released under the MIT License. See the LICENSE file for details.