The short version
- The result is decided the moment you press Spin. The animation comes after and changes nothing.
- The decision uses
crypto.getRandomValues, the cryptographic random number generator built into your browser. - Numbers are drawn with rejection sampling, so no entry gets a slightly better chance than another.
- Everything runs in your browser. Your entries are never sent to us.
Draw
The moment you press Spin, your browser’s secure random generator picks one entry. The result is settled here.
Aim
A landing point is chosen inside that entry’s slice, somewhere between 15% and 85% of its width.
Land
The wheel turns a set number of times and slows to a stop with that point under the pointer.
Where the randomness comes from
Every pick starts with 32-bit random numbers from crypto.getRandomValues. Browsers back it with the operating system’s secure random source, the same one used to make encryption keys. We ask for 256 numbers at a time and use them one by one, refilling when they run out. If a browser doesn’t offer the function, the pick fails with an error rather than quietly falling back to something weaker.
Math.random appears in two places, and neither touches a result: the paths of the confetti and the short burst of noise inside the tick sound.
Picking a number without bias
A random 32-bit number is one of 4,294,967,296 values. The obvious way to turn it into a choice among, say, three entries is to take the remainder after dividing by 3. But 4,294,967,296 isn’t a multiple of 3, so remainders 0 and 1 would each turn up once more than 2 across the full range. The difference is tiny, but it is real, and it has a name: modulo bias.
Rejection sampling removes it. For n choices we find the largest multiple of n that fits in the 32-bit range. Any draw at or above that limit is thrown away and a new one is taken; only draws below it are reduced to a remainder, so every remainder has exactly the same number of ways to occur. A redraw happens less than half the time even in the worst case, and for small lists almost never.
Weighted entries
On the main wheel, weighted entries let you write Name *3 to give an entry three tickets (anything from 1 to 100). We add up all the tickets, draw one ticket number with the method above, and walk through the list until we reach the entry holding it. An entry with 3 of 10 tickets wins 3 times in 10 over the long run, and its slice is drawn three times as wide, so the picture matches the odds.
Drawing several winners at once takes them one after another, each time from the entries not yet drawn, in proportion to their tickets. Entries with the same name (ignoring capitals) are merged first and their tickets added together, so one person can’t appear twice among the winners.
How the wheel knows where to stop
With the winner already chosen, the wheel works backward from it:
- Each entry’s slice covers an angle in proportion to its tickets, laid out clockwise around the wheel.
- A landing point is picked inside the winning slice, somewhere between 15% and 85% of its width, so the wheel never stops on or right beside a dividing line. This position comes from a separate 53-bit random fraction drawn from the same secure generator.
- The final angle is set so that point comes to rest under the pointer on the right-hand side of the wheel, after a fixed number of full turns: 3 for a 3-second spin, 5 for 6 seconds, 8 for 10 seconds. If your device asks for reduced motion, the wheel makes one turn in under a second instead.
- The wheel slows along a smooth ease-out curve and stops exactly on that angle. The tick plays each time a slice boundary passes the pointer.
Because the result exists before anything moves, nothing during the spin can change it: not the spin time, not where you clicked, not a slow device dropping frames. If the browser stops drawing frames, in a background tab for instance, a timer finishes the spin on schedule with the same result.
Removing winners, shuffling and teams
When the wheel is set to remove each winner, or you press Remove & spin, the winner leaves the list after the result is shown. The next spin is a fresh draw from what remains, so nobody is picked twice and the rest share the odds equally (or by tickets). Undo puts a removed entry back.
Shuffle uses the Fisher–Yates method with the same secure generator, which makes every ordering equally likely. The team generator shuffles names that way, then cuts the list into teams whose sizes differ by at most one, choosing at random which teams get the extra person. Captains are drawn evenly from each team.
What is stored, and where
There are no accounts and no server that receives your lists; WheelBloom’s own code makes no network requests with your entries. So that your work is still there next time, each tool saves to your browser’s localStorage:
| Key | What it holds |
|---|---|
wheelbloom:main | The main wheel: your entries, its options (spin time, sound, colors, removing the winner, weighted entries) and up to 50 recent results with the time of each. |
wheelbloom:yes-nowheelbloom:numberwheelbloom:letter | The yes or no, number and letter wheels: their wheel options (spin time, sound, colors) and up to 50 recent results with the time of each. |
wheelbloom:tool:yes-nowheelbloom:tool:numberwheelbloom:tool:letter | Each of those tools’ own settings, such as Maybe and the best-of format, the number range or the letter set, plus the numbers or letters already drawn when repeats are off. |
wheelbloom:teams | The team generator: your names, how to split them, custom team names and the last teams you made. |
This data stays on your device until you clear it, with the tools’ own clear buttons or by clearing site data in your browser. Advertising cookies are a separate matter, covered in the privacy policy.
What we don’t claim
WheelBloom hasn’t been audited or certified by a testing lab, and it doesn’t publish cryptographic commitments that would let you verify a past spin after the fact. It is built for classrooms, games, teams and everyday decisions. For a lottery, sweepstakes or prize draw where the law requires a certified random number generator or an independent witness, use a service that provides one. See the terms of use.
If anything here doesn’t match how the tools behave, please tell us.