Virtual Dice Roller

Roll d4 to d100 dice with modifiers and RPG notation like 3d6+2 — right in your browser.

How to use

  1. Pick the die type (d4 to d100), how many dice to roll and an optional modifier — or simply type the RPG notation, like 3d6+2.
  2. Click "Roll the dice" to see each die individually, the sum and the total with the modifier applied.
  3. Check the history of recent rolls below, and watch for the natural 20 and natural 1 highlights on a single d20.

About this tool

Every tabletop game eventually needs a die that nobody left at home. This roller covers the standard polyhedral set — d4, d6, d8, d10, d12, d20 and d100 — rolls up to ten of them at once, and applies a positive or negative modifier to the total. It shows each die separately, not just the final number, because in most systems the individual values matter: you may need to know which die came up as a 1, or reroll only one of them.

The notation field accepts the shorthand every RPG player already types, such as 3d6+2, d20, 2d10-1 or 4d8. The parser reads the number of dice, the number of sides and the signed modifier, tolerates spaces and uppercase D, and refuses anything that does not describe a real roll. Type a notation and the selectors follow it; change the selectors and the notation field updates — so the two ways of describing a roll never disagree. Sides can go up to 1,000 through the notation, which covers percentile dice and the more exotic ones.

Each die is drawn with crypto.getRandomValues plus rejection sampling, so a d20 gives each of its twenty faces exactly the same chance — something no physical die, with its imperfect balance and rounded corners, can promise. Rolling a single d20 also gets a highlight for the two results that change a scene: a natural 20 (critical hit) and a natural 1 (critical miss). The last ten rolls stay on screen so you can point at what happened, and the whole thing runs in your browser with nothing sent to a server.

The formula

A die with S sides returns 1 + a uniform integer in [0, S). The uniform value comes from crypto.getRandomValues with rejection sampling, which discards values in the uneven tail so no face is favoured. The total is the sum of the individual dice plus the modifier: NdS+M = (d1 + d2 + … + dN) + M.

Frequently asked questions

Is the virtual die fair?

Yes, and more so than a plastic one. Each face has exactly the same probability because the roll uses the browser cryptographic random generator with rejection sampling, while physical dice always carry small manufacturing biases.

What notation does it accept?

The standard RPG shorthand: NdS with an optional modifier, such as 3d6+2, d20, 2d10-1 or 10d4. Spaces and an uppercase D are fine, and the number of dice may be omitted for a single die.

Can I roll dice that are not in the list?

Yes. Type the notation directly — anything from 2 to 1,000 sides works, so d3, d7, d30 and d1000 are all valid even though they are not in the dropdown.

How are critical hits detected?

On a single d20, a natural 20 is flagged as a critical hit and a natural 1 as a critical miss — based on the raw die result, before the modifier is added, which is how most systems define it.

Does anything leave my browser?

No. Rolls are generated and kept locally in JavaScript. Nothing is sent to any server, and the history disappears when you close the page.

Related tools

Long links? Shorten them for free

Vai.la turns any URL into a short link with click statistics, QR Code and your own biolink.

Vai.la is not responsible for how the tools are used or for decisions made based on their results.