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. DOOM: doomgeneric in C, with OPL music and saves, playing any IWAD. ScummVM: point-and-click adventures, starting with the freeware Beneath a Steel Sky. SDL 3: SDL programs build unchanged; SDL's own snake and woodeneye demos. Triangle and test pattern: minimal examples in Rust and C. |
| Tools | gasm-relay (WebSocket rooms), the gasm-sdk Rust crate (library gasm), gasm.h and the C/C++ SDK, SDL 3 for gasm, cross-runner determinism and network test suites with golden hashes. |
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, .gasm packages, render targets.