Skip to content

debuff vs Excalibur ​

Excalibur and debuff are both TypeScript-first toolkits for 2D browser games. Excalibur aims to be "batteries included" and has been doing it for years. debuff is younger and smaller, and focuses on determinism, testing and coding agents. Here's how they compare as of October 2026.

Short answer ​

Pick Excalibur if you want more built-in systems today: physics, Tiled and LDtk plugins, UI and a mature API. Pick debuff if you want a smaller runtime, deterministic tests and fuzzing, and an agent that can attach to your running game.

At a glance ​

debuff 0.2Excalibur 0.32.0
LicenseMITBSD-2-Clause
LanguageTypeScriptTypeScript
RenderingWebGL2, Canvas 2D fallbackWebGL and Canvas (docs)
PhysicsTile collisionBuilt in
TilemapsTiled and LDtkTiled and LDtk plugins
Audio, input, scenes, tweens, particlesBuilt inBuilt in
Full runtime, brotli20 kB (every debuff package)118 kB (excalibur.min.js)
TestingScenarios, screenshot baselines, fuzz@excaliburjs/testing: Puppeteer and screenshot comparison
Coding agentsMCP server for the running game, AGENTS.mdNo llms.txt (404), no MCP server found
CommunitySmallEstablished (Discord, GitHub Discussions)
Full runtime download, brotli (kB, smaller is better)
debuff20 kB
Excalibur118 kB

Each library's complete prebuilt bundle (all debuff packages, excalibur.min.js), compressed with brotli and measured on 17 October 2026. Tree-shaken games ship less.

Where Excalibur is stronger ​

  • Built-in systems. Physics, actions, a UI layer and official tilemap plugins mean less to write yourself. debuff has no rigid-body physics.
  • Maturity. Years of releases, a documented API, samples and tutorials.
  • Testing exists. Excalibur's testing package drives your game in a real browser and compares screenshots, which is more than most web engines offer.

Where debuff is different ​

  • Deterministic by design. debuff's fixed-step clock and seeded RNG make the same input produce the same game. Scenarios can assert on state, not just pixels, and recorded sessions replay exactly.
  • Fuzzing. npx debuff fuzz plays your game with random but plausible input, and saves each crash, stuck state or loop as a scenario that reproduces it. The same seed repeats a run, so it can gate CI.
  • Agents on the running game. debuff's MCP server lets an agent attach to the game you have open, read the moments you flag in the overlay, reproduce them with game_replay, and tune typed params you can undo. See the agent comparison post.
  • Size. The whole debuff runtime is about a sixth of Excalibur's bundle.

Which to choose ​

If you want a mature TypeScript engine with physics and more systems built in, use Excalibur. If testing and agent tooling matter more, try debuff:

bash
npm create debuff@latest my-game