Spin the Wheel
Type your options, spin the wheel
Every line in the box becomes a slice. Press spin, the wheel turns and slows, and the slice under the pointer wins.
Nothing is uploaded. Your entries live in the browser tab and vanish when you close it.
The winner is chosen before the wheel moves
This matters more than it sounds.
The obvious way to build a wheel is to give it a random push, let friction slow it down, and read whatever ends up under the pointer. That approach makes the result depend on rounding of the final angle and on how many animation frames your device managed to draw — a slow phone and a fast desktop would not be equally fair.
This wheel does the opposite. It draws a winner from crypto.getRandomValues()
first, then computes the exact rotation that lands that slice under the pointer
and animates to it. The spin is presentation; the draw is already decided and
provably uniform.
Every slice therefore has exactly the same chance, no matter how many slices there are, how long their labels are, or what device you are on.
Remove the winner, or keep spinning the full wheel
With remove winner on, each spin takes the winning entry off the wheel. Spin repeatedly and you get an order: first, second, third. Good for drawing several prizes, or for deciding presentation order in front of a room.
With it off, the wheel stays whole and the same option can win twice — which is what you want for “where do we eat tonight”.
Weighting the wheel by repeating an entry
The wheel gives every slice the same chance, so the way to favour an option is to give it more slices. Listing it twice doubles its share.
| Entries | Slices | Chance for Pizza |
|---|---|---|
| Pizza, Sushi, Tacos | 3 | 33% |
| Pizza, Pizza, Sushi, Tacos | 4 | 50% |
| Pizza ×3, Sushi, Tacos | 5 | 60% |
Duplicated labels appear on the wheel more than once, which is honest — anyone watching can count the slices and see the weighting rather than take your word for it. That visibility is the point of a wheel; a hidden weight would defeat it.
For fine-grained weights that do not fit neatly into slices, the random number
generator accepts explicit number:weight pairs instead.
How many slices stay readable
Slices shrink as entries grow, and labels are drawn along the radius, so there is a practical ceiling well below any technical one.
- Up to 12 — comfortable, labels read at a glance
- 12 to 20 — readable, but long names start to crowd
- 20 to 30 — usable for short labels only
- Above 30 — the wheel still works and the draw is still fair, but nobody can read it while it spins
Labels longer than 18 characters are trimmed with an ellipsis so they stay inside their slice. If your list is long enough that the wheel is unreadable, the name picker does the same job without the theatre.
Accessibility and motion
The wheel respects prefers-reduced-motion. If your system asks for reduced
motion, the spin animation is skipped and the winner appears immediately. The
result is identical either way, because the draw never depended on the animation.
The winner is also announced in a live region, so screen readers read it out without the user having to hunt for it.
Where a picker wheel gets used
- Deciding — lunch, film, which chore
- Live streams and classrooms — the spin is the point; people watch it
- Giveaways — a visible draw feels fairer to an audience than a number appearing
- Icebreakers — who answers the next question