Pick one or more names from a list at random, with full control over whether the same name can be picked twice. Paste your list into the input (one name per line), choose how many picks you want, and click pick.
Two modes:
- No repeats (default) — every pick is unique. Good for picking a subset from a larger group — raffle winners, meeting chair rotation, pair-programming pairs.
- Allow repeats — every pick is independent, so the same name can come up more than once. Good for daily drawings where yesterday’s winner is still eligible, or for stress-testing a list’s selection characteristics.
The random source is crypto.getRandomValues via the Web Crypto API — cryptographically strong pseudorandom numbers, much more than fair enough for any practical decision-making use. Everything runs locally in your browser; the list never leaves your device.
How without-repeat picking works
The no-repeat mode uses a Fisher-Yates partial shuffle. To pick $k$ names from a list of $n$:
- Start with the full list.
- For each of the first $k$ positions:
- Pick a random index $j$ between the current position and the end.
- Swap the element at the current position with the element at $j$.
- Collect the element now at the current position into the output.
This is uniform — every possible subset of size $k$ is equally likely to come out — and it’s $O(k)$ in time, so picking 10 from 10,000 is as fast as picking 10 from 10. The partial nature (you only shuffle the first $k$ positions) is what makes it efficient compared to a full shuffle followed by truncation.
The mathematical guarantee: after running the algorithm, every permutation of the first $k$ positions is equally likely, which means every subset of $k$ elements appears with probability $\binom{n}{k}^{-1}$. For a list of 10 names picking 3, that’s $\binom{10}{3} = 120$ equally-likely outcomes.
How with-repeat picking works
Simpler: for each of the $k$ picks, generate a uniform random index in $[0, n)$ and take the name at that index. Each pick is independent, so there’s no accumulated state — you could rerun the exact same algorithm infinitely many times and every pick would be independent.
The probability of any specific name being picked on any specific turn is $1/n$. The probability of the same name being picked twice in a row is $1/n^2$, and so on. For small $n$, these probabilities aren’t as small as intuition suggests — which is why repeats feel “suspicious” to users but are actually fair.
Example: picking a weekly meeting chair
Your team has 8 people. You want to pick a different chair each week, and you want to make sure nobody chairs twice in the same month. Two options:
- Weekly picks, with-repeat mode. Each week you pick 1 name from 8, and the same name can win two weeks in a row. Probability of that happening is 1/8 = 12.5%, which over a year is pretty common. Simple but not fair over short timescales.
- Monthly picks, without-repeat mode. Once a month you pick 4 names from 8, assigning them to the four weeks. Every month, everyone who’s eligible gets the same shot, and no one can chair two weeks in the same month. More complex but more equitable.
Example: raffle winners
You have 200 entries and want to pick 5 winners without repeats. Paste the entries, set count to 5, leave mode as no-repeat. The tool returns 5 distinct winners in the order they were drawn — the order isn’t significant, but people often care about who was drawn “first” so it’s reported.
For raffles with more than one prize tier (1 grand prize, 3 runners-up), pick them all in one batch with no repeats; the first result is the grand prize winner and the rest are runners-up. Don’t do the draws separately unless you explicitly want the tiers to be independent; doing them together guarantees no one can win two prizes.
Example: stress-testing a list
Allow-repeats mode with a high count is good for checking whether your list has enough variety. Pick 50 names from a list of 10 with repeats on and see how many distinct names appear. If only 3 or 4 show up, the run was unlucky; try again. If over many tries you consistently see a subset always winning, you may have a bug — but with crypto.getRandomValues as the source, “bug” is almost certainly “human pattern recognition”, not real bias.
What this tool does not do
It does not handle weighted selection — every name has equal probability of being picked, and there’s no way to give some names a heavier weight. If you need weights, duplicate names in the list: a name that appears twice is twice as likely to win as one that appears once.
It does not support stratified sampling (drawing one name from each category) — you’d have to run the tool once per category and combine the results manually.
It does not persist your list — reload the page and it’s gone. If you need to save a list, copy it into a text file yourself. For a visual spin instead of a plain output, the decision wheel renders the same draw as an animated wheel.