Gameable Engine
Gameable Engine is a browser game engine where the world is a gaussian splat, the renderer is WebGPU, and all game logic is a WebAssembly component.
The 60-second quickstart
sh
npm create gameable my-game -- --template fps
cd my-game
npm run devThat gives you a splat arena you can walk around, three capsule enemies you can shoot, an ammo and health HUD, and a win condition — with zero edits and no Git LFS. Install has the requirements and the options.
Then open src/game.ts. Add custom logic to its defineGame systems; for example, this minimal game publishes a fire-button pulse to the HUD:
ts
import { defineGame, MOUSE_BUTTONS } from 'gameable';
export default defineGame({
systems: [
(ctx) => {
const fire = ctx.input.pressed('Space') || ctx.input.mousePressed(MOUSE_BUTTONS.LEFT);
ctx.hud.set({ fire });
},
],
});In direct dev mode, a broken edit keeps the running game and reports the error. A good edit reloads the page; state is not kept yet.
Where to go next
| You want to | Read |
|---|---|
| Play the examples in your browser | Play |
| Install the toolchain | Install |
| Build a first-person game | Build your first FPS |
| Put a studio character in three.js | In your three.js app |
| See the whole architecture at once | Concepts |
| Understand how a frame works | The engine loop |
| Understand the wasm split | The wasm boundary |
| Do one specific thing | Recipes |
| Look up a function | API reference |
| Fix an error message | Troubleshooting |
| Decode the jargon | Glossary |
If you are a language model
Read llms-fps.txt or llms-third-person.txt before writing any game code. They are task-scoped bundles built for exactly this. The core corpus is llms-full.txt (rooms and splat characters have bundles of their own, which it points to); the index is llms.txt. These files also live at the repository root. The hard rules are in AGENTS.md.