Is a wheel spinner really random?
Here's the thing no spinner site prints on the tin: the wheel doesn't decide anything. The moment you click spin, a random number generator picks the winner, and then the wheel spends five dramatic seconds pretending to make up its mind. The animation is a delivery mechanism for a decision that already happened.
That's not a scandal — a physical prize wheel is also just a random number generator made of friction and bearings. But it means the real question isn't "is the wheel random?" It's "which generator picked the winner, and could anyone lean on it?"
Two generators, one big difference
Browsers offer two ways to get randomness. Math.random() is the old convenience function — fine for scattering confetti, never designed for fairness, and historically predictable enough that people have reconstructed its internal state from watching outputs. crypto.getRandomValues() is the other one: it draws from the operating system's entropy pool, the same source that generates encryption keys. Nobody reconstructs that from watching a wheel land.
For thirty kids in a classroom, the practical difference is small. For a giveaway with money on the table, use the cryptographic one and say so. Ours uses it for everything — the draw, the shuffle, even where the confetti flies — because having two randomness standards on one site is how you eventually ship the wrong one.
How wheels actually get rigged
Not by breaking the math — by going around it. Some wheel sites openly sell "control the outcome" as a party-trick feature: the owner pre-selects the winner and the wheel obligingly lands there while everyone watches the same convincing animation. Funny at a birthday. Less funny when the same capability exists on a wheel running a paid raffle.
Duplicated entries are the low-tech version — "Ali" on the wheel twice at double odds is invisible once a wheel has thirty slices, which is why our wheel shows a percentage next to any entry whose odds differ from the rest. And weighted entries are the honest cousin of the same idea: fine when declared, rigging when not.
What you can check from the outside
- Does the site say what generates the draw? Silence usually means
Math.random()— or worse, a wheel that decides during the animation, where "close calls" can be nudged. - Can entries carry hidden weight? Look for odds shown per slice when weights are in play.
- Does the operator's screen differ from yours? A draw that travels as a plain URL, like ours does, has nowhere to hide an owner-only rig switch.
The spin is a show. Enjoy the show — we certainly lean into it, ticks and confetti and all. Just make sure the decision behind it came from somewhere that doesn't take requests.