How the draw works internally
We apply the Fisher-Yates shuffle algorithm over the list of
participants, using crypto.getRandomValues as the source of
randomness. Every possible permutation of the list has exactly the same
probability. The first N elements of the shuffled array are the winners.
It is mathematically fair: each participant has exactly N/total odds of being
chosen.
How to run a public, transparent draw
- Announce the rules clearly: how many winners, what prize, when the draw happens, how it is picked.
- Share the full list beforehand. In small groups you can show the names; in large draws you can publish a hash of the list (SHA-256) to prove you didn't add names afterwards.
- Run the draw live: stream on Twitch/YouTube, an open Zoom room, or a recorded video showing the whole process.
- Show the full result: ideally not just the winner but the shuffled list (or at least the top 5-10), to prove the algorithm ran.
- Post screenshots in the group where you announced the draw, tagging the winner.
The difference between a "fair draw" and a "legal draw"
A draw can be perfectly fair (algorithmically flawless) and at the same time have no legal validity. The difference lies in who guarantees the execution and its integrity. For draws with material prizes, many countries require:
- A system certified by an authority (national lottery, chamber of commerce).
- A notary present: a notary validates the process and signs the record.
- An auditable list of participants, submitted before the draw.
- Pre-published rules the organizer cannot change at the last minute.
This tool is for informal draws: a small team, a friendly community, a birthday raffle, deciding who buys the next round. For real prizes, check your country's legislation.
Typical use cases
- Online communities: hop on a Discord or YouTube channel and raffle a book or a game.
- Work team: who presents first, who takes holidays first, who makes the coffee this week.
- Classrooms: the teacher draws who goes to the board.
- Task assignment: a list of tasks + a list of people, shuffle and pair them.
- Nights out: who picks the restaurant, who pays the bill.
The "naive shuffle" bias
Many people implement draws like this:
arr.sort(() => Math.random() - 0.5). It is wrong:
it produces biased permutations. Formal studies have shown that certain elements
end up closer to the start than others. If your draw matters, make sure the tool
uses Fisher-Yates (ours does).
Reproducibility with a seed
If you want the draw to be reproducible (so anyone with the same list and the same
seed gets the same result), use the "seed" field. Internally we derive a
deterministic PRNG from that string. Useful for audits or when you want your draw
to be verifiable after the fact. Without a seed, the result is non-reproducible and
depends only on crypto.getRandomValues.