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.
Selection, explained
The result is selected before the wheel moves. The spin is a readable reveal of that choice, not the source of the randomness.
Blank entries are excluded, and saved/imported weights must be positive whole numbers. Equal weights receive equal algorithmic chances; duplicate rows remain separate entries.
The wheel requests unsigned random values from the browser's Web Crypto API and maps one accepted value to an eligible entry.
After selection, the wheel calculates a landing point inside the winning segment and animates to it. Reduced-motion mode uses a short transition.
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.
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()
Add a list, adjust optional weights, spin, then keep or remove the result. The local result history makes repeated sessions easier to follow.