Real SNES‑era physics.
In your browser.
$2,500 competitionPlay it, build levels for it, or write a bot that beats it.
ForwardJumper is playing — press any key to take over
Booting the engine…
The whole game, four beats
Real physics
Bit-accurate SNES-era movement at 60Hz. No approximations.
Infinite levels
Every level is generated and solver-proven beatable.
Bots welcome
Write a little program that plays. Watch it try.
$2,500
Two weeks, two tracks, real prizes.
Trending levels
Make your own levels
- ✓SNES-style physics & collisions
- ✓Multi-room levels, pipes and doors
- ✓Test instantly in the browser
- ✓Publish when the solver proves it's beatable
AI assist
“add a coin trail over the gap”
Write a bot to play it
Your code gets the whole world — positions, physics, a forward model — and 40ms a frame to think.
- ✓Full game state & controls
- ✓Deterministic, verifiable replays
- ✓Compete on the nightly leaderboards
/** Hold one mask for PROBE_FRAMES on a forked world and report how it went. */function rollout(tools: AgentTools, mask: InputFrame): Rollout { const sim = tools.fork() // Frame 0 has to clear a stale jump bit, or a probe "presses" a button that was already held and // measures a jump that would never have happened. const stale = sim.world.player.prevInput & BTN_JUMP let reachedPx = sim.world.player.xPx for (let frame = 0; frame < PROBE_FRAMES; frame++) { sim.tick(frame === 0 ? mask & ~stale : mask) const player = sim.world.player if (player.xPx > reachedPx) reachedPx = player.xPx if (player.dead !== 0 || doomed(player.yPx)) return { reachedPx, died: true } } return { reachedPx, died: false }}