Is NameWheel Actually Random?
Yes — Here Is the Proof
Most wheel spinners claim to be "random" without explaining what that means. This page shows exactly how NameWheel generates results, shuffles names, and why no spin can ever be predicted or rigged.
The Short Version
- NameWheel uses
crypto.getRandomValues(), the same cryptographic randomness used by password managers and TLS encryption — not the weakerMath.random(). - All spinning, shuffling, and winner calculation happens entirely inside your browser. Nothing is sent to any server during a spin.
- Every name gets exactly equal probability — equal arc on the wheel, mathematically guaranteed.
- The wheel animation is cosmetic. The winner is already determined by physics at the moment you click Spin. The animation just shows you what happened.
- In Remove After Spin mode, a Fisher-Yates shuffle ensures every possible ordering of your names is equally likely.
- The service worker caches all assets after your first visit, so NameWheel works fully offline.
Why "Random" Is Harder Than It Sounds
Computers are deterministic machines. Given the same inputs, they produce the same outputs every time. Genuine unpredictability requires a source of true entropy — something outside the computer's control. This is harder to achieve in software than most people realize, and most wheel spinners cut this corner in a way that matters.
The most common approach, Math.random(), is what the majority of spinner tools use. It works by running a mathematical formula that generates numbers which look random but are actually a deterministic sequence starting from a seed value. The seed is usually the current timestamp. This means:
Math.random() — What Most Spinners Use
Pseudorandom number generator (PRNG). Deterministic sequence from a seed. Fast and fine for visual effects and games, but technically predictable if you know the seed. Not suitable for anything requiring genuine fairness guarantees.
crypto.getRandomValues() — What NameWheel Uses
Cryptographically Secure PRNG (CSPRNG). Draws entropy from the operating system — hardware interrupts, mouse movements, thermal noise. Output is computationally indistinguishable from true randomness even with unlimited analysis.
For a classroom random name picker or a casual giveaway wheel, the practical difference for everyday use is small. But when fairness genuinely matters — for prize draws, draft orders, or any situation where someone might challenge the result — "I used a cryptographically secure algorithm" is a provably stronger claim than "I used Math.random()." NameWheel uses the stronger one because it costs nothing extra and there is no reason not to.
How NameWheel Generates Random Numbers
Every random decision NameWheel makes — the spin duration, the total rotation amount, which name wins, the order of the Fisher-Yates shuffle — uses the same core function:
Breaking this down step by step:
new Uint32Array(1)creates a typed array capable of holding a single 32-bit unsigned integer, with a value range of 0 to 4,294,967,295 (approximately 4.3 billion possible values).crypto.getRandomValues(buf)fills that integer with cryptographically random bytes drawn from the operating system's entropy pool. On Windows this calls CryptGenRandom. On Linux and macOS it reads from the getrandom syscall or /dev/urandom. On iOS and Android it draws from hardware entropy sources built into the device.buf[0] / (0xFFFFFFFF + 1)divides the raw integer by 4,294,967,296 to produce a floating-point number in the range [0, 1). This gives a uniform distribution across the full interval with over 4 billion possible distinct values.
This is the same cryptographic foundation used by password managers to generate strong passwords, by browsers to establish TLS connections, and by operating systems to generate cryptographic session tokens. For picking a random name from a list, it is far stronger than anything you will ever need. But it costs exactly nothing extra to use, so NameWheel uses it for everything.
What Provides the Entropy?
The entropy — the actual unpredictability — comes from the operating system, not from NameWheel's code. Modern operating systems accumulate entropy continuously from low-level hardware events: the exact nanosecond timing of keyboard presses and mouse movements, network packet arrival times, storage device read latency variations, and on supported systems, a dedicated hardware random number generator (HRNG) built directly into the CPU silicon.
The window.crypto API gives JavaScript access to this entropy pool without exposing the underlying implementation. This means the randomness in your spin is ultimately grounded in physical reality — the thermal noise and timing jitter in your device's hardware at the exact moment you clicked Spin.
The Fisher-Yates Shuffle (Remove After Spin Mode)
When you enable Remove After Spin mode, you want each name to appear exactly once before any name can repeat. This is the classic "random shuffle" problem — how do you randomly order a list so that every possible ordering is equally likely?
The naive approach — pick a random name, remove it, repeat — has a subtle but real flaw. As the list shrinks, the probability of each remaining name being selected changes as a function of what has already been removed. The resulting distribution over all orderings is not uniform. You get some orderings more often than others, which violates the fairness requirement.
NameWheel uses the Fisher-Yates shuffle (also known as the Knuth shuffle, published in Donald Knuth's "The Art of Computer Programming"), which has been mathematically proven to produce a perfectly uniform distribution:
The algorithm iterates backwards from the last element to the second. At each position i, it selects a uniformly random index j between 0 and i (inclusive), then swaps the elements at those two positions. The proof that this produces a uniform distribution over all n! possible orderings has been established since Fisher and Yates published it in 1938 and Knuth formalized it in 1969.
Critically, NameWheel uses secureRandom() for every swap — not Math.random(). The Fisher-Yates algorithm is only as uniform as the random number generator it uses. By combining a provably uniform shuffle algorithm with a CSPRNG source, NameWheel guarantees that every permutation of your list has mathematically equal probability.
The Wheel Spin Physics
The spinning animation is purely visual — it does not affect the outcome in any way. But the physics are worth explaining, because they look and feel like a real spinning wheel for deliberate reasons.
Spin Duration and Rotation Amount
When you click Spin, two independent random values are generated simultaneously, before the animation begins:
- Spin duration is randomly chosen between 3,500ms and 5,000ms. This 1.5-second variance means you cannot time a spin by habit or feel to predict when it will stop. Two spins that look similar in speed may stop at very different positions.
- Total rotation is randomly chosen between 6 and 10 full rotations (2,160° to 3,600°). The extra full rotations on top of the final landing angle prevent the wheel from always stopping after "about seven spins" regardless of where the winning segment is.
These two values are fixed at the exact moment you click Spin. The winner — the final resting position — is mathematically determined right then. The animation that follows simply plays that predetermined outcome forward in time. The wheel always lands exactly where the randomizer decided before the first frame of animation rendered.
The Easing Function
A real spinning wheel does not rotate at constant speed then stop abruptly. It starts near peak speed and decelerates gradually as friction overcomes momentum. NameWheel uses a quartic ease-out function to replicate this physically accurate deceleration:
The exponent 4 creates a deceleration curve where the wheel runs at near-full speed for the first portion of the animation, then decelerates with increasing sharpness toward the end. Compare this to a linear spin (constant speed, stops instantly — looks mechanical), or a quadratic ease (gentler, less realistic deceleration), or a quadratic ease-in-out (equally gentle in both directions). The quartic ease-out matches most closely the physics of a spinning physical wheel decelerating under friction.
The easing function only affects the visual timing of how the wheel moves through animation frames. The final resting angle is predetermined and constant regardless of what easing function is used. The visual impression is simply more convincing and satisfying with a natural-looking deceleration curve.
Winner Detection
The wheel has a fixed pointer at the top (the indicator triangle). The winning segment is whichever slice is positioned under the pointer when the elapsed animation time equals the total spin duration (t = 1.0):
Each of the n names occupies exactly 2π/n radians of the wheel — an equal slice. The normalized final angle, divided by the slice size and floored, gives the winning segment's index. Equal arc sizes mean equal probability: a 10-name wheel gives every name exactly a 36-degree arc and exactly 10% probability per spin. A 20-name wheel gives 18 degrees and 5% each. The math is exact.
Your Data Never Leaves Your Browser
This is not a claim that requires you to trust NameWheel's word. It is a structural fact about how the system is built that you can verify independently.
Static-Only Server
NameWheel's server only delivers files — HTML, CSS, JavaScript, fonts, images. It has no API endpoints, no database, and no software capable of receiving user data.
In-Browser Processing
All name lists, spin results, shuffles, and winner calculations run entirely in your browser's JavaScript engine. Nothing is transmitted to any network during a spin.
URL Fragment Privacy
Saved wheel URLs store data in the fragment — the # portion. Browsers never include fragments in HTTP requests to servers. Your saved lists are literally invisible to our server by design.
Standard web server access logs do record your IP address, the URL you requested (not the fragment), and the timestamp — this is unavoidable for any functioning website and is disclosed in the privacy policy. What is never logged: the names in your wheel, spin results, or any content you enter into the textarea. That content never travels across the network in the first place.
You can verify this yourself: open your browser's developer tools (F12), go to the Network tab, load NameWheel, type some names, and spin. The Network tab will show requests for the HTML, CSS, JavaScript, and font files. It will show zero requests made during or after a spin. Your names never leave the browser.
Performance Architecture: The Offscreen Canvas
A 980×980 pixel canvas with radial gradients, glow effects, 8-segment color fills, peg decorations, and hub rendering is computationally non-trivial to draw. During a spin animation, the browser calls requestAnimationFrame continuously — up to 60 times per second on a 60Hz display, 120 times on a high-refresh display. Rebuilding the full wheel image every frame would cause visible stuttering on anything less than a high-end GPU.
NameWheel solves this with an offscreen canvas architecture:
- An invisible second canvas renders the complete wheel image once when names are loaded or the list changes. This is the "expensive" operation: approximately 15-30ms on a mid-range device. It happens once when needed, not per frame.
- During spin animation, only the rotation transform updates each frame. The cached offscreen image is composited onto the visible canvas with a rotation applied — an O(1) GPU operation instead of a full gradient recalculation.
- A 120ms debounce on the name input means the offscreen canvas only rebuilds after you pause typing, not on every keystroke. This keeps the textarea input responsive even while typing hundreds of names.
- A "dirty" flag tracks whether the name list has changed since the last cache build. If you spin without editing names, the cached image is reused indefinitely with no rebuild cost.
The result: smooth 60fps spin animation on a 2018 budget phone, sub-100ms response to spin clicks, and no input lag while typing long name lists.
Browser Compatibility
NameWheel's core functionality — spinning, randomizing, removing names, eliminate mode, team generation — requires only HTML5 Canvas and the Web Crypto API. Both have been available in all major browsers since 2014-2015. If your browser can run a modern website, it can run NameWheel.
| Feature | Chrome | Firefox | Safari | Edge | iOS Safari | Android Chrome |
|---|---|---|---|---|---|---|
| Core spinning + CSPRNG | 37+ | 34+ | 8+ | 12+ | 8+ | 4.4+ |
| Sound effects (Web Audio) | 35+ | 25+ | 14.1+ | 12+ | Gesture req'd | 35+ |
| Haptic feedback (Vibration) | Yes | Yes | Limited | Yes | Limited | Yes |
| Offline mode (Service Worker) | 45+ | 44+ | 11.1+ | 17+ | 11.3+ | 45+ |
| Install as app (PWA) | Yes | Limited | iOS 16.4+ | Yes | iOS 16.4+ | Yes |
Sound on iOS Safari requires a user gesture before the Web Audio API context can start — this is an Apple browser policy, not a NameWheel limitation. The first spin on a fresh iOS page load may be silent; all subsequent spins in the same session will have full audio.
NameWheel checks prefers-reduced-motion from the browser at load time and adjusts animation behavior for users who have enabled that system accessibility preference.
Accessibility Features
Random pickers should work for everyone, not just people with fast eyes or high-end hardware. NameWheel includes accessibility support built directly into the engine:
📢 ARIA Live Region
An invisible aria-live="assertive" element announces the winner to screen readers the instant the spin completes. Blind and low-vision users hear the result without needing to see or interpret the animation.
📳 Haptic Feedback
On supported mobile devices, NameWheel triggers vibration on the win result and on name eliminations via the Vibration API. Provides tactile confirmation for eyes-free use cases.
⌨️ Keyboard Navigation
All controls are reachable by keyboard. Space or Enter triggers a spin when the spin button is focused. Tab order follows a logical document flow from name input to controls to result.
🎥 Reduced Motion
NameWheel reads prefers-reduced-motion at startup. Users who have motion reduction enabled in their OS accessibility settings get adjusted animation behavior that minimizes vestibular triggers.
Frequently Asked Questions
Yes. NameWheel uses window.crypto.getRandomValues(), which draws entropy from the operating system's hardware entropy pool. This is a CSPRNG — cryptographically secure pseudorandom number generator. Its output is computationally indistinguishable from true randomness. It is not the same as Math.random(), which uses a faster but weaker deterministic algorithm.
No. The winner is determined by a cryptographic random value generated the moment you click Spin. The spin duration and total rotation are both independently randomized, so you cannot time or influence a spin by feel, habit, or external signal. The server delivers only static files and has no ability to influence spin outcomes whatsoever.
Yes, exactly equal. Each name occupies the same arc of the wheel: 360° divided evenly by the number of names. The random final angle is uniformly distributed across the full 360°. Ten names means each has a mathematically exact 10% probability per spin. This holds regardless of where the name appears visually on the wheel.
Never. NameWheel's server is entirely static — it delivers files but has no API and no database. All name processing happens in your browser. If you share a wheel via URL, names are stored in the URL fragment (the # part), which browsers never send to servers by HTTP specification. The server physically cannot see your list.
The deceleration is produced by a quartic ease-out function: 1 - Math.pow(1-t, 4). This creates an animation that mimics the physics of a real spinning wheel decelerating under friction. The final stopping position is determined at the very start of each spin — the easing just controls how the animation plays from start to that predetermined finish. A sudden mechanical stop would look fake because it does not match how real wheels behave.
Spin results are never transmitted to any server and therefore cannot be logged anywhere. Standard web server access logs record IP addresses and requested page URLs, which is the minimum required for any website's infrastructure. The content of your wheels and the outcomes of your spins exist only in your browser's memory for the duration of your session.
Yes. For maximum transparency: load your full entrant list into the wheel so it's visible on screen, enable Remove After Spin mode so each entry can only win once, then screen-record the spin session and publish the recording afterward. Viewers can see the complete entrant list before any spin begins and verify the live result. This level of public transparency satisfies the fairness requirements of most platform giveaway policies.
Yes, after the first visit. A service worker caches all HTML, CSS, JavaScript, and font files on first load. Every subsequent visit — including with no internet connection — serves everything from cache. Spinning, shuffling, and all core functionality works fully offline because all computation runs in-browser. The spin button works on a plane with Wi-Fi turned off.
Technical Reference Summary
Randomness Source
window.crypto.getRandomValues() via the Web Crypto API. Draws from OS entropy pool (hardware timing jitter, interrupts, HRNG where available). CSPRNG. Not Math.random(). Available in all modern browsers since 2014.
Shuffle Algorithm
Fisher-Yates (Knuth) shuffle using secureRandom() for every swap. Produces uniform distribution over all n! permutations. Used in Remove After Spin and Team Generator modes to guarantee no-repeat fairness.
Spin Physics
Duration: 3,500-5,000ms (random per spin). Rotation: 6-10 full turns (random per spin). Easing: quartic ease-out 1-(1-t)^4. Winner determined at spin start from physics, revealed via animation. Offscreen canvas cache enables 60fps on low-end devices.
Privacy Architecture
Static server with no API and no database. All processing in-browser via JavaScript. Names and results never transmitted. URL fragment storage is never sent to servers by browser specification. Zero spin result logging possible by design.
See It in Action
The fairest, most transparent spinning wheel on the internet. Cryptographic randomness, full browser privacy, works offline. Add your names and spin — no account, no download, nothing to install.
Open NameWheel.org