A novel runtime that balances compile time, memory usage, and execution speed for a simply wonderful experience.
$ curl -fsSL https://install.wago.sh/unix | sh
PS> irm https://install.wago.sh/ps | iex
export function fib(n: i32): i64 { if (n < 2) return <i64>n return fib(n - 1) + fib(n - 2) }
;; fib — recursion across the call/return boundary (module (func $fib (export "fib") (param $n i32) (result i64) local.get $n i32.const 2 i32.lt_s (if (result i64) (then local.get $n i64.extend_i32_s ) (else local.get $n i32.const 1 i32.sub call $fib local.get $n i32.const 2 i32.sub call $fib i64.add ) ) ) )
; objdump -M intel · wago Railshot backend · 163 bytes 0: mov rbx,rsi ; host adapter 3: push rcx 4: mov rax,QWORD PTR [rdi] ; load n 7: call 0x11 ; enter fib c: pop rcx d: mov QWORD PTR [rcx],rax ; write result 10: ret 11: sub rsp,0x18 ; internal entry 18: mov rsi,QWORD PTR [rbx-0x48] 1c: cmp rsp,rsi ; stack guard 1f: jb 0x80 25: mov r12d,eax 28: mov DWORD PTR [rsp],r12d 2c: cmp r12d,0x2 ; n < 2? 30: jge 0x3e 36: movsxd rbp,r12d ; base case 39: jmp 0x75 3e: mov edi,r12d 41: sub edi,0x1 ; n - 1 44: mov rax,rdi 47: call 0x11 ; fib(n - 1) 4c: mov rdi,rax 4f: mov r12d,DWORD PTR [rsp] 53: mov esi,r12d 56: sub esi,0x2 ; n - 2 59: mov QWORD PTR [rsp+0x8],rdi 5e: mov rax,rsi 61: call 0x11 ; fib(n - 2) 66: mov rdi,rax 69: mov r12d,DWORD PTR [rsp] 6d: mov rbp,rdi 70: add rbp,QWORD PTR [rsp+0x8] ; sum 75: mov rax,rbp 78: add rsp,0x18 7f: ret 80: mov eax,0x0 ; cold trap path 85: jmp 0x8a 8a: mov rsi,QWORD PTR [rbx-0x68] 8e: mov DWORD PTR [rsi+0x10],0x1 95: mov DWORD PTR [rsi+0x14],eax 98: mov DWORD PTR [rsi],0xd 9e: mov rsp,QWORD PTR [rbx-0x18] a2: ret
// compile, instantiate & run wasm, no cgo compiled, err := wago.Compile(nil, wasmBytes) if err != nil { panic(err) } defer compiled.Close() inst, err := wago.Instantiate(compiled) if err != nil { panic(err) } defer inst.Close() out, err := inst.Invoke("fib", wago.I32(30)) if err != nil { panic(err) } fmt.Println(wago.AsI64(out[0])) // → 832040
It reads, checks, and compiles WebAssembly to native code — all in pure Go. No C, no cgo.
Compiles straight to native code for both architectures in milliseconds, with no warmup.
Full support for the WebAssembly 1.0, 2.0, and 3.0 standard, on by default.
Absurdly fast and light. Low memory, high throughput, and competative performance.
Compile wasm into native standalone executables. Great for CLIs.
Anything is possible. Need HTTP? Install it. Want AVX-512 support? Implement it. We also have a package manager to boot.
We run the Official WebAssembly test suite along with the entire wazero and wasmtime suites. We pass everything.
wago tracks the official
WebAssembly/testsuite
file by file. The numbers here come straight from
the engine's own test run.
Add wago to your module and embed it, or drive the
engine straight from the CLI to run, compile, or
validate any .wasm.
$ curl -fsSL https://install.wago.sh/unix | sh
PS> irm https://install.wago.sh/ps | iex
The whole process, from spawn to exit, timed end-to-end across six real workloads. Compare process startup and execution together on the architecture that matches your machine.
The 40-workload runtime suite, including 21 command programs, was measured on both architectures at Wago 4651e8cd (September 23, 2026): three samples per measurement, shown as medians. The boundary rows use a caller-owned session held across repeated calls; opening and closing that session is excluded from each timed call. Compare values within an architecture. Every displayed workload has measurements from both Wago and Wazero; the full correctness corpus remains separate. The end-to-end startup sweep above was last measured September 10, 2026. See the benchmark corpus & methodology.
Need HTTP? Install a plugin. Need WASI? Add it. Need new host bindings? Build them with the plugin API.
Complete Preview 1 and Preview 2 support, including unstable compatibility.
Component execution, Canonical ABI linking, and typed interfaces for Wago.
Capability-gated TCP, UDP, DNS, and network protocol support with bounded host policy.
Bounded, composable WebAssembly worker primitives for concurrent plugin workloads.
Standalone Emscripten compatibility, plus Go js/wasm and Ruby JS-ABI execution.
Portable v256 and v512 instructions with native AVX-512, AVX2, and NEON lowering.
Ask questions, share what you're building, and follow wago's progress with the community.
Join Discord ↗Apache-licensed and built in the open. Add it to your module in one command and call straight into native wasm, no cgo.