matterjs — Claude Code skill: 2D physics with Matter.js
Walks the agent through a Matter.js scene: engine, render, runner, bodies and mouse dragging. Useful when a canvas needs physics.
npx skills add MengTo/Skills --skill matterjs -a claude-codeWhat matterjs does
The skill kicks in when a project needs 2D physics on Matter.js. First it asks what the environment is — plain HTML, React, or canvas only — and how to draw: Matter.Render for debugging or a custom renderer. Then it hands over a minimal Engine/World/Render/Runner setup with a couple of bodies.
The workflow is spelled out step by step: create the engine, start the render with your dimensions, run the loop, add bodies with Composite.add(engine.world, [...]). For solid shapes it suggests render.options.wireframes = false. If you need your own timing, call Engine.update inside a custom loop instead of Runner.run. Mouse dragging is a separate block built from Mouse and MouseConstraint.
Single-page apps get a teardown checklist: stop the runner, pull the canvas out of the DOM, clear the engine and world. Skip it and screen transitions leave stray loops and listeners behind — worth checking before you keep the skill around.
What it helps with
- set up a Matter.js engine and world from scratch
- add bodies and a static ground to the scene
- enable mouse dragging of objects
- render solid shapes instead of wireframes
- stop the simulation when a component unmounts
Example prompts for the agent
- build a Matter.js scene with a ground and a falling box
- add mouse dragging to the bodies in this scene
- stop the runner and remove the canvas on unmount
How to install matterjs
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill matterjs -a claude-code2Manually: put the files in place
~/.claude/skills/matterjs/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/matterjs/
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill matterjs -a codex2Manually: put the files in place
.agents/skills/matterjs/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill matterjs -a cursor2Manually: put the files in place
.cursor/skills/matterjs/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install MengTo/Skills matterjs2Manually: put the files in place
.github/skills/matterjs/SKILL.md1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill matterjs -a gemini-cli2Platform CLI
gemini skills install https://github.com/MengTo/Skills --path agent-skills/web-design/matterjsManually: put the files in place
.devin/skills/matterjs/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add MengTo/Skills --skill matterjs -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about matterjs
How do I install matterjs in Claude?
Run npx skills add MengTo/Skills --skill matterjs -a claude-code. The skill file then lives at ~/.claude/skills/matterjs/SKILL.md.
What does matterjs do?
It guides the agent through Matter.js 2D physics: engine and world, render with runner, adding bodies and constraints, and mouse interaction.
Do I need Matter.js already?
Yes. The skill covers working with the Matter.js library in your project; it does not replace it.
Source text
SKILL.md · MIT
---
name: matterjs
description: Use when implementing 2D physics interactions with Matter.js, including Engine/World setup, Render/Runner configuration, adding bodies and constraints, and scroll/interaction-friendly canvas scenes.
---
# Matter.js Skill
## Workflow
1. Confirm environment (plain HTML, React, or canvas-only) and rendering approach (Matter.Render for debug vs custom renderer).
2. Provide a minimal Engine/World/Render/Runner setup and add bodies.
3. Add interactions (mouse constraint) or constraints only if requested.
4. Share cleanup steps for SPA or teardown scenarios.
## Minimal setup
```html
<script>
const { Engine, Render, Runner, Bodies, Composite } = Matter;
const engine = Engine.create();
const render = Render.create({
element: document.body,
engine: engine,
options: {
width: 800,
height: 600,
wireframes: false
}
});
const runner = Runner.create();
Runner.run(runner, engine);
Render.run(render);
const ground = Bodies.rectangle(400, 610, 810, 60, { isStatic: true });
const box = Bodies.rectangle(400, 200, 80, 80);
Composite.add(engine.world, [ground, box]);
</script>
```
## Common patterns
- Use `Composite.add(engine.world, [...])` to add bodies to the world.
- Use `Render.create({ element, engine })` to create a canvas automatically, or pass a `canvas` you create yourself.
- Set `render.options.wireframes = false` for solid rendering.
- Use `Runner.run(runner, engine)` for a simple loop, or call `Engine.update` in your own loop if you need custom timing.
## Mouse interaction (optional)
```js
const { Mouse, MouseConstraint } = Matter;
const mouse = Mouse.create(render.canvas);
const mouseConstraint = MouseConstraint.create(engine, { mouse });
Composite.add(engine.world, mouseConstraint);
render.mouse = mouse;
```
## Cleanup checklist (SPA)
- Stop the runner with `Runner.stop(runner)`.
- Remove the render canvas from the DOM.
- Clear engine and world if needed.
## Questions to ask when specs are missing
- What viewport size and scaling should the canvas use?
- Are we using Matter.Render or a custom renderer?
- Do you want mouse/touch drag interaction?
- Should the simulation loop be paused when offscreen?
© MengTo · MIT · MengTo/Skills