Spin the Wheel
A fair, free wheel spinner and random name picker. Weighted odds, verifiable draws, saved wheels, and nothing uploaded unless you share.
Entries
6 / 1,000Paste columns from Google Sheets or Excel, or import a CSV: the first column is the name and an optional second column is the weight. Files are read on your device.
Start from a preset
Options
The center image stays on this device and is never uploaded or saved.
Verify a fair draw
Paste what the host published: the entries (one per line, weights written as Name *3) in the same order, the revealed seed and the commitment hash shown before the spin. The panel recomputes both.
Odds and colors (advanced)
| Entry | Weight | Chance | Color |
|---|---|---|---|
| Alice | 16.67% | ||
| Ben | 16.67% | ||
| Cara | 16.67% | ||
| Dev | 16.67% | ||
| Eli | 16.67% | ||
| Fay | 16.67% |
Make teams
Save, export and share
Up to 20 wheels. Saved in this browser only; clearing site data removes them. The current wheel is also kept automatically.
Small wheels are encoded in the link itself and nothing is uploaded. Larger wheels are stored as a snapshot of the entries, weights, colors and settings (never images). Only people with the link can open it.
Spin history (0)
Your spins appear here. The log lives on this page only.
- Verified: fair odds and exact landing tested on every release
- Last reviewed:
- Private by default: nothing is uploaded unless you create a share link
- Found an error?
How to use the wheel
- Step 1
Add your entries
Type or paste one name per line, up to 1,000. You can paste columns straight from Google Sheets or Excel, import a CSV, or start from a preset such as Yes/No, dinner ideas or truth or dare.
- Step 2
Spin
Click the wheel, press Space or Enter, or tap Spin. Choose how long it spins, from 2 to 15 seconds. The winner is chosen the moment you spin, and the animation is calculated to end on it.
- Step 3
Use the result
The winner appears in a pop-up where you can remove them, spin again or keep going. Turn on winner removal to run through a whole list, draw several winners at once, or make teams without spinning.
Ideas for classrooms, giveaways, decisions and games
Classrooms
- Pick who answers next, so every student expects to be called on.
- Choose a presenter order, a reading topic or a vocabulary word.
- Split the class into teams in one click.
- Run the wheel full screen on a projector.
Giveaways and raffles
- Give loyal entrants extra chances with weights such as Alex *3.
- Draw several winners at once without anyone winning twice.
- Switch on Fair draw and post the commitment before you spin, so anyone can check the result afterwards.
Decisions
- Settle dinner, a movie or whose turn it is with the dinner-ideas or Yes/No presets.
- Weight your favorite options higher when you want a nudge rather than a coin flip.
Games and streams
- Truth or dare, charades prompts or a random letter for category games.
- Use the transparent-background option to capture the wheel in OBS.
- Embed the wheel on a community page.
How the wheel picks a winner
The winner is chosen first, by your browser's cryptographic random number generator. The spin animation is then worked out to end exactly on that winner's slice, so the animation can never influence who wins.
Formulas
Random numbers come from crypto.getRandomValues, the browser's cryptographically secure generator. Math.random is never used for a draw.
To pick one of n equally likely outcomes the wheel reads a 32-bit number and throws away values from the last, partial run of the range (rejection sampling), so rounding never makes some outcomes likelier than others.
accept x if x < 2³² − (2³² mod n), then pick x mod n
Each weight is stored as a whole number of hundredths, so the draw is exact integer arithmetic. The wheel draws a uniform integer below the total and finds the entry whose running total contains it.
P(entry i) = wᵢ ÷ (w₁ + … + wₙ)
The slice sizes are proportional to the weights, and the chance shown for each entry is the same fraction, worked out exactly.
slice angle = 360° × wᵢ ÷ Σw
To land, the wheel's final rotation is set so that a point at least 10% inside the winner's slice ends under the pointer. Slice edges are never used.
rotation = −(start + inset × width) × 360° (mod 360°), plus whole turns
Several winners are drawn one after another, and each winner is removed before the next draw, so nobody can win twice in one spin.
Fair draw: before the spin the page shows a commitment, the SHA-256 hash of the canonical JSON of the entries, their weights, the number of winners and a secret random seed. The winner comes only from that seed, through a stream built from HMAC-SHA-256 in counter mode.
commitment = SHA-256(JSON); block k = HMAC-SHA-256(seed, "clevr-wheel-v1" ‖ k)
To verify a fair draw, open the Verify panel (or the verification link the host shares), paste the entries in the same order with their weights, the revealed seed and the commitment hash, and press Verify. It recomputes the hash and the winners in your browser.
Sources
- MDN Web Docs, Crypto.getRandomValues(). The browser's cryptographically secure random number API that every ordinary draw uses.
- NIST FIPS 180-4, Secure Hash Standard. Defines SHA-256, which makes the fair-draw commitment.
- IETF RFC 2104, HMAC. Defines the keyed hash used to generate the fair-draw random stream.
How we test this
This tool is tested for fair odds, exact landing and reproducible draws every time the site is released, and a release does not ship if a check fails. Example from the test suite: Alice ×3, Bob, Chloé ×0.5, Dev, two winners, seed 9f2c5a77…49aa gives Dev, then Alice (commitment 2e6cb626…876e). The test rebuilds the random stream with Node's crypto library and repeats the weighted draw itself, then checks the wheel's code agrees. Other tests run 100,000 draws through a chi-square check and confirm that the animation ends on the chosen slice for wheels of 2, 3, 7, 100 and 1,000 entries.
The test is “fair draw: the same entries, weights and seed always give the same winners, matching an independent re-implementation” in tests/wheel.test.mjs. More on how all tools are tested: our testing approach.
Assumptions and limits
- The randomness is only as good as your browser's generator. No web page can prove a device has not been tampered with.
- Fair draw shows that the list and the draw were fixed before the spin and that the result follows from them. It does not stop a host from privately trying several seeds before publishing a hash, so for high-stakes giveaways publish the commitment early, where others can see its time, and keep the list unchanged.
- Weights run from 0.01 to 1,000 with two decimals, and a wheel holds up to 1,000 entries. Names longer than 100 characters are shortened.
- A wheel is saved on your device only. A share link made from a small wheel contains the wheel inside the link; a larger wheel is stored as a snapshot of its entries, weights, colors and settings (never images) and can be opened by anyone with the link.
- Check the rules that apply to your giveaway, raffle or contest. A wheel is a random picker, not legal advice or an approved lottery system.
Last reviewed , the date of the latest change to this tool's calculation or content.
Embed this on your site
Free to use on blogs, classroom pages and docs. Paste this where you want the spin the wheel to appear; it includes a text link back to this page. See every widget on the embed page.
<iframe src="https://www.clevr.tools/embed/wheel" width="100%" height="700" style="border:0" loading="lazy" title="Spin the wheel"></iframe>
<p><a href="https://www.clevr.tools/wheel">Spin the wheel</a> by clevr.tools</p>Helpful answers
Frequently asked questions
- Is the wheel really random and fair?
- Yes. The winner is chosen with your browser's cryptographic random number generator (crypto.getRandomValues) using rejection sampling, which removes the small bias that a simple remainder calculation creates. The winner is chosen first and the spin animation is then calculated to land on their slice, so the animation never affects the result. The tests run 100,000 simulated draws through a chi-square check on every release.
- Can I save my wheel?
- Yes. The wheel you are working on is saved automatically in your browser, and you can keep up to 20 named wheels. Saved wheels live on this device only, so clearing your browser data removes them. You can also export a wheel as a .json file and import it later or on another device.
- Can I remove winners after each spin?
- Yes. Turn on "Remove winners after each spin" to take each winner off the wheel automatically, or press Remove winner in the pop-up. You can also draw several winners in one spin; they are chosen without replacement, so nobody is picked twice.
- Can I give entries different odds?
- Yes. Add a weight after a name, for example Alice *3, and Alice is three times as likely as an entry with no weight. The slice sizes match the weights, and the Odds and colors section lists each entry's exact chance as a percentage.
- Does it upload my names?
- No. Spinning, saving and exporting all happen in your browser, and nothing is uploaded unless you press Create share link. A small wheel is encoded inside the link itself. A larger one is stored as a snapshot of the entries, weights, colors and settings (never images) so the link can open it. Anyone with that link can see the wheel.
- How do I use it for a giveaway?
- Paste your entries, turn on Fair draw, and post the commitment hash where your audience can see it before you spin. Spin, then share the verification link or the revealed seed. Anyone can paste the entries, seed and hash into the Verify panel to confirm that the list was not changed and that the winner follows from the seed. Check the rules for giveaways and raffles where you live, since a wheel is a random picker and not legal advice.