Texas Hold'em · PHP 7.4 – 8.3

A full poker room, dealt in plain PHP.

Nine seats, no database, no Composer, no build step. Game state lives in JSON files on disk, so the whole room runs on any shared host that serves PHP.

Cash tables and a tournament mode: the seated players vote the rules, the blinds climb with scheduled breaks, late registration, limited rebuys and a prize split — and the table returns to its normal blinds when it is over.

The bots play offline with GTO-informed preflop ranges and Monte Carlo equity — and you can optionally hand them a DeepSeek key when you want them sharper.

The deck is shuffled with PHP's own CSPRNG — random_int(), never mt_rand() — one deck per hand, dealt from the server only.

Desktop, tablet and phone · 2–9 seats per table · 15 bundled themes

No MySQL Tournament Mode GTO Bots Optional DeepSeek AI Hand Replay 15 Themes
Poker Online table with nine seats, chips in the middle and the Fold, Call and Raise controls at the bottom
Classic felt · live hand
2–9 seatsOne felt
Live win %All-in equity
2–9Players per table, re-flowed live
15Bundled CSS themes
0Database tables — JSON on disk
PHP 7.4+Tested through 8.3
What is inside

Everything a poker night needs, in one folder.

A complete game engine, creative bots, hand history and a theme system — written in plain PHP with no dependencies to install.

Tournament mode

The table turns into a freezeout: everybody votes the rules, the buy-in comes from the account and the blinds climb on a PokerStars-style ladder, with scheduled breaks, late registration, limited rebuys and a prize split. The felt shows the level, the next blinds and the hand count.

Vote · breaks · late reg · rebuys

Strategic bots with personalities

Preflop GTO-informed ranges, Monte Carlo equity and position-aware aggression — and every bot draws one of four archetypes when it sits down (Rock, TAG, LAG, Station) with a human-like thinking time. They keep playing when you close the laptop.

GTO · 4 styles · offline

Optional DeepSeek AI

A hybrid layer that judges on top of the engine's own equity and pot-odds numbers — validated, leashed and with automatic fallback to the local brain.

Off by default · one key

Hand history & replay

Every hand is recorded. Pick one from the Hands panel and it opens on the finished board, with the winning combination under the cards.

Street by street

All-in run-out

Cards run out with live win percentages, and the hand name is displayed right under the pot — no guessing what you are holding.

Live equity

Accounts & identity

Registration with hashed passwords, avatars, country flags and per-user themes — plus an admin observer with kick and ban, and a tabbed settings editor for every option.

Profiles & flags

Chat with moderation

In-game chat with a configurable banned-word list. Switch the whole channel off with a single option when you want a quiet table.

Configurable filter

Rooms by URL

Turn on a room code in the settings page and index.php#RoomName opens as a separate table with its own chat and hand history. Unknown codes simply land on the default table.

Admin-controlled

Rabbit Hunt

When a hand ends by fold-out, the cards that would have come next fly out of the deck and flip over for about three and a half seconds.

5 / 2 / 1 cards

Adaptive felt

The table geometry re-flows for every seat count from heads-up to nine-handed, on desktop and phone, so blinds, bets and the pot never collide.

2–9 players
Fifteen ways to look at a table

Pick a mood, keep the game.

Themes are auto-discovered from assets/themes/. Signed-in players choose theirs in the Profile dialog; guests can switch from the top bar.

Classic theme table
Classic01
AURUM Noir theme table
AURUM Noir02
Black and White theme table
Black & White03
Blocky World theme table
Blocky World04
Caribbean theme table
Caribbean05
Football theme table
Football06
Galaxy theme table
Galaxy07
Halloween theme table
Halloween08
High Stakes theme table
High Stakes09
Jungle theme table
Jungle10
Neon Vegas theme table
Neon Vegas11
Stitched theme table
Stitched12
Toon Yellow theme table
Toon Yellow13
Vampire theme table
Vampire14
Winter theme table
Winter15

Scroll the strip sideways. Most themes load a display font from Google Fonts — remove the import line at the top of a theme's theme.css for a fully offline install.

Three steps to the felt

From zero to a dealt hand.

Create an account

