CoronaPoker

No-Limit Texas Hold’em

Your move.

“In many ways, the poker game we always deserved.”

Windows macOS Linux

The game

Poker night. Your rules.

Set up a private table for 2 to 10 players, with any mix of people and bots. One player hosts the game and the other players connect to that host. Set the blinds, buy-ins and rebuys, then save the setup for next time.

Host-based P2P, no accounts or external game servers

No-Limit Hold’em table with the board, chip stacks and betting controls
In-game screenshotNo-Limit Hold’em

Features

Make it your poker night.

Fine-tune the rules, play with friends and study your sessions. The game interface is available in 30 languages.

Table rules

Set the pace.

Blinds and buy-ins
Set your blind schedule, starting stacks and rebuys. Save the setup as a preset for the next game.
Antes and straddles
Add an ante or let the first player to act post a voluntary straddle before seeing their cards.
Run it twice
On an all-in with several players, the players involved can agree to deal the remaining board twice and split the pots between the two boards.
Side pots and split pots
A player still in the hand can win only the pots they contributed to. If a split leaves an odd cent, it rolls over into the next hand.
Rabbit Hunting and hand rankings
See which community cards would have come next when a hand ends early, or use the hand generator to learn poker rankings.
Poker rules
A completed hand at a large table with pot and showdown results
In-game screenshotShowdown

Play with friends

Keep the table talking.

Chat and voice notes
Send GIFs and emoji in the waiting room or hold a key to record a short voice message in the lobby or at the table.
Join in progress
If the host allows it, a player can join a running table and start playing on the next hand.
Reconnect to your seat
If your connection drops, the game can hold your seat while it tries to reconnect.
Private tables
Host a table for 2 to 10 players and set an optional password. Give each player a face with custom avatars.
Spectator mode
Stay at the table and watch the rest of the session after running out of chips.
Waiting room with chat, game settings and the player list
In-game screenshotWaiting room

Bots

A different read on every seat.

Difficulty and profile
Choose Easy, Normal or Hard for each bot and give it a name, an avatar and a playing style.
NIT
Tight and selective about which hands to play.
STATION
Calls often.
TAG
Selective and aggressive with the hands it plays.
LAG
Plays more hands and puts pressure on opponents.
Explore the bot engine
Bot catalogue with difficulty, playing style and rebuy settings
In-game screenshotBot manager

Stats and history

Revisit the hand.

Hand history
Review the cards, positions, actions and showdown results of recorded hands.
Session analysis
Compare players and sessions, follow your chip balance and explore starting-hand and position heatmaps.
Offline dashboard
Filter by game, player or date, and exclude bot results when you want to focus on human play.
Live log and local history
See actions and pot amounts as the hand plays out. Completed hands are stored locally so you can review them later.
Optional sharing
Exchange completed games directly with other players. Sharing and receiving are both off by default.
See the statistics guide

Chip balance over time

Illustration with sample data

Look and controls

Make the table feel right.

Cards and felt
Choose the deck, card backs, felt and table lighting.
Sound and controls
Adjust game sounds, mute voices or remap the controls you use at the table.
MOD packs
Use a custom pack to replace decks, sounds or all-in animations.
Display and effects
Play in a window or fullscreen. Dim the table for late sessions and choose which animations and effects to show.
Fast decisions
Queue a check if it’s free or a fold if there’s a bet, cap an automatic call, or require confirmation for a fold, raise or all-in.
MOD packs
Appearance options for felt, card backs and table lighting
In-game screenshotTable appearance

Poker videos

Watch at the table.

YouTube and Shorts
Open the poker video player from the main menu, the waiting room or the live table.
Carousel and favorites
Browse regular videos or Shorts and save your favorites from both formats.
A window you can move
Resize the player, set its opacity or minimize it while you play.
See the video player guide
The waiting room with the poker video player open in the lower-right corner
In-game screenshotPoker video player

30 languages

Play in your language.

30 interface languages
Choose your language in the main menu. CoronaPoker remembers it for next time and uses your system language on first launch when supported.
More than the menus
The statistics dashboard, image and GIF gallery, video player messages and PDF viewer controls follow the selected language.
Poker rules in English and Spanish
Open Robert’s Rules of Poker in either language. Both versions are included with the game.
30

Game interface languages

  • Afrikaans
  • Български
  • Català
  • Čeština
  • Dansk
  • Nederlands
  • English
  • Suomi
  • Français
  • Galego
  • Deutsch
  • Ελληνικά
  • Magyar
  • Italiano
  • 日本語
  • Lietuvių
  • Norsk bokmål
  • Polski
  • Português (Brasil)
  • Português (Portugal)
  • Русский
  • Gàidhlig
  • 简体中文
  • Slovenčina
  • Español
  • Svenska
  • தமிழ்
  • Türkçe
  • Українська
  • Tiếng Việt

Mental Poker

Encrypt, shuffle and verify the hand.

When the host prepares the deck alone, they can know every card in advance. CoronaPoker builds on the original idea of Mental Poker. Each human player, including the host, takes a turn encrypting the deck with their own key and then shuffling it. The host alone cannot see anyone else’s private cards or learn the community cards ahead of time. Everyone uses zero-knowledge proofs to check that the deck still contains the original 52 cards without revealing them. At the end, players compare signed receipts to check that they played the same hand.

