flux is the third wing of fable. puzz broke nothing — static logic on a grid. knack kept the grid but added time — discrete moves a BFS could search. flux throws the grid away: continuous space, real physics. A ball launched once, flying under a sum of forces.
The form is loose, but the discipline that makes the interestingness engine rigorous survives. The player has exactly two degrees of freedom — launch angle and power — so the whole space of attempts is a 2D map. The solver sweeps that map, simulating every launch, and records which ones reach the goal. From that win-map it reads:
Toggle show win-map to see it: a polar diagram at the launch pad — angle around, power outward — lit where that launch wins. "Watch the solver" replays the most robust winning shot it found. Because the simulation is deterministic, that's the exact shot it scored.
Chaos is the anarchy dial — wells, magnets, goo and bumpers all at once — and the solver still guarantees a launch that wins. The forces are inverse-square attractors (positive pulls, negative pushes), viscous drag fields, and elastic circles; adding a new one (a fan, a one-way membrane, a black hole) is a few lines in the same deterministic step.
The site runs the physics in JavaScript — one ball at 60fps needs nothing heavier, and it keeps the site
endless and instant. The same engine is mirrored in Rust (engine-rs/); a GitHub Action runs
the Rust solver to pre-sweep a catalog of seeds and cross-check that the two engines agree. Because the solver
only keeps basin-robust answers, tiny floating-point differences between Rust and JS never flip a result.
Page n yields the identical world — and the identical winning shot — on every machine, for ever
(seeded xmur3 → mulberry32). /flux/?n=42 is a permalink, and so is its answer.