Random Wheel Spinner
One entry per line, one spin, one winner — with the option to remove them and go again.
Previous results
Picks use the browser's cryptographic random source.
What a fair random pick actually requires
Picking one name from a list sounds trivial, and the naive version is subtly unfair. The usual shortcut — take a random 32-bit number and use the remainder after dividing by the number of entries — gives slightly better odds to the first few entries, because 2^32 does not divide evenly by, say, 7. With a handful of names the bias is small but real, and it always favours the same end of the list.
This spinner avoids that by discarding values above the largest exact multiple and drawing again, using crypto.getRandomValues rather than the general-purpose generator. The result is a uniform pick where every remaining entry has identical odds on every spin.
Worked example 1: drawing a running order
Ten presenters, and you need an order rather than a single winner. Tick "remove the winner after each spin" and keep spinning: each result leaves the pool, the remaining count drops, and the history list becomes your running order from first to last. Ten spins produce a full permutation with no repeats.
Worked example 2: independent picks
Deciding who fetches coffee should not depend on last week. Leave the removal option off and every spin draws from the whole list. Over five spins the same person can come up twice — that is what independence means, and it is not a fault in the draw.
Worked example 3: weighting an entry
There is no weight field, and that is deliberate: the honest way to give someone two chances is to list them twice. Writing "Alice" on two lines out of six gives Alice exactly a third of the probability, which is easier to audit at a glance than a hidden multiplier.
When to use which mode
| Situation | Remove winner | Why |
|---|---|---|
| Speaking order, team draft | On | Every entry appears exactly once |
| Handing out distinct prizes | On | Nobody wins twice |
| Who buys lunch today | Off | Each day is independent |
| Classroom cold call | Off | Keeps everyone paying attention |
| Raffle with one prize | Off | Single draw, pool unchanged |
Practical notes
Blank lines and stray spaces are ignored, so pasting straight from a spreadsheet column works. Duplicates are kept exactly as typed, which is how weighting works. The remaining count updates as you edit, so you can see the pool size before committing to a spin.
The short shuffle animation is cosmetic: the winner is chosen before it starts, so nothing about timing, clicking speed or when you look away can change the outcome. Stopping the animation early would show the same result.
Nothing is stored on a server and nothing survives a page reload. For a draw that needs to be auditable later — a public giveaway, for instance — screenshot the entry list and the result, or record the spin. A local tool cannot prove to a third party what it drew, and pretending otherwise would be dishonest.
Sources & further reading
Frequently asked questions
Is the pick actually random?
Yes. It uses crypto.getRandomValues, the same source browsers use for security-sensitive randomness, and rejects biased values rather than taking a shortcut with modulo. Every remaining entry has exactly the same probability on every spin.
Can I stop the same name winning twice?
Turn on 'remove the winner after each spin' and each result is taken out of the pool, which is what you want for drawing a running order or handing out prizes. Leave it off when every spin should be independent, like picking who buys coffee.
Do my entries get uploaded anywhere?
No. The list stays in the page and is never sent to a server — you can confirm that in your browser's network tab. Closing the tab discards everything, so paste the list again next time or keep it in your own notes.