Mental Poker in CoronaPokerIllustration with three players

Encrypt, then shuffle

All three of you can reconstruct the starting deck. Alice encrypts the 52 cards, shuffles and sends them to Bob. Bob adds his lock, shuffles and returns the deck to Alice. Alice forwards it to you. You add your lock, shuffle and return it to her.

Each player can remove their lock while others are still in place. A card becomes readable when the last one comes off.

After shuffling, each of you changes your lock on the part of the deck that holds the community cards. The cards stay in place. In the animation, a round lock of the same color replaces each square lock. The six private cards keep their original locks.

If Bob folds and leaves, he can leave his community-card key so the others can finish the hand. He keeps his private-card key.

What if the host leaves the deck in its original order?

A secret, random shuffle by even one honest player is enough to hide the final order from the others. Everyone puts on a fresh lock before shuffling. That also changes the encrypted value of each card, so the host cannot follow it by matching the values before and after the turn.

  1. AliceHost
  2. Bob
  3. You
52 face-down cards
  1. Alice starts with the 52 cards in a known order. The demo shows them face down.
  2. Alice sends Bob the 52 cards with her lock on each one.
  3. Bob returns the deck to Alice. She forwards it to you with both locks on each card.
  4. You return the deck to Alice with three locks on each card. The cards stay in place from here. The six private-card slots keep their locks while Alice starts changing the locks on the rest.
  5. Alice’s new lock is in place. Bob’s lock and yours are still the originals.
  6. Alice and Bob have changed their locks. Your original lock is still in place.
  7. The community part of the deck now has one new lock from each of you. The six private-card slots still have their original locks.

Verify the deck

Zero-knowledge proofs let all three of you check each shuffle independently with the locks still on. The shuffle proof catches substitutions, duplicates and inconsistent locks. The diagram shows a duplicate. The examples below also cover changing and removing locks.

Alice keeps the encrypted, shuffled deck she sends to Bob and the one Bob returns after adding his lock and shuffling. She forwards Bob’s deck to you and saves the one you return. Bob and you also send her your proofs.

Once the community locks are in place, Alice verifies the chain and shares the three copies, the lock changes and the proofs. Bob and you check the chain independently. To check Bob’s turn, all three of you use his proof and the decks he received and returned.

Can Alice fake a copy or a proof? Each game reconstructs the starting deck and checks that the proofs link the copies all the way to the deck used for dealing. If Alice changes a copy, the original proofs that use it fail. To make a valid proof for Bob’s actual turn, Alice would need his key and shuffle order. If a proof fails or is missing, the flop stays locked.

Checking Bob’s shuffle with an example

Where do the weights come from?

To check Bob’s proof, each of you uses SHA-512 to fingerprint the two encrypted copies, with the cards in order. From that fingerprint, all three of you derive the same weights, one for each position in the deck Bob received.

Compare the two outcomes
Example with four cards

The letters stand for encrypted cards. D′ is D with Bob’s lock. For each version of the deck, the game multiplies each encrypted card by its weight and adds the results. D contributes 11 × D before the shuffle and 11 × D′ after it.

Alice sends the deck to Bob
  1. AWeight 2
  2. BWeight 5
  3. CWeight 7
  4. DWeight 11
Bob returns the deck to Alice
  1. C′Weight 7
  2. A′Weight 2
  3. D′Weight 11
  4. B′Weight 5
With weight 1111 × D → 11 × D′
Proof passes

D moves from fourth to third and takes weight 11 with it. Bob’s lock multiplies every encrypted value by the same secret number. That number also relates the two sums.

Bob returns the deck to Alice
  1. C′Weight 7
  2. A′Weight 2
  3. C′Weight 11
  4. B′Weight 5
With weight 1111 × D → 11 × C′
Proof rejected

Bob returns two copies of C′ and no D′. There are still four cards, but the proof rejects the substitution because the shuffle and new lock cannot explain it.

The diagram keeps 2, 5, 7 and 11 when you switch options so you can follow weight 11. The game calculates the actual weights from the deck Bob receives and the one he returns.

  • Are the same cards still in the deck?

    Bayer–Groth adapted to SRA

    The proof compares the deck Bob received with the one he returned. Each weight follows its card, and adding the same lock to all cards must explain the change between the two sums. Bob keeps his key and the new order secret.

    Example of cheatingIn the diagram, Bob returns C′ twice and leaves out D′. There are still four cards.

    How CoronaPoker catches itWeight 11 should follow D and multiply D′. Instead, the diagram shows it multiplying another C′. The same new lock on all cards cannot account for that substitution, so the proof fails.

  • Did the community cards stay in place?

    DLEQ batch proof

    When a player changes their lock on the community cards, the game checks all those slots together. It calculates fresh weights from the encrypted cards before and after the change. Each weight stays with its slot in both sums, so one lock change must explain the difference.

    Example of cheatingAlice wants the river card to come out on the flop. While changing her lock, she swaps it with the first flop card.

    How CoronaPoker catches itThe weight for the first flop slot still applies to that slot. After the swap, it multiplies a different card. The lock change cannot explain the new sum, and the flop stays locked.

  • Was the lock removed from the right card?

    DLEQ by Chaum and Pedersen

    Before the deal, Bob shares a public reference to his secret key. Each time he removes a lock, he proves that he used that key on the exact encrypted card he received.

    Example of cheatingBob is asked to remove his lock from the first flop card. He sends back the second card with his lock removed.

    How CoronaPoker catches itThe game starts with the encrypted card assigned to the first slot. Each removal must use the result of the previous step. Bob’s answer fails the proof if it belongs to a different card.

