Skip to main content

Selection, explained

How the Wheel Chooses a Result

The result is selected before the wheel moves. The spin is a readable reveal of that choice, not the source of the randomness.

Selection steps

01

Read eligible entries

Blank entries are excluded, and saved/imported weights must be positive whole numbers. Equal weights receive equal algorithmic chances; duplicate rows remain separate entries.

02

Choose in the browser

The wheel requests unsigned random values from the browser's Web Crypto API and maps one accepted value to an eligible entry.

03

Reveal the choice

After selection, the wheel calculates a landing point inside the winning segment and animates to it. Reduced-motion mode uses a short transition.

Avoiding mapping bias

Browser cryptography produces a value in a fixed range. When that range does not divide evenly by the number of available outcomes, a simple remainder operation can make some outcomes slightly more likely.

The Wheel Spinner uses rejection sampling: values in the uneven tail are discarded and a new value is requested. Each accepted value then maps evenly to the available range.

On wheels with weights, each positive whole-number weight contributes that many units to the selection range. A weight of 3 therefore receives three times the chance of a weight of 1. The segment size on the displayed wheel follows the same proportion.

No quiet fallback to weaker selection

If a browser cannot provide the Web Crypto API, the wheel reports that secure random selection is unavailable instead of silently switching to Math.random(). Current versions of major browsers support Web Crypto in secure contexts.

Technical reference: MDN documentation for Crypto.getRandomValues()

Try the complete workflow

Add a list, adjust optional weights, spin, then keep or remove the result. The local result history makes repeated sessions easier to follow.