Skip to main content

Free Coin Flip & Spin Wheel

Flip a virtual coin, spin a customizable wheel, or randomly pick from a list of options. Uses your browser’s cryptographically secure randomness — not a verifiable public draw, so avoid regulated contests.

Works offline once loaded

🔒 All three use your browser’s cryptographically-secure random generator: the result is chosen first, then animated — the coin is a true 50/50, the wheel is spun to its already-picked result, and the picker is unbiased. Nothing leaves your device. This is fair for casual use, but it isn’t a verifiable public draw, so avoid regulated contests or high-value decisions.

Common uses

  • Flip a Coin to Make DecisionsUse a fair virtual coin flip to make quick, unbiased decisions when you're stuck between two options.
  • Spin Wheel for Random Team AssignmentsUse the customisable spin wheel to randomly assign team members to tasks, roles, or groups.
  • Random Student Picker for ClassroomsUse the spin wheel or option picker to randomly call on students, assign groups, or pick volunteers.
  • Virtual Coin Flip for SportsFlip a fair coin to determine team sides, first possession, serve order, or other sporting decisions.
  • Random Picker for GiveawaysPick a random winner from a list of entries using the Option Picker — transparent and fair.

How It Works

All three modes — coin flip, spin wheel, and option picker — use the browser's built-in Web Crypto API (crypto.getRandomValues) to generate the winning outcome, then drive the animation entirely client-side with CSS transforms and requestAnimationFrame. No server is involved at any point.

  1. 1
    Web Crypto picks the winner
    Before any animation starts, crypto.getRandomValues fills a Uint32Array with a cryptographically random 32-bit integer. A modulo operation maps it to the number of options (2 for heads/tails, N for the wheel or picker), so every outcome has an exactly equal probability.
  2. 2
    Rotation angle is calculated to land on the result
    For the coin, the code computes the shortest additional rotation (on top of the current cumulative angle) that ends with the correct face up — heads at 0°, tails at 180° — then adds 5 full spins so it looks like a real tumble. The wheel does the same: it finds the angular offset that brings the winning slice under the pointer, adds 6 full rotations, and applies a small random jitter so the pointer doesn't always stop dead-center in the slice.
  3. 3
    CSS transitions and requestAnimationFrame drive the animation
    The coin and wheel animate via CSS transform with a cubic-bezier easing curve applied to a single accumulated rotation value — no per-frame JavaScript is needed once the angle is set. The option picker uses requestAnimationFrame instead: each frame, a quadratically growing interval determines whether to advance the highlight, producing a slot-machine deceleration that always stops on the pre-determined winner.
  4. 4
    Result is revealed and logged to session history
    A setTimeout fires when the animation completes (1.3 s for the coin, 4.3 s for the wheel) and writes the result to state. The coin mode keeps a running session history of up to 24 flips with heads/tails counts. Users with prefers-reduced-motion enabled skip animation entirely and see the result immediately.

Guide

Worked example

Open the page on the "Coin Flip" tab and press "Flip Coin"; tapping the coin works too. The button reads "Flipping…" for 1.3 seconds while the coin turns, then "Heads!" or "Tails!" appears with a line such as "3 Heads / 2 Tails over 5 flips" and a row of H and T chips. Switch to "Spin Wheel", which starts with Pizza, Sushi, Tacos and Burgers. Type Ramen into "Add option…" and press Enter to get five slices of 72 degrees each. Press "Spin the Wheel"; after 4.3 seconds the pointer stops and a box shows "Winner" and the name. "Remove winner & spin again" appears while more than two options remain. In "Option Picker", with Yes, No and Maybe, press "Pick Random Option": the rows light up in turn for up to 1.6 seconds and the box labelled "Selected" shows the answer.

