Tools100% Local
← All tools

Coin Flip

crypto.getRandomValues · 50/50 · in-browser

A real coin flip with a real 3D animation. Each outcome is decided by crypto.getRandomValues — the browser’s cryptographically secure RNG — before the coin is tossed, so the toss is purely cosmetic and the result is provably 50 / 50. Tap the button, change the labels, or batch—flip a thousand at once.
HEADS
TAILS
Labels
Per flip
Speed
Total
0
Heads
0
Tails
0
Longest run
0
Session history (0 · most recent first)
No flips yet — give it a go.

Why the result is fair

A coin’s outcome here is one bit drawn from crypto.getRandomValues: the page reads a fresh 32-bit unsigned integer and treats its low bit as “heads” (0) or “tails” (1). On every modern browser that integer is sourced from the operating system’s cryptographic entropy pool — the same one used to generate TLS session keys. Because each bit is independent and uniformly distributed, every flip is a true 50 / 50 with no memory of prior results.

The animation is cosmetic

The heads/tails decision is made before the coin starts spinning — the rotation amount and final orientation are picked so the coin lands with the predetermined face up. So the animation is fun to watch but cannot affect the outcome, and the outcome cannot be biased by any interaction with the toss (no clever button-mashing exploit).

Batch mode and the law of large numbers

Click ×100 or ×1000 and a whole batch is flipped at once. The page animates a single representative coin (showing the last result) and renders the rest as small chips below. Aggregate statistics (total, heads %, longest run) update across your whole session, so you can watch the heads share converge on 50% as N grows, and see the occasional improbable streak — runs of 10+ same-side flips do happen and are not a bug.

Customizing the labels

The two text fields control what appears on the heads and tails faces. Use them for binary decisions where “heads/tails” isn’t the right framing — Yes / No, Stay / Go, Burrito / Pizza. Long labels auto-shrink to fit the face. The statistics panel relabels itself to match.

Privacy

No flip is ever sent off the page. The history and statistics live only in this tab’s memory and disappear when you close it (there is no localStorage persistence here). The page makes no network requests after the initial static load, and there are no analytics scripts.