Random Team Generator
How it works
The name list is shuffled with a Fisher-Yates shuffle: starting from the end, each name swaps with a uniformly random earlier position (including itself), working backwards to the front. Each of those random positions is drawn from crypto.getRandomValues and rejection-sampled the same way this site's Dice Roller rejects a biased die roll, so every possible ordering is exactly as likely as every other. In team mode, the shuffled names are then dealt one at a time into each team in turn; in winner mode, one shuffled name is simply the first one drawn.
Frequently asked questions
Is this actually random, or just Math.random()?
It draws from the browser's crypto.getRandomValues, the same cryptographically secure source this site's Dice Roller and Password Generator use — not Math.random(), which is fast but never designed to be unbiased or unpredictable enough to settle a real draw. Every shuffle and every winner pick is also checked with rejection sampling, which discards the rare draw that would otherwise favor certain names by a tiny amount whenever the list length does not divide evenly into the random source's range.
Why doesn't editing the name list or team count reshuffle immediately?
Everything above the button is live and validates as you type, but the shuffle or pick itself only happens when you press Generate — the same reasoning behind this site's Dice Roller and Password Generator not rerolling on every keystroke. If fixing a typo in a name silently reshuffled the teams, you could never edit the list without losing the result you were looking at.
What happens when the names cannot be split evenly?
Teams differ in size by at most one person. After the shuffle, names are dealt round-robin — one to each team in turn, then back to the first team — so any leftover people are spread across the front of the team list rather than all piled onto whichever team happens to be last.