Transparency & Technical Docs

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

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.

The technical distinction: A PRNG can theoretically be cracked if you observe enough output values and reverse-engineer the seed. A CSPRNG's output cannot be distinguished from true randomness even with unlimited computing power, because its entropy comes from physical processes outside the software's control.

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:

// Every random number NameWheel generates flows through this function function secureRandom() { const buf = new Uint32Array(1); crypto.getRandomValues(buf); // OS entropy pool fills this return buf[0] / (0xFFFFFFFF + 1); // uniform float in [0, 1) }

Breaking this down step by step:

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.

Practical implication for giveaways: No one watching your stream, no participant in your draw, and not even NameWheel itself can know the outcome of a spin before it completes. The result is unknowable in advance by construction.

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:

// Shuffles an array so every possible ordering is equally likely function secureShuffleInPlace(arr) { for (let i = arr.length - 1; i > 0; i--) { // Pick a uniformly random index from 0 to i inclusive const j = Math.floor(secureRandom() * (i + 1)); // Swap elements at positions i and j [arr[i], arr[j]] = [arr[j], arr[i]]; } return arr; }

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.

Why this matters for multi-winner draws: If you have 200 entrants and plan to award 5 prizes, running a Fisher-Yates shuffle first means every possible combination of 5 winners from 200 people has equal probability. The first prize, second prize, and so on are all drawn from a pre-shuffled deck. No combination is more likely to appear than any other.

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:

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:

// t ranges from 0.0 (spin start) to 1.0 (spin end) // Returns the fraction of total rotation that has been completed function easeOut(t) { return 1 - Math.pow(1 - t, 4); // quartic ease-out }

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):

function getWinner(angle) { // Normalize to [0, 2pi), accounting for the wheel's starting orientation const norm = ((-angle - Math.PI / 2) % (Math.PI * 2) + Math.PI * 2) % (Math.PI * 2); // Which segment index sits under the fixed pointer? return Math.floor(norm / (Math.PI * 2 / n)) % n; }

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.

For sensitive use cases — spinning employee names, student names, medical participants, or personal contacts: your list exists only in your browser's memory for the duration of your session. Close the tab and it is gone permanently. Use private/incognito browsing mode if you want to ensure nothing persists locally. NameWheel has no access to your list at any point and no mechanism to obtain it.

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:

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.

FeatureChromeFirefoxSafariEdgeiOS SafariAndroid Chrome
Core spinning + CSPRNG37+34+8+12+8+4.4+
Sound effects (Web Audio)35+25+14.1+12+Gesture req'd35+
Haptic feedback (Vibration)YesYesLimitedYesLimitedYes
Offline mode (Service Worker)45+44+11.1+17+11.3+45+
Install as app (PWA)YesLimitediOS 16.4+YesiOS 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

Is NameWheel truly random?

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.

Can spins be predicted or manipulated?

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.

Do all names have equal probability?

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.

Are my name lists ever stored on NameWheel's servers?

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.

Why does the wheel slow down gradually rather than stopping suddenly?

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.

What happens to spin results? Are they logged?

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.

Can I use NameWheel for official giveaways or prize draws?

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.

Does NameWheel work offline?

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