Native Messaging WASI host benchmark
Each host is sent a Native Messaging protocol frame (4-byte LE length + UTF-8 JSON) carrying
Array(N) over stdin under wasmtime; the echoed frames are validated as JSON and the
round-trip is timed. Headless equivalent of the connectNative benchmark in
test_wasi.js. Two sizes: ~1 MiB (a typical message) and ~64 MiB (Native Messaging
extension→host maximum). Lower wall(s) is faster; peak(MB) is the host
process's peak RSS — at 64 MiB it separates streaming hosts (flat memory) from those that hold
the whole body. Best of 3 runs.
~1.00 MiB — Array(209715)
| host | wall(s) | peak(MB) | frames | elems | validJSON | match(N) |
| nm_warpo | 0.007 | 29 | 1 | 209715 | true | true |
| nm_assemblyscript | 0.008 | 29 | 1 | 209715 | true | true |
| nm_c_wasi | 0.008 | 29 | 1 | 209715 | true | true |
| nm_tinygo_wasi | 0.008 | 29 | 1 | 209715 | true | true |
| nm_zig_wasi | 0.008 | 31 | 1 | 209715 | true | true |
| nm_rust_wasi | 0.009 | 29 | 1 | 209715 | true | true |
| nm_javy | 0.023 | 35 | 1 | 209715 | true | true |
| nm_go_wasi | 0.024 | 40 | 1 | 209715 | true | true |
| nm_cpp_wasi | 0.027 | 30 | 1 | 209715 | true | true |
~64.00 MiB — Array(13421760)
| host | wall(s) | peak(MB) | frames | elems | validJSON | match(N) |
| nm_c_wasi | 0.117 | 92 | 65 | 13421760 | true | true |
| nm_zig_wasi | 0.123 | 94 | 65 | 13421760 | true | true |
| nm_warpo | 0.125 | 157 | 65 | 13421760 | true | true |
| nm_rust_wasi | 0.135 | 92 | 65 | 13421760 | true | true |
| nm_assemblyscript | 0.139 | 158 | 65 | 13421760 | true | true |
| nm_go_wasi | 0.146 | 166 | 65 | 13421760 | true | true |
| nm_javy | 0.159 | 100 | 65 | 13421760 | true | true |
| nm_tinygo_wasi | 0.177 | 156 | 65 | 13421760 | true | true |
| nm_cpp_wasi | 0.843 | 92 | 65 | 13421760 | true | true |
Generated 2026-09-29T13:49:59.320Z by ci/benchmark.mjs · each table sorted fastest first.