Skip to the contentSpinRondo

How a draw is made

Every spin takes a value from your browser’s cryptographic random source, maps it onto the entries with exact integer arithmetic, and writes the result into a log on your device. This page states the method, the arithmetic behind it, and what the tool does not promise.

Written and maintained by SpinRondo · last reviewed

Which random source does a spin use?

Web Crypto — the browser’s own cryptographically secure generator, reached through crypto.getRandomValues. Never Math.random, which is a seeded pseudo-random generator whose state a script on the same page can approach, and which is specified to offer no unpredictability guarantee at all.

Values arrive in batches of 256 words into a private buffer, because a spin needs nine of them — one for the winner and eight for the draw id — and one platform call per word would be nine calls per press. The buffer belongs to the page you have open; nothing about it is shared, stored or sent.

Why does the wheel throw random numbers away?

Because taking a 32-bit random word modulo the number of segments is not uniform unless the segment count divides 2³² exactly — which it does not for any wheel whose length is not a power of two. The first few segments would each receive one extra word and be favoured by a factor of about one plus n over 2³².

So the draw discards the tail. It takes the largest multiple of the total that fits in the word space, throws away any word at or above it, and draws again. On a six-segment wheel the bias this removes is around one part in a billion — far too small for anybody to notice, which is exactly why a page about fairness has to remove it rather than call it negligible.

How does a weight change the odds?

An entry’s chance is its weight divided by the total of every weight, exactly. The weights are summed as whole numbers, one uniform integer is drawn from zero up to that total, and the segment it falls in is found by walking the running total — no probability is ever held as a decimal, so there is no rounding for a bias to hide in.

The rim is drawn from the same numbers. A segment’s angle is its share of the total, so a segment that looks like a fifth of the wheel is a fifth of the wheel, and the percentage shown beside an entry is the figure the draw actually uses.

Does the animation decide where the wheel stops?

No. The winner is drawn first and the animation is computed backwards from it: the geometry turns the winning index into the angle the wheel has to finish at, and the spin runs to that angle. The picture is a projection of the result and cannot disagree with it.

That order also means the spin duration changes nothing about the outcome. A one-second spin and a sixty-second spin draw the same way; the only difference is how long the room watches.

What is a draw id, and where is the log kept?

Every draw is stamped with an eight-character id taken from the same random source, written in an alphabet without I, L, O or U so it can be read aloud from a projector without being misheard. It is recorded with the entry’s label, the time, the mode, and how many entries were left afterwards.

The log is held by the page you are on, on your device, for the length of the session. It is not uploaded, and it does not survive the tab unless you exported it. That is deliberate: a list of who was drawn in a classroom is exactly the kind of record that should not accumulate on somebody else’s server.

What this page does not promise

Nothing here is certified, audited, or verifiable by a third party. A draw id identifies a line in a log your own browser wrote, which settles a memory but is not evidence anybody outside the room can check; there is no published commitment scheme behind it yet.

So this is a picker for choosing a name in a room, an order for a meeting, a prize at a stand. It is not a source of randomness for a lottery, a regulated prize draw, a security key, or anything where a biased or predictable result would cost somebody else money. The tools that answer for those things are audited, and this one is not.

Where these facts come from

Two claims on this page are about the platform rather than about our own code: what the browser’s random source is specified to do, and what it is specified not to guarantee. Both are checkable at the source. Everything else describes the engine that runs this site.

  • W3C — Web Cryptography APIThe specification that defines crypto.getRandomValues and requires implementations to use a cryptographically secure generator.
  • MDN — Crypto.getRandomValues()The reference most developers check, and the one that states plainly that no minimum entropy is mandated and that this method is not for generating keys.

If something here is wrong

Say so. A defect on this page is a defect in the product’s main claim, so a report about it is read before anything else, and a correction is published with the date it changed. The contact form is the channel, and the reply names what was changed rather than acknowledging receipt.