ToolActToolAct

Decision Wheel

Let the wheel decide for you, say goodbye to indecision

Options List8/15
🍕 吃火锅
🎮 打游戏
📺 追剧
📚 看书
🚶 散步
🛌 睡觉
🎵 听音乐
🧹 做家务
Winning History

No records yet — give it a spin!

What is a Decision Wheel?

The Decision Wheel randomly selects one option from a list and turns a small choice into a visible, shared process. Common contexts include classrooms, team activities, choosing food, presentation order, lightweight giveaways, brainstorming, and situations where several options are roughly acceptable. Its value is reducing decision fatigue and making the selection feel transparent. It should not replace judgment when options carry different risks, costs, fairness concerns, or responsibilities. For serious drawings, participant lists, weighting, exclusions, and record-keeping should be defined before spinning so the outcome remains explainable. The wheel is best for low-stakes decisions where randomness is acceptable and everyone understands the rules.

How to Use

How to use

  1. Enter an option name in the input box, press Enter or click Add
  2. Add multiple options (up to 15), each option max 20 characters
  3. Click the center 'SPIN' button, the wheel starts spinning
  4. Wait for the wheel to stop, see the randomly selected result

Fairness Tips

  • Keep options short and comparable so the wheel is easy for everyone to read before it spins.
  • For important decisions, agree on the option list before spinning and avoid changing entries after seeing an unfavorable result.

Use Cases

Spin a visible wheel for group choicesAdd options one by one, press Enter to add quickly, and spin the canvas wheel when a class, meeting, stream, or family decision needs a transparent random pick. The result is chosen before the animation starts using crypto.getRandomValues, so the easing curve is decorative and the same seed replayed offline would land on the same slice. Use that to script a reproducible practice round before going live.
Keep the choice list small enough to readThe wheel limits entries to 15 and truncates long text on the slices, which makes it better for names, tasks, topics, rewards, chores, or short restaurant choices than long descriptions. With two entries the wheel is functionally a coin flip, while fifteen slices each cover only 24 degrees of arc, so labels longer than a couple of words become hard to read. Keep options short enough that the audience can read them during the spin.
Reset between unrelated decisionsUse reset or reload the default options before a new round so old entries, colors, rotation, and previous result do not confuse the next choice. Each spin draws an independent, identically distributed result from the remaining slice set, so consecutive picks can absolutely repeat and that is correct uniform behavior, not a bug. Define the participant list and rules before using it for anything public, since the wheel has no record of past winners.
Color-code slices so the result is readable on streamAssign contrasting slice colors for presentation, classroom, or stream settings so the audience can follow which option the wheel lands on without guessing from truncated labels. Alternating bright and muted slices also helps the final resting position stand out once the wheel decelerates, and pairing the brightest color with the most-likely-to-be-misread label removes a class of on-screen errors before they happen. Test the layout at the screen size your audience will see, since mobile streams often crop the wheel edges.
Document the rules before a giveaway or raffleWhen a real prize, shift assignment, or selection of participants is involved, write down the entry list, exclusions, and date before spinning so the outcome can be explained afterward. Capture the option list, the spin timestamp, and a screenshot of the resting slice, since the wheel itself does not store an audit trail and a later rebuild of the same list will not reproduce the same spin. Treat the screenshot as the receipt when the question 'why did this name come up' shows up the next day.

Technical Principle