Pick a username and password — passwords are stored hashed — then add an avatar and a country flag. No email confirmation, no third-party sign-in.

Take a seat

Empty chairs show a Sit chip. The felt re-flows around however many players are in, from heads-up to nine-handed, and keeps everything readable on a phone.

Play your hand

Fold, Call or Raise with a slider and presets — Min, ½ Pot, ¾ Pot, Pot and All-in. Queue a pre-action while the others are thinking, and watch the board run out at all-in.

Self-hosted in minutes

Upload, run setup, delete setup.

No database to create and no dependencies to install. If the host runs PHP, it runs the game.

Upload the contents of Source/

The files go straight into the web root — not into a Source sub-folder. Leave Documentation/ out of the upload.

Open setup.php

Follow the two-step wizard: it writes config.php, verifies permissions and creates the data folders.

Delete setup.php

Use the one-click cleanup on the setup page, then open the game and register the first account.

The setup panel also offers Uninstall everything, which removes all data and config.php. Keep setup.php out of a live site once you are done.
Before you ask

Frequently asked questions.

Do I need MySQL or any other database?

No. Everything is stored as JSON files in the data/ folder, which keeps the install portable and makes backups a simple file copy.

Can I run tournaments, or only cash games?

Both. Any table can become a tournament: the seated players vote the buy-in, the level length, the payout split, the late-registration window, the rebuys and the break schedule, then everybody pays the buy-in from his account and the blinds start climbing. Breaks pause the blind clock, a late player can still join while the window is open, a busted player gets a 30-second rebuy offer and the winner is paid automatically. Details in the Tournament Mode chapter.

Is the shuffle fair — can the cards be predicted?

No. Each hand is shuffled on the server with PHP's cryptographic generator random_int() — seeded by the operating system, the same class of generator Node.js exposes as crypto.randomInt() — inside a Fisher–Yates loop. There is no rand(), mt_rand() or shuffle() anywhere in the code, one fresh deck is used per hand, cards are removed as they are dealt (so duplicates are impossible) and the deck never reaches the browser. A 200,000-shuffle uniformity test returned 0 invalid decks and passed every chi-square check — the functions, the numbers and how to re-run it are in the User Guide.

Can players add bots?

Yes, it is on by default: use the Add bot button at the table. The admin can turn bots off completely (POKER_BOTS_ALLOWED) or keep them for himself (POKER_BOTS_ADD_BY_PLAYERS = false) — both switches live in the Bots tab of the settings page, and the button disappears for players when they are off.

Do the bots play differently from each other?

Yes. Each bot draws one of four archetypes when it sits down — TAG (40%), Rock (25%), LAG (25%) and Station (10%) — on top of the same GTO + Monte-Carlo engine: different preflop ranges, open sizes, the price it will call, c-bet and bluff frequencies, plus a thinking time that follows the style and how close the decision is (never above 4.5 s). Nobody picks the style; turning POKER_BOT_STYLES_ENABLED off makes every bot identical again. Details in the User Guide.

How do I change the blinds and the starting stack?

Table & Rooms tab of the settings page (admin.php?cfg=1): POKER_SB, POKER_BB and POKER_START_CHIPS. They apply to new tables, and a seated player can change the blinds of the table he is on — unless you switch that off (POKER_BLINDS_BY_PLAYERS).

Can I turn the chat off?

Yes — POKER_CHAT_ENABLED in the Game tab; the chat tab and its limits disappear from the table. The moderated word list grows with POKER_BANNED_EXTRA in the same card.

How many players can sit at one table?

Between 2 and 9, set with POKER_SEATS. The felt adapts to whatever number is seated, and you can resize a table while it is running: growing keeps the hand, shrinking only cancels it when a seated player or the blinds would fall on a removed seat (chips are refunded).

Do the themes need an internet connection?

No. Most bundled themes load a display font from Google Fonts, but that is optional: remove the @import line at the top of a theme's theme.css to make it fully offline.

Do I need an API key for the bots?

No. The bots run on the built-in engine with GTO-informed ranges and Monte Carlo equity. A DeepSeek API key is purely optional and off by default.

Ready to take a seat?

The room is one folder and one setup page away. Register an account, pick a chair and deal the first hand.