Is the wheel really random?
Yes. We get asked this so often that we built a whole page to show it. Below you can take your own homepage wheel, spin it a million times, and watch where the results land.
0
spins so far
·
biggest gap from fair
Press start and watch what a fair wheel actually looks like.
Why a fair wheel can look rigged
Spin any fair wheel twenty times and it will look broken. Below is our eight option wheel, spun for real: after twenty spins the luckiest option had come up 4 times and the unluckiest only 1.
Nothing was wrong with it. There simply had not been enough spins yet. Keep going and the same wheel, running the same code, evens out on its own.
120% apart
40% apart
8.4% apart
0.5% apart
Each bar is one option and the dashed line is an even split. A few spins bounce around that line wildly. A lot of spins hug it.
What we tested
Last run 2026-09-08Five tests, millions of spins each, run against the same code your wheel uses. Each one asks about a different way a wheel could be unfair.
Does every option win a twelfth of the time?
Every option landed within 0.18% of its share
With only two options, does one side creep ahead?
50.0% / 50.0% over 10 million spins
Weight them 1, 2, 3 and 4. Do they win in that ratio?
10.0% / 20.0% / 30.0% / 40.0% over 10 million spins
Does the pointer favour one part of the winning slice?
Every option landed within 0.28% of its share
Does the last winner tell you anything about the next?
No pattern found in 5 million spins
A test like this can only ever fail, never prove. Passing means we went looking for five specific kinds of unfairness and did not find them.
How the winner is picked
The moment you press spin, your browser produces a random number using the same system that protects passwords and payments. That number picks the winner.
It happens before the wheel starts moving. What you watch is the wheel travelling to a result that was already decided, which is why how hard you click, where you click and how long you hold change nothing.
const randomValues = new Uint32Array(2)
crypto.getRandomValues(randomValues)
const prizeNumber = selectWeightedIndex(
props.segments,
randomValues[0] / 0xFFFFFFFF
)In full: every spin draws two 32-bit numbers from crypto.getRandomValues. The first walks the cumulative weights to pick the winning option. The second places the pointer between 10% and 90% of the way across the winning slice, so it never stops exactly on an edge.
Now go spin one.
Free, no account, and you just watched it prove itself.