Trust is the whole point

If the person who was picked suspects the draw was rigged โ€” even slightly โ€” the result loses its value immediately. A classroom student questions why they were chosen. A giveaway entrant asks why the same name keeps winning. A team member wonders why they always get the difficult task. Trust in a random draw is not just a technical question; it is a social one. And trust has to be earned with evidence.

Every spin on Spin the Wheel is designed to be provably fair, using a randomness standard that goes well beyond what most online wheel spinners offer. Here is exactly how it works โ€” and how you can verify it yourself, right now, without taking anything on trust.

Why most spinners fall short: the problem with Math.random()

Most random number generators used in web applications rely on a JavaScript function called Math.random(). It produces numbers that look random but are not truly random in a mathematical sense. Math.random() is a pseudo-random number generator (PRNG) โ€” it uses a deterministic algorithm that starts from a seed value and produces a sequence from that seed. Given the right information about the starting state, the entire sequence can be predicted in advance.

Security researchers have demonstrated this in practice. V8 โ€” the JavaScript engine used in Google Chrome โ€” uses an algorithm called xorshift128+, and its internal state has been reconstructed from observed outputs. That means that, under the right conditions, future Math.random() values can be predicted before they are generated. For a casual coin flip this does not matter. For a live giveaway with real prizes, it matters a great deal.

How crypto.getRandomValues() is different

Spin the Wheel uses a different approach for every single spin: crypto.getRandomValues(). This is part of the Web Cryptography API โ€” a browser standard designed specifically for situations where unpredictability is a security requirement.

Instead of running a mathematical formula from a seed, crypto.getRandomValues() draws entropy directly from the operating system. The OS collects this entropy from hardware sources that are genuinely unpredictable:

These sources are mixed together by the OS entropy pool and passed to your browser, which uses them to generate the random number that decides where the wheel stops. The result cannot be seeded, predicted, or reverse-engineered from its outputs. It is the same randomness standard used to generate HTTPS session keys and cryptographic tokens โ€” the infrastructure securing your online banking.

Every spin on Spin the Wheel calls crypto.getRandomValues(). Each result is statistically independent โ€” knowing the outcome of the last 10,000 spins gives you zero advantage in predicting the next one.

Equal probability for every entry

Cryptographic randomness handles unpredictability. Equal probability handles fairness across entries. Both matter, and Spin the Wheel addresses them separately.

Every name you add to the wheel occupies an identical arc segment. With five entries, each takes up exactly 72ยฐ (360ยฐ รท 5). With twenty entries, each takes up exactly 18ยฐ. The random number generated by crypto.getRandomValues() is then mapped uniformly across all possible landing angles, so each entry receives a mathematically equal share of the probability space.

There is no weighting, no hidden preference for recent winners, and no code that adjusts probabilities based on how long an entry has been on the wheel. Every name you add competes on completely equal terms, every spin.

Completely free โ€” and built for transparency

Every feature described in this article โ€” the cryptographic randomness engine, the equal arc segments, the built-in fairness verification โ€” is included in Spin the Wheel at no cost. There is no paid tier that unlocks the "fair" version of the tool. There is no premium plan that grants access to crypto.getRandomValues() while the free tier uses a weaker generator. The same cryptographic standard applies to every spin, for every user, on every device.

This matters because of what it implies. If a tool offered "verified fairness" as a paid feature, it would suggest that the default experience was somehow less rigorous. Randomness cannot be tiered. Either each spin is genuinely independent and unpredictable, or it is not. Spin the Wheel applies crypto.getRandomValues() to every draw โ€” whether you spin once for a personal decision or ten thousand times for an empirical fairness check before a public giveaway.

The source code that runs in your browser is inspectable. Open DevTools, search for crypto.getRandomValues, and you will find it in the wheel logic. The fairness test uses the same call path as a real spin โ€” not a separate demonstration mode. What you see when you run 10,000 simulated spins is exactly what governs every real result.

What a biased wheel would actually look like

It helps to understand fairness by understanding what unfairness looks like. A biased digital wheel would be one where certain entries land more often than their arc size predicts โ€” consistently, across repeated independent runs, not just by chance in a single trial.

