Random Picker
One option per line. Drawn without replacement.
Space bar picks again.
Fair means every option has the same chance
The list is shuffled with a Fisher-Yates shuffle and the first few taken. Every entry has precisely the same probability, and nothing is picked twice.
Why the shuffle method matters
The common shortcut is to sort the list with a random comparator — arr.sort(() => Math.random() - 0.5). It looks clever, it is one line, and it is measurably biased. Sorting algorithms assume a consistent comparison, and a random one breaks that assumption in ways that depend on the algorithm. Items near their original position tend to stay there.
Fisher-Yates walks the list once, swapping each item with a randomly chosen earlier one. It is provably uniform and it is not slower. Any tool that picks winners should use it.
Weighting, and how to fake it
Every line gets equal weight here. If you want one option to be likelier, put it in twice — and untick the duplicate option so both copies count.
When not to use this
- Anything with a legal or financial consequence. A prize draw of real value usually needs an auditable process, and "a web page picked it" is not one.
- Decisions you actually have a view on. The useful trick here is old: assign the options, run the pick, and notice your reaction. Disappointment tells you what you wanted, which is more valuable than the result.
Common uses
- Choosing where to eat, which is the archetypal use.
- Picking a winner from a list of entrants.
- Selecting who presents first or does an unpopular job.
- Breaking a deadlock in a group.
Questions people ask
Does every option have the same chance?
Yes. The list is shuffled with a Fisher-Yates shuffle, which is provably uniform.
Why not just sort randomly?
Because sorting with a random comparator is measurably biased. Sorting algorithms assume consistent comparisons, and items tend to stay near where they started.
Can I make one option more likely?
Add it to the list twice and untick the duplicate-removal option.
Can it pick the same option twice?
No. Picks are drawn without replacement.
Is this suitable for a real prize draw?
For something informal, yes. Anything with legal or financial consequence usually needs an auditable process.
Where the randomness comes from
Every result on these pages uses crypto.getRandomValues, your browser's cryptographically secure random generator, seeded by the operating system from genuinely unpredictable physical sources.
That is deliberately not Math.random(), which most tools use. Math.random is a deterministic algorithm producing numbers that look random; given enough output, its future values can be predicted. For a dice game that does not matter. For a prize draw, a password or anything anyone might want to game, it does.
The numbers are also produced by rejection sampling rather than by taking a remainder. Taking a random 32-bit number modulo 6 slightly favours the lower faces, because 232 does not divide evenly by 6. The bias is small and it is real, and discarding the leftover tail removes it completely.
Nothing leaves the page
Results are generated in your browser and are not transmitted or stored. Reload the page and they are gone — which matters most on the password generator.