Spin the Wheel – Random Picker & Decision Wheel
Type in your options and spin the wheel — or draw multiple winners at once. Uses crypto.getRandomValues() and Fisher-Yates shuffle for provably fair results. Share via URL, no sign-up needed.
0 / 20
How to Use
Spin the Wheel mode: Enter your choices — one per line — in the text area, then hit 'Spin'. The wheel animates for 3–5 seconds and reveals the winner in the center. Use the preset buttons (Lunch today, Pick a member, Yes or No) to populate the list with ready-made examples instantly. Toggle 'Exclude past winners' to remove already-picked entries from future spins, great for round-robin rotations or ensuring no one is skipped on duty. The last 10 results stay visible in the history panel.
Random Draw mode: Enter your candidate list, set how many winners you want, then click 'Draw'. The picker selects that many entries without repetition, revealing them one by one with a fade-in animation spaced 0.5 seconds apart — perfect for live raffle reveals or class-assignment draws.
Share & bookmark: Click 'Share via URL' to copy a link that encodes your entry list in the URL. Bookmark it or send it via chat — anyone who opens the link gets your exact wheel, no account needed. Entries are never uploaded to a server.
Use cases: deciding where to eat, picking team members or duty assignments, classroom name-pickers, live-stream raffle giveaways, game show-style reveal, or any everyday decision you want to leave to chance. Streamers can embed this page as a Browser Source in OBS to display the wheel on stream (a streaming-optimized version with transparent background and custom sound effects is planned for BOOTH in Phase 2).
How It Works: Provably Fair Randomness
Insight A — Why crypto.getRandomValues() instead of Math.random(): JavaScript's built-in Math.random() uses a pseudo-random number generator (PRNG) seeded at startup. Because the output sequence is deterministic given the seed, a sophisticated observer could in principle predict future results. MDN's own documentation warns: 'Math.random() does not provide cryptographically secure random numbers.' This tool instead calls crypto.getRandomValues(), which draws entropy from OS-level noise sources such as hardware interrupts, mouse movement timings, and network jitter. The resulting CSPRNG (Cryptographically Secure PRNG) output cannot be predicted from prior outputs — meaning neither the tool operator nor any outside party can know the result in advance. For a raffle where participants must trust the fairness, that distinction matters.
Insight B — Fisher-Yates shuffle vs. the naive sort trick: A popular but flawed pattern is array.sort(() => Math.random() - 0.5). The problem: JavaScript's sort engine is not contractually required to call the comparator consistently, so the probability distribution across permutations is uneven — some orderings appear far more often than others. The Fisher-Yates shuffle (Durstenfeld variant) avoids this entirely. Starting from the last element, it picks a random element from the remaining unplaced items and swaps them into position. For n items, every permutation appears with exactly probability 1/n!. For three items [A, B, C] there are 6 permutations; each gets probability 1/6 — provably uniform. Reference: Fisher & Yates (1938) Statistical Tables for Biological, Agricultural and Medical Research; Knuth, The Art of Computer Programming, Vol. 2, §3.4.2.
Frequently Asked Questions
- Is the result truly random and fair?
- Yes. The wheel uses crypto.getRandomValues() — a cryptographically secure random source drawn from OS entropy — combined with a Fisher-Yates shuffle that gives every permutation exactly equal probability (1/n!). Unlike Math.random(), the output cannot be predicted from prior spins, so neither the tool author nor any observer can know the outcome in advance.
- Can I save or share my wheel?
- Yes. Click 'Share via URL' to copy a link that encodes your entry list directly in the URL. Bookmark it for repeat use, or send it to others — they'll see exactly the same wheel. Entries are never sent to a server, so private names or internal team data stay on your device.
- Can I use this as an OBS browser source for streaming?
- Yes — set this page's URL as a Browser Source in OBS and the wheel will appear on stream. The current version is a standard web page. A streaming-focused edition with transparent background, custom color themes, and sound effect presets is planned for release on BOOTH in Phase 2. Details will be announced on this page when available.
- How many entries can I add?
- Up to 20 entries, each up to 50 characters long. Entries beyond 20 are automatically ignored. Duplicate entries are allowed: adding 'Pizza' twice doubles its chance of being picked, giving you a simple way to create weighted probabilities.
- Can the same entry win twice in a row?
- In Spin mode, every spin draws from the full list by default, so back-to-back wins are possible. Turn on 'Exclude past winners' to remove already-picked entries from future spins — once all entries have been picked, the list resets automatically. In Draw mode, each draw is a single no-replacement sample, so the same entry cannot appear twice within one draw.
Need random characters or passwords instead? Try the Password Generator. For time-limited events, a Countdown Timer is coming soon.