With Math.random()-based wheels, systematic bias can arise from how the random value is mapped to a wheel position. If the mapping is uneven โ€” for example, if the full output range of Math.random() is not distributed proportionally across all arc segments โ€” some entries receive a slightly higher effective probability without it being visually obvious from a small number of spins. Run a single giveaway and the difference is invisible. Run ten thousand spins in multiple batches and a structural problem surfaces clearly.

The tell-tale sign of bias is consistency across independent test batches. Run ten rounds of 10,000 spins. If the same entry reliably lands 7โ€“9% above its expected share in batch after batch, that is structural bias, not noise. Random noise shifts which entry appears "above average" in each independent batch. Systematic bias favours the same entry every single time.

On Spin the Wheel, this cannot happen by design. The landing angle is derived by dividing the output of crypto.getRandomValues() uniformly across the full 360ยฐ circle, then checking which arc segment that angle falls within. Every entry occupies an identical arc length. There is no rounding shortcut, no modulo bias, and no hidden weight attached to any position. Run the 10,000-spin test repeatedly with the same wheel and you will see different entries slightly above average each time โ€” the signature of a genuinely independent random system.

The 10,000-spin fairness test: see the proof yourself

Cryptographic guarantees are powerful, but verifiable evidence is better. Spin the Wheel includes a built-in fairness tester that runs 10,000 simulated spins in under a second using the same crypto.getRandomValues() function and shows you exactly how many times each entry was selected.

To run it: add your names to the wheel, open the fairness test panel, and click Run. Results appear instantly.

What does a fair result look like? On a six-entry wheel running 10,000 spins, each name should land close to 1,667 times โ€” approximately 16.7% of the total. You will notice small differences between entries: one might land 1,672 times, another 1,647. That variation is not a sign of bias. It is exactly what genuine randomness produces over a finite number of trials.

A perfectly uniform result at every sample size would actually be suspicious โ€” it would suggest the numbers were being adjusted to hit a target rather than drawn freely. The small spread you see is statistical noise, the normal and expected behaviour of any fair random system. A biased wheel would show one entry consistently landing well above its expected share across multiple repeated runs. With Spin the Wheel, that does not happen.

To back this up with evidence rather than assertion, we ran the exact crypto.getRandomValues() + equal-arc logic described above โ€” not a mock, the same call path โ€” for 10 independent runs of 10,000 spins each on a six-entry wheel (100,000 spins total). Here is what came out:

Observed spin counts per entry, 10 runs ร— 10,000 spins (expected: 1,666.7 per entry, 16.7%)
Run Alex Jordan Sam Taylor Casey Morgan
11,6611,6661,6971,6551,6961,625
21,6821,6141,6821,6851,6591,678
31,5981,6711,6641,6581,7281,681
41,6391,6631,6431,6471,7221,686
51,7151,6211,6821,6901,6801,612
61,6511,6261,6851,6711,6981,669
71,6541,7101,6611,6651,6381,672
81,6641,5751,6931,6681,6971,703
91,7201,6451,6941,6271,5731,741
101,5751,6941,7241,6671,6551,685
Total (100,000) 16,559 16,485 16,825 16,633 16,746 16,752
Share 16.56% 16.48% 16.83% 16.63% 16.75% 16.75%

Range per entry across the 10 runs: Alex 1,575โ€“1,720 ยท Jordan 1,575โ€“1,710 ยท Sam 1,643โ€“1,724 ยท Taylor 1,627โ€“1,690 ยท Casey 1,573โ€“1,728 ยท Morgan 1,612โ€“1,741. No entry leads in more than 3 of the 10 runs, and the entry with the highest run count changes almost every time โ€” the signature of independent draws, not a structural favourite.

Best practices for a result everyone trusts

The algorithm guarantees fairness at the technical level. For the human level โ€” the moment where everyone in the room needs to feel comfortable with the outcome โ€” a few simple habits make the result feel as trustworthy as it actually is.

The bottom line

Spin the Wheel is built on the same cryptographic standard used in browser security. crypto.getRandomValues() makes each spin statistically independent, genuinely unpredictable, and equal across every entry on the wheel. The 10,000-spin fairness test gives you empirical evidence to confirm this yourself โ€” not because you have to take it on trust, but because transparent tools should be verifiable.

The result is fair. And now you know exactly why.

Spin the Wheel โ€” free, fair, and cryptographically random โ†’