Which settings to use, and the limits

  • Tap the coin or the button, then wait for it to land. "Flip Coin" and the coin itself both start a flip. The result is chosen before the animation starts, using the browser's secure random generator, so it is a true 50/50 and the spin only shows it. Extra taps are ignored for the 1.3 seconds it takes. The chips under the coin list your last 24 flips, newest first, and the "Heads / Tails over N flips" line counts those 24 at most, so it never reports more than 24 flips. The list is kept only while the page is open.
  • Build the wheel with up to 24 options. Type in "Add option…" and press Enter or "+". Each option is cut to 24 characters, and "+" is greyed out when the box is empty, while the wheel spins, or at 24 options. The × beside an option removes it. There is no editing in place, so remove an option and add it again. "Spin the Wheel" needs at least two options. A label over 16 characters is shortened on its slice, but the winner box shows it in full. Adding the same option twice gives it two slices and so double the chance.
  • Use elimination to put names in order. After a spin, "Remove winner & spin again" takes the winner off the wheel and spins the rest straight away. It shows only while more than two options remain, so the last spin is between two. Use it to draw a running order or to knock out choices one by one. "Full screen", shown where the browser supports it, hides the option list and keeps the wheel, the winner and the spin button, which suits a classroom screen. You cannot add or remove options while it spins.
  • Use Option Picker for a plain list. Each option has its own row. Enter adds a row below, the up and down arrow keys move between rows, and Backspace on an empty row deletes it; the × button removes a row too, but one row always stays. Blank rows are ignored, and "Pick Random Option" is greyed out until at least one row has text. With only one filled row it answers at once, without the animation. You can add more rows than the wheel's 24 options, but a shared link keeps only the first 50.
  • Share a wheel or a list as a link. "Share result" appears under the "Spin Wheel" and "Option Picker" tabs. Once you have changed an option, the page address carries both lists after a #, and the button copies that link, or opens the share sheet on a phone. Browsers do not send the part after # to a server. When the link is opened, each option is cut to 24 characters, the wheel keeps 24 options and the picker 50, and commas inside an option survive. An address longer than 1,800 characters is dropped, which gives a plain link with no options.
  • Know what fair means here. All three modes use the browser's cryptographically secure random generator. The result is picked first and the animation is arranged to land on it; the small offset of where the pointer stops inside a slice is only for looks. That is fair for casual choices, but the page itself says it is not a verifiable public draw, so avoid regulated contests or high-value decisions. If your device is set to reduce motion, all three skip the animation and show the result at once.

Common problems and how to fix them

The "Spin the Wheel" button is greyed out.
It is disabled while the wheel is spinning and whenever fewer than two options are on it. Add another option in "Add option…" and press Enter. The × buttons will remove options all the way down to none, so a wheel can end up with too few.
The "+" button next to "Add option…" is greyed out.
It is disabled while the box is empty or holds only spaces, while the wheel spins, and when the wheel already has 24 options. At 24, remove an option first. Anything you type beyond 24 characters is cut off when the option is added.
A shared link opens on the "Coin Flip" tab, or has lost your options.
A link made after editing carries both the wheel list and the picker list. When both are present, the page leaves "Coin Flip" selected, so open "Spin Wheel" or "Option Picker" to find your options. If the address passed 1,800 characters, which non-Latin letters reach quickly because each one takes about nine characters once encoded, "Share result" gives a plain link with no options. Options over 24 characters are cut, and lists are trimmed to 24 (wheel) or 50 (picker).
Long option names look cut off on the wheel.
A slice shows only the first 15 characters of a label longer than 16, followed by "…", and the type gets smaller as labels get longer. The winner box shows the full text. Use shorter names if the wheel has to be read from a distance.
The coin or wheel shows its result at once, with no spin.
Your device or browser is set to reduce motion, and the page respects that: the coin, wheel and picker skip the animation and show the result straight away. The result is chosen in the same way. Turn the setting off in your system's accessibility options if you want the animation back.

How it compares

A real coin, die or paper slips are things everyone can watch; this page is a quick stand-in when you have none, with a coin, a name wheel and a list picker in one place. Every option has the same chance, so the only way to weight a choice is to add it more than once. It flips one coin at a time and remembers 24 flips while the page stays open. Wheel and picker lists are kept in the page address, so they survive a refresh. The page states that nothing leaves your device. It gives no proof that a draw was fair, since there is no public record or seed, so it is not suitable for regulated contests or prizes. There are no accounts and no sounds.

Related Tools

Frequently Asked Questions