How this random name wheel picks winners

Most wheel sites look random. Here is exactly what happens on every spin — and why the odds are provably equal.

Math.random is not good enough

The typical wheel uses Math.random(). It is fast, but it is a pseudo-random generator not designed for fairness or auditability. We draw from crypto.getRandomValues instead — a cryptographic source seeded by the operating system, the same class of randomness used for security tokens.

Modulo bias, and how we avoid it

To pick entry number from a random byte you might compute random % entryCount. That is subtly unfair: unless the random range divides evenly by the entry count, some entries get an extra share of the odds. With few entries the skew is tiny; with awkward counts it becomes measurable.

We use rejection sampling: random values that fall into the biased tail are discarded and redrawn until one lands in the fair range. Every entry gets exactly 1-in-n odds, verified by a chi-square uniformity test in our test suite.

The animation never overrides the pick

The winner is decided before the wheel moves. The final rotation angle is then computed so that the winning slice stops under the pointer, with a small random jitter inside the slice so stops look natural. The spin is a visualization of the cryptographic result — it cannot disagree with it.

Where your data lives

Wheels you build are saved in your browser's local storage — on your device, never uploaded. Only when you create a share link do we store the wheel's title and entries so the link works for other people. No account, no tracking of your names.

Step by step

  1. 1. Entries are collected

    Your list of names is turned into numbered slices, each exactly equal in size on the wheel.

  2. 2. A cryptographic random number is drawn

    We request random bytes from crypto.getRandomValues and convert them to a uniform integer with rejection sampling — no modulo bias, no weighting.

  3. 3. The animation lands on that pick

    The final rotation is computed backwards from the winning slice, plus a small random offset inside the slice so the pointer does not always stop dead-center.

  4. 4. The winner is announced

    The entry under the top pointer is displayed — the same entry the cryptographic draw selected.

Frequently asked questions

Is the wheel really random?

Yes. The winner is chosen with crypto.getRandomValues — the same cryptographic random source browsers use for security — not Math.random. Every entry has exactly equal probability on every spin.

Can the animation show a different winner than the random pick?

No. We pick the winner first with a cryptographically secure random number, then compute the exact final wheel rotation that lands that winner under the pointer. The animation is a visualization of the pick, never the pick itself.

What is modulo bias and why does it matter?

Taking a random number modulo the entry count (random % n) skews odds whenever the random range is not an exact multiple of n — some entries come up measurably more often. We avoid it with rejection sampling: numbers that would bias the result are thrown away and redrawn.

Do you store my wheels or names on a server?

Only if you share. Wheels you create live in your browser's local storage on your device. When you create a share link, the wheel's title and entries are stored so the link works for others — nothing else, and no account is required.

Can a spin be re-rolled or influenced after clicking?

No. The winner is fixed at the moment you click SPIN and the rotation is computed from it. Canceling, pausing, or re-spinning starts a brand-new cryptographic draw.

Try the wheel