wasm-game-ts
v1.0.0
Published
Browser-first TypeScript framework for running a deterministic WASM game runtime in a WebWorker and rendering via OffscreenCanvas.
Readme
wasm-game-ts
Browser-first TypeScript framework for running a deterministic WASM game runtime in a WebWorker and rendering via OffscreenCanvas.
What it expects from the WASM module
Exports (WASM -> host):
init(random_seed: i32, module_hash: i32) -> i32(HostState* offset)update_start(input_bytes: i32) -> i32(returns ptr for host to write inputs)update_end(render_for_player: i32) -> void(process + produce render/audio/debug buffers)
Imports (host -> WASM):
env.get_file_bytes(id: i32, ptr: *mut u8) -> usize
Render command buffer
The worker renders a binary command buffer written by WASM. Command ids and layouts are defined in:
src/worker/renderer.ts
Rust should match these ids and field layouts exactly.
Local demo
- Build dist:
npm install
npm run buildRun the dev server:
npm run devOpen:
http://localhost:5173/demo/index.html
Click "Pick Package Folder" and select a folder containing:
- your .wasm (built from your Rust code)
- any assets you want (manifest is generated automatically by the folder picker)
The demo will start the game and stream keyboard/mouse input for player_id=1.
Commands to run
From wasm-game-ts/:
npm install
npm run build
npm run dev
# open http://localhost:5173/demo/index.html