How Random Is crypto.getRandomValues, Really?
Every tool on this site — the wheel, the dice, the coin, the number generator — ultimately calls one browser function: crypto.getRandomValues. It's worth explaining why, because most random-looking code on the web actually reaches for something weaker: Math.random().
Two very different kinds of "random"
Math.random() is a pseudorandom number generator optimized for speed, not unpredictability. Depending on the browser, its internal state can, in principle, be reconstructed from a sequence of outputs — which is irrelevant for something like a particle animation, but matters if randomness needs to resist someone trying to predict or influence it. crypto.getRandomValues, part of the Web Crypto API, is built on the operating system's cryptographically secure random number generator — the same class of randomness used to generate encryption keys. It's slower, and total overkill for some use cases, but it comes with a real guarantee behind it.
Does it matter for a spinner wheel?
Honestly, probably not, for most uses. Nobody is going to break into a "what's for dinner" wheel via a randomness side-channel. But once you're drawing names for a raffle with a real prize, splitting people into teams for something competitive, or settling a dispute where someone might genuinely want to influence the outcome, using the stronger source costs nothing and removes any question about whether the result could have been predicted or nudged. drawlots.net uses it everywhere, for everything, rather than deciding case-by-case where it "really" matters.
What rejection sampling fixes
There's a second, subtler problem: even with a good random source, converting a random 32-bit number into "an integer between 1 and 37" naively (with a modulo operation) introduces a small bias toward the lower numbers in the range, because 2^32 doesn't divide evenly by 37. This site's random helper avoids that by rejection sampling: it draws a fresh random 32-bit value and simply discards (rejects) any value that would fall in the leftover, unevenly-distributed remainder, trying again until it gets one that maps cleanly. The result is a genuinely uniform choice across your exact range, not an approximately uniform one.
The short version
Strong randomness source, unbiased mapping onto your range, nothing sent anywhere. That's the entire technical story behind every wheel spin, dice roll, and coin flip on this site.