Skip to content

gasmWrite a game once. Run it everywhere.

Games compile to one WebAssembly file. Small native and browser runners give them a stable interface for graphics, sound, input and networking.

gasm

What's inside ​

Runnersgasm-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.
GamesSumo: 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.
Toolsgasm-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.

Performance ​

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.

Status ​

gasm is a proof of concept. ABI v0 is experimental and will change. See the roadmap: rollback netplay, .gasm packages, render targets.

MIT licensed. The NES demo core is tetanes-core (MIT/Apache-2.0).