Decision Wheel

Type a list of options, hit Spin, and let a coloured wheel pick one for you. Useful for classroom raffles, family movie night, deciding what to cook, or any other decision where the deliberation has stopped paying off. The pick is unbiased: every option has exactly the same chance per wedge, drawn from the browser's cryptographic random source.

Explain like I'm 5 (what even is this calculator?)

Imagine writing each choice on a slice of pie, then spinning the pie and seeing which slice the arrow lands on. This page does that, with the slices coloured so you can tell them apart. Nothing you type in gets sent anywhere.

Build your wheel

Browser-only. Your list of options never leaves the device. Picks use the Web Crypto API for an unbiased draw.

0 options entered.

Off by default. Turn on for tournament-style elimination, or to draw prize positions in order without the same option coming up twice.

Add some options and hit Spin.

Prove it

The result is selected before the wheel moves. The animation is choreographed to land on the wedge that was already chosen, not the other way around. Here is the order of operations:

  1. Read the options from the textarea, trim whitespace, drop empty lines, cap at 50.
  2. Draw a winning index using crypto.getRandomValues with rejection sampling, so every option has exactly the same chance.
  3. Compute the final wheel rotation: a fixed number of full spins plus the angle that places the chosen wedge under the pointer.
  4. Apply that rotation as a CSS transition. The wedge under the pointer when the wheel stops is, by construction, the one we picked in step 2.

This is the unbiased draw used in step 2. The same pattern is used in the Random Name Picker and Password Generator on this site.

// Unbiased integer in [0, n)
function randomInt(n) {
  const max = 0xFFFFFFFF;
  const limit = max - ((max + 1) % n);
  const buf = new Uint32Array(1);
  while (true) {
    crypto.getRandomValues(buf);
    if (buf[0] <= limit) return buf[0] % n;
  }
}

// Decide first, then animate
const winnerIndex = randomInt(options.length);
const wedgeCentre = winnerIndex * (360 / options.length) + (360 / options.length) / 2;
const finalRotation = 5 * 360 + ((360 - wedgeCentre) % 360);
rotor.style.transform = `rotate(${finalRotation}deg)`;

Nothing leaves the device. The page makes no network requests after it has loaded, so your list cannot be exfiltrated. Disconnect your network and the wheel still works.

Useful? Save this calculator: press Ctrl + D to bookmark it.

When a spinning wheel earns its keep

Classroom raffles are the obvious case. End-of-term prize draws, "who reads next?", deciding which group goes to lunch first: anything where the children can see the result being chosen and a clear visual is half the point. A wheel works better than a number generator here because every child can watch the same arrow slow down and stop on a wedge with a name they recognise. The drama is the feature.

Family movie night, dinner, weekend plans. Two adults and three children with five different opinions, and the deliberation is taking longer than the activity will. Type the five options, spin once, get on with the day. The wheel is honest theatre: nobody can argue the choice was rigged because the wedges are visible and the arrow lands where it lands.

Prize draws at small events. Charity quizzes, school fairs, office Christmas raffles. A spinning wheel feels fairer than a hat, more festive than a spreadsheet, and easier to project on a screen than a command-line tool. Paste the entrants in, spin, announce the winner, repeat. Turn on Remove winner if you are drawing first, second and third places in order, so the same name cannot win twice.

Tournament-style elimination is the other use for Remove winner. Round-robin draws, knockout brackets, deciding the order players take their turns: each spin chooses the next entry and removes it from the list. When the wheel runs dry, you have a complete ordering. It is faster than shuffling a deck and the audience can follow what is happening.

Common mistakes to avoid

Stray blank lines and trailing spaces are the usual culprit. Spreadsheets and word processors love to drop in extra whitespace on copy-paste. The page strips leading and trailing whitespace on every line and skips empty lines, so you do not need to clean the input by hand, but if your wheel looks like it has a phantom wedge, look for a stray space-only line in the textarea.

Treating the wheel as a serious decision-making tool is the other one. For genuinely high-stakes calls (where to live, whether to take the job, whether to break up), a coin flip is the more honest framing: it forces you to notice your own reaction when you see the result. The wheel is for fun, for breaking deadlocks on small choices, and for entertainment. Use the right tool for the right kind of decision.

Pasting more than 50 options is the third. Beyond that, the wedges become slivers nobody can read, the labels overlap, and the visual stops working. The page caps the list at 50 and tells you when it has trimmed the rest. For long lists where you just need a fair pick, the Random Name Picker is the better tool.

Edge cases this page handles

  • Single option. The wheel renders as a full circle and a warning explains that with only one option entered, that is the result.
  • Empty list. The Spin button shows a clear message and does not animate.
  • Duplicates. Kept on purpose, so you can weight an option by repeating it. Three Pizza lines and one Curry line is a three-in-four chance for Pizza.
  • Remove winner with one option left. Spins, declares the last option as the result, then disables further spins until you add more.
  • Trailing whitespace and blank lines. Stripped before the wheel renders.
  • Reduced motion. The animation respects prefers-reduced-motion by shortening the spin and reducing the easing curve.

Related calculators

The wheel handles a few options. These cover the rest of the random toolkit.

Frequently asked questions

Is the result actually random?

Yes. The winning wedge is chosen up front using crypto.getRandomValues with rejection sampling, the same primitive browsers use for session keys. The animation that follows is choreographed to land on the pre-selected wedge. There is no Math.random and the spin itself does not affect the result.

Does my list get sent anywhere?

No. Everything happens in your browser. The textarea you paste into never leaves the device. Disconnect the network and the wheel still spins.

What does Remove winner do?

When the toggle is on, the winning option is removed from the list before the next spin. Useful for tournament-style elimination, drawing prize positions in order, or running a class through a list of names without the same one coming up twice.

Can I weight the options?

Yes, by repeating an option in the textarea. If "Pizza" appears three times and "Curry" once, Pizza has a three-in-four chance per spin. Duplicates are not stripped, so the wheel reflects whatever you paste in.

How many options can the wheel handle?

Up to 50. Beyond that the wedges become slivers nobody can read, so the page caps the list and tells you it has done so. If you genuinely need more entries, the Random Name Picker is the better tool.