Skip to content

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 dev

That 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 toRead
Play the examples in your browserPlay
Install the toolchainInstall
Build a first-person gameBuild your first FPS
Put a studio character in three.jsIn your three.js app
See the whole architecture at onceConcepts
Understand how a frame worksThe engine loop
Understand the wasm splitThe wasm boundary
Do one specific thingRecipes
Look up a functionAPI reference
Fix an error messageTroubleshooting
Decode the jargonGlossary

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.