If real money is on a baseball game decided by dice, you should know exactly how the dice work, what the game is told, and what you are trusting us for. This page says all of it, including what we cannot prove yet.
In a league game the dice come from a secret number the server picks for that game when it is scheduled, long before anyone sets a lineup for it. The number's fingerprint is published at once, and the number itself is revealed when the game ends, so anyone can replay the game and check every roll. See “Check any game yourself” below. The mock draft and the quick game run on your own device, with your device's random numbers, and are not checked this way.
To play a game, the engine is given only:
It is never told who owns a club, who the commissioner is, what the league's buy-in is, or what the standings are. It has no way to favor anyone, because it doesn't know there is anyone to favor.
On October 2, 2026, we ran the game's own engine and looked for bias toward the home side, the away side, the batter or the pitcher.
| Test | What a perfectly even game shows | What we measured |
|---|---|---|
| The same club on both sides, 20,000 games: how often the home side won | 50%, give or take 0.7 points | 49.78% |
| Who won the dice duel, across about 1.5 million at-bats | 50% each | Batter 49.98% Pitcher 50.02% |
| Two different clubs trading home and away, 10,000 games each way: one club's win rate | The same both ways, give or take 1.4 points | 53.75% at home 53.04% on the road |
Being the home team or the road team makes no difference to who wins. The game has no home-field advantage built in, which is different from real baseball.
These checks show the game doesn't favor a side. They don't prove every card matches history to the decimal, and we will add more tests over time. They measure bias in the dice, not the quality of your roster: in the third test, one club won about 53% of its games overall because its roster was a little stronger, which is exactly what you'd want.
The engine's source code is public on this site: engine.js and dice-engine.js. The server does not keep its own copies. It loads the engine, the dice and the player data from a fixed, public address, and runs each file only if its fingerprint matches the one pinned in the server's code. The game check page does the same check on your device, with rng.js (the dice), sim-core.js and sim-data.json alongside them.
This is live. Every league game, including free tables, gets its own secret number the moment it is scheduled. We publish the number's SHA-256 fingerprint right away. Nobody can see the number until the game is over, and the server cannot change it afterward without the fingerprint no longer matching.
When the game ends we reveal the number. The game check page then runs, on your own device: it confirms the number matches its fingerprint, downloads the five files of the engine from their public, fixed address and confirms each matches the fingerprint our server has pinned, and replays the game from the number using the exact clubs and settings the server was given. If every play and the final score come out identical, the dice were what they should be. Any game page shows its fingerprint, and a finished game has a “Check this game’s dice” link.
We tested it on our own server before saying so: a finished game was replayed independently from the public files and matched all 73 plays and the score.
What a replay does not prove. It cannot show that our server ran exactly the published engine, because you are trusting the server for that. And it cannot rule out that we tried many secret numbers in advance and kept one we liked, though we have no reason to, and a game's lineups and settings are not known when its number is chosen. The check makes the dice fixed before the game and the result a pure outcome of the numbers. It does not make us unable to cheat in every way, and we won't claim it does.
The mock draft, the quick game, and a private league with no buy-in all run the same engine you've just read about. Play until you're comfortable.