Every roll and coin flip pulls its randomness from crypto.getRandomValues(), the browser's cryptographically secure random number source, then reduces that number to the die's range with a modulo operation before adding 1.
FAQ
Why use crypto.getRandomValues() instead of Math.random()?
It draws from the browser's cryptographically secure random number generator rather than a faster but statistically weaker pseudo-random algorithm — overkill for a casual dice roll, but it guarantees uniform, unbiased results.
Does the math used to turn a random number into a die result introduce any bias?
A theoretical, vanishingly small one — taking a 32-bit random number modulo a small die size can favor the lowest numbers by an infinitesimal amount, far too small to matter for any die size offered here.
Free, unlimited, no account. If this saved you a paid tool, a small thanks is appreciated.