Canonical Wago documentation
Wago facts
A static, citable answer sheet for Wago’s release state, native targets, execution model, concurrency, limits, WASI, and WebAssembly support.
What is Wago?
Wago is a WebAssembly engine implemented in Go. It decodes, validates, compiles, instantiates, and executes modules itself; it is not a Go wrapper around a C or C++ runtime.
- Implementation
- Pure Go; no cgo in the engine.
- Execution model
- Single-pass native compiler for amd64 and arm64. Wago does not ship an interpreter tier.
- Release state
- Pre-v0.1 development with nightly and canary artifacts; public stable installation is not yet claimed. There is no stable v1 API promise.
Evidence: README · feature matrix
Native runtime targets
| Target | Status | Primary evidence |
|---|---|---|
linux/amd64 | supported native runtime CI | native CI matrix |
linux/arm64 | supported native runtime CI | native CI matrix |
darwin/arm64 | supported native runtime CI | native CI matrix |
darwin/amd64 | compiler-only portable compiler/encoder checks; native JIT ABI is not claimed | native CI matrix |
windows/* | planned no native runtime target claimed | feature matrix |
“Supported” here means the native runtime, API tests, guard-page path, and corpus correctness run in CI. It does not mean every Go target is a native Wago runtime.
Concurrency contract
| Object or operation | Contract | Evidence |
|---|---|---|
| Runtime | Concurrent compile, instantiate, and execute on distinct modules/instances is race-tested. | race-tested concurrency port |
| Compiled module | Compile once and instantiate many. The public docs do not yet make a blanket goroutine-safety promise for every method. | README |
| Instance | Do not make concurrent calls on one instance. Call and result buffers are instance-owned. | public API source |
| Separate instances | Concurrent goroutines may call separate instances, but native Wasm activations are currently serialized by one process-wide lock. | native execution serialization · race-tested concurrency port |
| Memory view | Memory.Bytes() is a borrowed zero-copy view valid only while the memory and owner remain open. Callers must synchronize it against close and guest mutation. | borrowed memory-view contract |
| Host imports | Nested same-instance Wasm reentry is tested, but a complete public reentrancy contract is not yet documented. | README |
Resource limits and interruption
| Control | Status | Evidence |
|---|---|---|
| Declared linear memory | supported Runtime and policy limits cap declared memory. | README |
| Declared table entries | partial Policy limits check each table’s initial/minimum size, not a complete growth ceiling. | resource policy enforcement |
| Execution deadline | supported Context cancellation and deadlines interrupt amd64/arm64 native execution at safepoints. | public API source · feature matrix |
| Policy MaxInvokeDuration | not-published The field is reserved and not enforced; callers must use a context deadline. | resource policy enforcement |
| Aggregate live-instance memory | not-published No runtime-wide accounting contract is documented at this source commit. | README |
WASI
WASI is outside Wago core. External plugin integration exists, but this source audit did not establish a function-by-function plugin support matrix, so this page does not claim complete Preview 1 or Preview 2 coverage.
See the WASI plugin listing and README.
WebAssembly proposals
Wago’s Release 2 validation and execution gates are green. Proposal status below comes from the generated feature tracker; “planned” is not partial support.
| Proposal | Status | Evidence |
|---|---|---|
| i32 / i64 integer ops | pass | feature matrix |
| f32 / f64 ops | pass | feature matrix |
| f32 / f64 ceil / floor / trunc / nearest / copysign | pass | feature matrix |
| Conversions + reinterpret | pass | feature matrix |
| Float→int trunc NaN/overflow traps | pass | feature matrix |
| Control flow: block / loop / if / else / br / br_if / br_table / return | pass | feature matrix |
| call / call_indirect | pass | feature matrix |
| select, drop, nop, unreachable | pass | feature matrix |
| Locals | pass | feature matrix |
| Globals | pass | feature matrix |
| Linear memory load/store | pass | feature matrix |
| memory.size / memory.grow | pass | feature matrix |
| Active data segments | pass | feature matrix |
| Tables + active element segments | pass | feature matrix |
| Function imports / exports | pass | feature matrix |
| Memory / table / global imports & exports | pass | feature matrix |
| start function | pass | feature matrix |
| Sign-extension ops | pass | feature matrix |
| Non-trapping float→int | pass | feature matrix |
| Multi-value | pass | feature matrix |
| Reference types | pass | feature matrix |
| Bulk memory | pass | feature matrix |
| Fixed-width SIMD | pass | feature matrix |
| Tail calls | planned | feature matrix |
| Extended const expressions | pass | feature matrix |
| Typed function references | planned | feature matrix |
| Memory64 | planned | feature matrix |
| Multiple memories | planned | feature matrix |
| Garbage collection | planned | feature matrix |
| Exception handling | planned | feature matrix |
| Relaxed SIMD | planned | feature matrix |
| Branch hinting | pass | feature matrix |
| Custom annotations (text) | planned | feature matrix |
| JS string builtins | planned | feature matrix |
| Threads & atomics | planned | feature matrix |
| JS Promise integration | planned | feature matrix |
| Web Content Security Policy | planned | feature matrix |
| ESM integration | planned | feature matrix |
| Wide arithmetic | planned | feature matrix |
| Stack switching | planned | feature matrix |
| Compact import section | planned | feature matrix |
| Custom page sizes | planned | feature matrix |
| Custom descriptors & JS interop | planned | feature matrix |
| Relaxed dead-code validation | planned | feature matrix |
| Numeric values in WAT data | planned | feature matrix |
| Extended name section | planned | feature matrix |
| Rounding variants | planned | feature matrix |
| Compilation hints | planned | feature matrix |
| JS primitive builtins | planned | feature matrix |
| Relaxed atomics | planned | feature matrix |
| Type imports | planned | feature matrix |
| Component model | planned | feature matrix |
| C / C++ embedding API | planned | feature matrix |
| Flexible vectors | planned | feature matrix |
| Memory control | planned | feature matrix |
| Reference-typed strings | planned | feature matrix |
| Profiles | planned | feature matrix |
| Shared-everything threads | planned | feature matrix |
| Frozen values | planned | feature matrix |
| Half precision (FP16) | planned | feature matrix |
| More array constructors | planned | feature matrix |
| JIT interface | planned | feature matrix |
| Multibyte array access | planned | feature matrix |
| Type reflection (JS API) | planned | feature matrix |
| JS text-encoding builtins | planned | feature matrix |
Precompiled artifacts
Wago can serialize and load .wago compiled modules. The codec is versioned, but a stable cross-release artifact compatibility policy and cache-keyed CLI product are not yet published.
Evidence: README · public API source
Machine-readable source
facts.json is the canonical structured form of this page. Benchmark rows live in project.json; verification and proposal rollups live in stats.json.