The problem it solves
Before you commit a mechanic to your game, you want to know if it feels right. Does a bounce pad launch things too hard? Is a gravity flip fun or just confusing? Answering that in a full engine means a project, an import and a build. Here it's a tab, a few objects and a script.
Example: a gravity flip
Say your idea is a switch that flips gravity every few seconds. Add a handful of cubes and spheres in the editor, then add this script:
const period = slider('Seconds per flip', 1, 10, 3); const flipped = Math.floor(time / period) % 2 === 1; objects.forEach(obj => setGravityScale(obj.id, flipped ? -1 : 1));
Press play. Objects fall, then rise, then fall again. Drag the slider while it runs to find the rhythm that feels good. When it does, you know the numbers to take into your real project.
Example: a spinning obstacle
Bind a script to one object (the "Bound to" menu on the script card) and it becomes self:
const spin = slider('Spin', 0, 10, 2); if (self) applyTorque(self.id, 0, spin, 0);
Why it's quick
- Rapier rigid bodies with adjustable mass, friction and restitution, plus Verlet cloth with wind and pin points.
- Per-frame JavaScript with a small API: positions, spawning, velocity, impulses, torque, gravity scale and sliders.
- Live GLSL shaders when you want the prototype to look the part.
- Record a GIF to show your team, or send the scene itself as a link.
Where it stops
It's a sandbox for trying ideas, not a game engine. Shapes are cubes and spheres (plus procedural meshes), there's no export to 3D model formats, and the editor needs a screen at least 768 pixels wide. When a mechanic works, rebuild it in your engine with the numbers you found.