1. Every result comes from a cryptographic random generator
Spinvolta draws results with crypto.getRandomValues(), the cryptographically secure random number generator built into every modern browser and operating system — the same source used to create encryption keys. We never use Math.random() to decide anything. (Purely decorative things, like where a confetti piece flies, can use it.)
2. No modulo bias
A random 32-bit number can't always be split evenly into, say, 7 options: 4,294,967,296 isn't a multiple of 7, so the naïve number % 7 makes some options a tiny bit more likely. Spinvolta uses rejection sampling: if a number falls into the uneven leftover at the top of the range, it is thrown away and a new one is drawn. Every option ends up exactly equally likely, for any number of entries.
3. Weights are exact
In weighted mode, weights like 1, 2.5 or 0.125 are converted to whole numbers on a common scale and added up exactly. One uniform draw over the total picks the winner, so an entry with weight 2 is exactly twice as likely as one with weight 1 — and the segment sizes on the wheel show those exact odds.
4. Several winners without repeats
Multi-pick, teams, random order, card shuffles and giveaways use an unbiased Fisher–Yates shuffle (with the same rejection sampling), so every possible order or group of winners is equally likely.
5. Outcome first, animation second
When you press Spin, the winner is decided before the wheel moves. Then a solver calculates a motion — wind-up, speed, how many turns, the gentle wobble at the end — that lands precisely inside the winning segment, at a random spot away from the edges. Flicking harder, choosing a longer spin or using manual stop only changes how the spin looks. Our automated tests check thousands of random spins to make sure the animation always lands on the pre-drawn result and never wobbles into a neighbour.
6. Provably fair draws for giveaways and rooms
For giveaways (and any draw where trust matters), Spinvolta goes further so you don't have to trust us or the host:
- Before the draw, your browser fixes the exact entry list and settings and publishes a fingerprint — a SHA-256 hash of the list, the settings and a secret seed. Our server records when it received it.
- The fingerprint names a future round of the drand League of Entropy randomness beacon — a public value produced every 3 seconds by independent organisations around the world, which nobody can predict or choose.
- When that round is published, the winners are computed from the fingerprint, the beacon value and the seed.
- The proof page shows everything. Anyone can press Verify to recompute it in their own browser, including checking the beacon's cryptographic signature.
The host can't pick the winner because the beacon value didn't exist when the list was fixed. We can't either, because we never see the seed before the fingerprint is fixed and we don't control drand. If the beacon can't be reached, the draw falls back to a clearly labelled commit–reveal draw.
7. Tested, statistically
Our test suite runs chi-square goodness-of-fit tests over hundreds of thousands of simulated draws on every change, and over more than a million draws in the full suite: uniform picks, weighted picks, shuffles and multi-pick positions. You can run your own version on the fairness audit page.
What we can't prove
For an everyday spin, you're trusting that the code running in your browser is the code we describe. It runs entirely on your device, and you can inspect it with your browser's developer tools. When the stakes are higher — prizes, public draws — use a provably fair draw, which doesn't require trusting anyone.
Frequently asked questions
Can the wheel be rigged?
Not by the animation: the result is drawn fairly first and the motion is solved to show it. The only way to change odds is weighted mode, which shows a “Weighted wheel” badge and draws segment sizes to match.
Why did the same name come up twice in a row?
Because real randomness has streaks. With 10 entries, the same one comes up twice in a row 10% of the time. Use elimination mode if you want each entry only once.
What is drand?
drand is a distributed randomness beacon run by the League of Entropy, a group of independent universities, companies and organisations. It publishes a new verifiable random value every few seconds.