The wheel is a Canvas 2D drawing layered with a deterministic random pick. Each slice is rendered with ctx.beginPath(); ctx.moveTo(cx, cy); ctx.arc(cx, cy, r, startAngle, endAngle); ctx.fill() where N equal options take an arc of 2π/N radians each — fifteen slices is therefore 24° of arc apiece, which is also why the input is capped at 15 to keep labels readable. The winning slice is decided BEFORE the animation: a 32-bit unsigned integer is drawn with crypto.getRandomValues(new Uint32Array(1))[0], reduced modulo N, and that integer is the answer. The animation then computes a target rotation of fullSpins × 2π + (2π − winnerIndex × sliceAngle − sliceAngle/2) so the pointer at the top of the canvas ends up aimed at the centre of the chosen slice, and tweens to it inside requestAnimationFrame using an easing curve such as easeOutCubic, f(t) = 1 − (1−t)³, or easeOutBack for the small overshoot that mimics a physical wheel slowing down. crypto.getRandomValues is the Web Crypto CSPRNG (specified in the Web Crypto API), seeded from the OS entropy pool, so unlike Math.random the pick cannot be predicted by reading the page's state. Weighted variants build a cumulative-probability array of length N and binary-search the random draw across it in O(log N). Outputs are entirely visual and ephemeral — nothing is logged, so any audit trail (timestamp, option list, screenshot) must be captured externally before the page is refreshed.

  • Canvas rendering: each slice is ctx.arc(cx, cy, r, startAngle, endAngle) with sliceAngle = 2π / N — 15 options gives 24° per slice, which is the practical readability ceiling
  • Winner selection uses crypto.getRandomValues(new Uint32Array(1))[0] % N — Web Crypto CSPRNG, seeded from OS entropy, suitable for fair single-shot draws but NOT for replayable lotteries (no audit trail)
  • Animation runs in requestAnimationFrame at the display refresh rate (typically 60 Hz) with easeOutCubic f(t) = 1 − (1−t)³ or easeOutBack for a slight overshoot — the curve is cosmetic, the winner is already chosen
  • Final rotation is targetRotation = fullSpins × 2π + (2π − winnerIndex × sliceAngle − sliceAngle/2) so the top-pointer lands on the slice centre, not its edge
  • Weighted-options mode builds a prefix-sum array of weights and uses binary search to map a uniform random number to a slice in O(log N) — equivalent to inverse-CDF sampling
  • Modulo bias is negligible when N ≤ 15 and the draw is 2³² values wide (bias ≈ N / (2 × 2³²) ≈ 1.7×10⁻⁹), so no rejection-sampling loop is needed
  • Each spin is i.i.d. — consecutive spins can repeat the same option and that is correct uniform behaviour, not a bug; deduplication across spins requires an external record

Examples

Lunch Decision

Options: Pizza, Sushi, Burgers, Tacos, Salad → Spin → Result: Sushi

Team Activity

Options: Bowling, Karaoke, Escape Room, Mini Golf → Spin → Result: Escape Room

Movie Night

Options: Action, Comedy, Horror, Romance, Sci-Fi → Spin → Result: Comedy

FAQ

Is the wheel spin actually random?

Yes. The selected segment is chosen by crypto.getRandomValues, then the wheel animates to land on it. The visual spin is just for theater - the result is decided up front. Each spin is independent of past spins.

Are all segments equally likely?

Yes. Each option gets an equal-sized slice and each slice has equal probability. There is no weighted or biased mode - all options have the same chance of being selected.

Does the spin animation affect the outcome?

No. The animation is decorative - the result is computed first, then the wheel rotates to show it. Even if you stop the animation early, the chosen segment is the same.

Can I save the wheel between sessions?

No. Options are kept only during the current session. Closing the tab or refreshing loses the list. Copy your options before closing if you need to reuse them.

Should I use it to make important decisions?

Use it for low-stakes group choices (lunch, presentation order, draft picks) where any option is acceptable and visible randomness avoids hard-feelings. Don't outsource decisions where consequences differ significantly between options - the wheel can't weigh trade-offs.

Why does it sometimes pick the same option twice in a row?

Each spin is independent. With three options, the probability of two same-option spins in a row is 1/3 ≈ 33%. With ten options, it's 10%. Repetition feels strange but is mathematically expected in genuine random selection.

Is my option list uploaded?

No. The wheel runs entirely in your browser. Options are saved locally if you opt in; nothing is transmitted.