One artifact
A game is a single .wasm file. The same bytes run in a native window (wasmtime + wgpu), in any WebGPU browser, and headless in Node for CI.
Games compile to one WebAssembly file. Small native and browser runners give them a stable interface for graphics, sound, input and networking.
| Runners | gasm-run: native (Rust: wasmtime, wgpu, winit, cpal, gilrs), with AOT compilation for no-JIT platforms. Browser runner: WebAssembly, WebGPU, AudioWorklet, Gamepad API. Headless Node runner. |
| Games | Sumo: 3D two-player arena with lockstep netcode. NES: a complete emulator (tetanes-core) passing the blargg CPU, timing and APU tests. Triangle and test pattern: minimal examples in Rust and C. |
| Tools | gasm-relay (WebSocket rooms), the gasm Rust crate, gasm.h for C, cross-runner determinism and network test suites. |
Measured on an Apple M1 Pro. The NES emulator compiled to wasm runs at 1.5× (wasmtime AOT) and 1.6× (V8) the time of the same Rust code built natively. That's about 9× faster than the console itself. Sumo holds 60 fps with 4× MSAA on both runners.
gasm is a proof of concept. ABI v0 is experimental and will change. See the roadmap: rollback netplay, storage, textures, and a wasm2c runner for consoles.