utsuwa

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.

Related Tools