WebAssembly
44.1 Freestanding WASM (Browser)
// math.zig
export fn add(a: i32, b: i32) i32 { return a + b; }
var buffer: [1024]u8 = undefined;
export fn getBufferPtr() [*]u8 { return &buffer; }
extern "env" fn consoleLog(ptr: [*]const u8, len: usize) void; // imported from JS
export fn greet() void {
const msg = "Hello from Zig/WASM";
consoleLog(msg.ptr, msg.len);
}zig build-exe math.zig -target wasm32-freestanding -fno-entry -rdynamic -O ReleaseSmallconst { instance } = await WebAssembly.instantiateStreaming(fetch("math.wasm"), {
env: { consoleLog: (ptr, len) => console.log(new TextDecoder().decode(
new Uint8Array(instance.exports.memory.buffer, ptr, len))) }
});
console.log(instance.exports.add(2, 3));44.2 WASI
std.heap.wasm_allocator, @wasmMemoryGrow. Zig produces very small WASM modules.
Used for plugins (e.g., Extism/Zig PDK), edge functions, and games.
zig build-exe app.zig -target wasm32-wasi
wasmtime app.wasm