Why spin at all
A list and a random number would settle any of this in a second. People still want the wheel, and they are right to: a draw everyone watches is a draw nobody argues with afterwards. Classrooms use it for cold-calling, streamers use it for giveaways, and half the offices in the world use it to decide who is presenting first.
The catch with most spinners is that the animation and the outcome get tangled together, usually by giving the wheel a random starting shove and reading off whatever it lands on. That works, but it puts the fairness at the mercy of a physics fudge and a rounding error at the slice boundary. This one separates the two jobs. The winner is drawn first, the wheel then travels to it, and the slice under the pointer at the end is the slice the generator already chose.
That draw is a single value from crypto.getRandomValues, folded onto your entry count with rejection sampling. Taking the plain remainder instead leaves the first few names on the list fractionally likelier than the rest, which is modulo bias and the commonest way a picker goes quietly crooked. Done properly, every slice carries the same share, which is what a uniform distribution amounts to once the theatre is stripped away.
Everything runs in your browser. There is no server in the loop, so no list of names is uploaded anywhere and nothing about your entries leaves the device. If you want the same fairness without the animation, the number picker draws straight from a range, and a two-way call is settled faster by the coin flip. The generator behind all of them is taken apart in how random is random.
- 2 to 60, one per line
- Identical for every entry, always
- crypto.getRandomValues, drawn before the spin
- None: rejection sampling onto the entry count
- Keep the winner, or remove and spin again
- Recent winners kept on your device, clearable
How to run a draw people will accept
- Freeze the entry list before you spin, and paste it in the order it was collected.
- Show the wheel while it spins. A draw people watch is a draw people believe.
- Copy the result link afterwards. It replays the same list and the same winner.
- Use Remove winner for runners-up, so second place comes from a genuinely smaller pool.
Picker wheel — frequently asked
The winner is drawn before the wheel moves. One value comes out of your browser's cryptographic generator, gets mapped onto the entry list with rejection sampling so no name gets a fractionally larger share, and the wheel is then rotated to bring that slice under the pointer. The spin is presentation. The draw is arithmetic, and it has already happened by the time the animation starts.
There are no bigger slices. Every entry gets 360 degrees divided by the number of entries, so eight names means eight 45-degree wedges. With ten names each carries exactly 10 percent, with three names each carries 33.33 percent, and the colours repeat every five slices purely so neighbours stay readable.
Sixty. Labels are printed on the wheel up to twenty entries; past that the slices stay accurate but the text is dropped rather than squashed into an unreadable smear, and the winner is announced underneath.
Switch to Remove winner and each result drops out of the list, which turns repeated spins into a running order: first out, second out, and so on. Keep winner leaves the list alone, so every spin is an independent draw and the same name can come up twice.
Only for your benefit. Recent winners are listed under the wheel and stored in your browser, never sent anywhere, and the clear button empties them. The draw itself has no memory at all: a name that just won is exactly as likely to win the next spin.