Reveal at the right time

All the cards pass through Alice, the host. She coordinates lock removals and collects the proofs. She sends Bob his two private cards and sends you yours. Each pair arrives with only its owner’s lock, which they open on their own computer.

After preflop betting closes, Alice removes her lock from your copy of the flop and sends it to Bob. He removes his lock and returns the cards to Alice with a proof. Each player keeps their key. Alice sends you the copy with only your lock left.

Bob gets a copy of the same three cards with only his lock left. Both of you open your copy and check the cards against Alice’s signed announcement. The turn is dealt after flop betting closes, and the river after turn betting closes.

At showdown, the players still contesting the pot share their private-card keys in signed messages. Everyone can see those cards, check who won and calculate the payout.

Does Alice gain an advantage by seeing the board first?

You and Bob remove your locks from Alice’s copy. She opens the last lock before sending you both your copies. By then, the previous round’s bets are closed and the signed actions are recorded in the hash chain. Alice can no longer change what she bet. Betting resumes after everyone checks the cards.

Your cardsOnly you can see these
Community cards
FlopVisible to everyone
TurnVisible to everyone
RiverVisible to everyone
  1. Your two cards start face down, with a lock from Alice, Bob and you. The community cards have their own set of locks.
  2. Alice removes her layer of encryption. Your cards are still sealed by Bob’s lock and yours.
  3. Alice sends Bob his two cards and sends you yours. Each pair arrives with only its owner’s lock. Alice opens her own cards locally.
  4. Your computer opens your last lock. Only you can see your two private cards. The flop stays locked while preflop betting is open.
  5. Preflop betting is closed. Bob returns your copy of the flop to Alice. She sends it to you with only your lock left. Bob gets his own copy.
  6. You and Bob open your copies and check the three cards against Alice’s signed announcement. The turn and river stay locked.
  7. Flop betting is closed. Alice sends Bob and you the turn, with only the recipient’s lock on each copy.
  8. You and Bob open the turn and check it against Alice’s signed announcement. The river stays locked.
  9. Turn betting is closed. Alice sends Bob and you the river, with only the recipient’s lock on each copy.
  10. You and Bob open the river and check it against Alice’s signed announcement. All five community cards are now visible.

Compare receipts

Each game calculates a fingerprint from the encrypted deck, the actions in order, the community cards revealed and the pot payout. At the end, Alice’s game, Bob’s game and yours each sign a receipt with their own fingerprint. Alice relays the receipts. Each game checks the signatures and compares the fingerprints with its own.

The table stops if a required receipt is missing, the fingerprints differ or a signature fails during play or on a receipt. CoronaPoker preserves the pot settlement it has already calculated and leaves the hand open for recovery.

Read the receipt specification
Compare the signed receipts
Hand fingerprintIllustrative fingerprints
  • Alice8B7A…29C4 Valid signature
  • Bob8B7A…29C4 Valid signature
  • You8B7A…29C4 Valid signature
Hand verified

All three signatures are valid and the fingerprints match. Each game recorded the same hand and the same pot payout.

Hand fingerprintIllustrative fingerprints
  • Alice8B7A…29C4 Valid signature
  • BobD3E1…74B2 Valid signature
  • You8B7A…29C4 Valid signature
Hand stays open

Suppose Alice tries to give Bob a different version of the hand, like his own “Matrix”. If it reaches the end, Bob can sign a valid receipt for the hand he recorded. His fingerprint differs from the others, so the game leaves the hand open. A relay failure can also cause a mismatch.

Under the hood

CoronaPoker implements its Mental Poker protocol from scratch using published techniques. SRA encryption over Ristretto255 lets each player add and remove their own lock. An adaptation of Bayer–Groth verifies the shuffle. DLEQ proofs check changes to the community-card locks and each lock removal during the deal. A SHA-256 hash chain links the hand history and pot settlement to the fingerprint in each receipt. Receipts are signed with Ed25519.

At hand close, the game signs a receipt on each human participant’s own computer, including the host’s, as long as they are still in the game. If you folded and stayed at the table, your game still signs your receipt. Bots and spectators sit out the receipt exchange.

Read the security specification

Free and open source

Deal yourself in.

Pick your platform. The Windows installer, portable builds and checksums are on GitHub Releases.

Open source since 2020.

Created by tonikelope for poker nights with friends. Read how it works, build it yourself or contribute. The game is licensed under the GNU General Public License version 3.

View on GitHub