Casual poker, redesigned — clean single-player Texas Hold'em. Play money, no account needed, no fake felt.
See the code
Real single-player Texas Hold'em against AI. No account needed, no real money,
open source down to the shuffle.
▶ Play at playpip.io · no signup, nothing to install
Free poker apps tend to look and feel like a scam: neon, leather textures, coin jingles, and more time spent closing offers than playing cards. Pip is the opposite — a flat, calm, black-first table where the poker is the whole product. Single-player, play money only, no pop-ups, no fake felt.
Play money only: balances are chips, never a currency. Chips cannot be bought and cannot be cashed out, and the Chip Shop only ever takes chips you won at the table.
Pip is free to play and the core game is free forever — the whole ladder, the Rail's cash games, the Daily, the Chip Shop, the freeroll, two drills, Level 1 of the lessons, every written guide, the odds calculator, and the read on every hand you play. None of it is ever metered.
There is also an optional membership (£5.99/mo or £49/yr) that adds more to play: every side table and member room, the games that aren't Hold'em, build-your-own-table, the rest of the drills and practice packs, Lessons with Webb from Level 2, a report on your own play across every hand, the session review, and spectating after you bust. It's a real fence and we'd rather call it one than pretend otherwise. It is not pay-to-win — pay-to-win means buying an advantage over another player, and Pip is single-player with no leaderboard. Nothing you can buy changes a hand: not the cards, the odds, what you're shown, or a rebuy. See ROADMAP → How Pip pays for itself.
Checkout, billing and cancelling run through Stripe — see docs/stripe.md. Cancel any time from Settings → Membership.
pnpm install
pnpm dev # → http://localhost:3000
| Command | What it does |
|---|---|
pnpm dev | Dev server at localhost:3000 |
pnpm test | AVA suite (engine + game logic) |
pnpm test:all | The full gate: format, types, lint (Biome), AVA, knip, audit |
pnpm format | Biome — format + safe fixes |
pnpm build | Production build |
A change is done when pnpm test:all passes (and build for structural
work). The UI isn't unit-tested — verify it by running the app.
Three layers with hard boundaries (Next.js App Router, React 19, Tailwind v4, Zustand, Framer Motion):
src/lib/poker/. Pure, deterministic, React-free
Texas Hold'em: dealing, betting, side pots, hand evaluation, Monte-Carlo equity,
and the AI policy. Every rule lives here, and ships with tests.src/store/. game.ts runs the tournament over
time (turn pacing, AI timers, blind escalation, hand history, the economy);
profile.ts is the persisted player (versioned, with migrations).src/components/, src/app/.
Reads the stores; look & feel only.Full documentation lives in docs/:
| Doc | What's in it |
|---|---|
| architecture.md | Stack, layout, data flow, design decisions |
| poker-engine.md | The pure engine: rules, evaluation, equity, AI |
| game-flow.md | The tournament loop, economy, ranks, the freeroll, the Daily Deal |
| cast.md | The cast — Pip's troupe of opponents, career reads, table talk |
| venues.md | The venue ladder and venue art |
| awards.md | Collectible "special chips" — the set, triggers, visuals |
| shop.md | The Chip Shop & earned unlocks — style, never edge |
| membership.md | What is paid, what is free, and the rules that keep it honest |
| design.md | Theme tokens, typography, motion, sound |
| brand.md | The name, the voice (including the dry line), the anti-casino principles |
| development.md | Setup, testing, conventions, gotchas |
Agents working in this repo should start with CLAUDE.md /
AGENTS.md.
Each one is about a file in this repo, and links it:
pages.dev alias serves your whole site on a second host. Ours did,
for five weeks, with a correct canonical tag on every page./game out instructed nobody: Google indexed it anyway, wearing the home
page's title.src/lib/poker/handEval.ts has to absorb, each with the input that
produces it.No account needed, no cookies, no personal data. Your profile lives in your browser. Nothing leaves your device unless you ask it to: there's an optional account purely for carrying your progress to another device, it's off unless you turn it on, and it stores your email and that same profile and nothing else.
The only thing Pip records is anonymous, cookieless usage counts (via Umami) — no fingerprinting, no ad tech, nothing tied to you. The privacy page lists exactly what's counted and for how long. Because the whole app is open source, you can verify all of this in the code.
Contributions are welcome — and not only code. Playtesting and bug reports, design and
UX feedback, docs, and spreading the word all count. Start with
CONTRIBUTING.md, see what's next in ROADMAP.md, or pick
up a good first issue.
Pip is built by playpip, open source, and under
active development. It's a front-end app: everything runs in the browser and persists
locally, with one optional account for cross-device sync and no server in the game itself. The engine is deterministic
and fully unit-tested, so anyone can read exactly how a hand is dealt and shuffled —
provably fair by inspection, not by promise. The product docs in docs/
are the source of truth for everything from the brand to the
economy.
Openness is a deliberate foundation: now that Pip has things you can pay for — extra
rooms, formats and tools, never pay-to-win — and multiplayer on the roadmap, a
public codebase is what keeps the anti-scam promise honest. It does real work here:
anyone who suspects a member room deals differently can read
config/venues.ts and the engine beside it and find that it
does not. Contributions welcome.
Play money only, forever. Chips are never a currency: they cannot be bought, they cannot be cashed out, and the only shop takes chips you won at the table. The optional membership buys access to more of the game and never a chip, a card, or an edge in a hand.
Keywords: poker · texas hold'em · sit-and-go · tournament · play money · single player · card game · next.js · react · typescript
Casual poker, redesigned — clean single-player Texas Hold'em. Play money, no account needed, no fake felt.
See the code
Real single-player Texas Hold'em against AI. No account needed, no real money,
open source down to the shuffle.
▶ Play at playpip.io · no signup, nothing to install
Free poker apps tend to look and feel like a scam: neon, leather textures, coin jingles, and more time spent closing offers than playing cards. Pip is the opposite — a flat, calm, black-first table where the poker is the whole product. Single-player, play money only, no pop-ups, no fake felt.
Play money only: balances are chips, never a currency. Chips cannot be bought and cannot be cashed out, and the Chip Shop only ever takes chips you won at the table.
Pip is free to play and the core game is free forever — the whole ladder, the Rail's cash games, the Daily, the Chip Shop, the freeroll, two drills, Level 1 of the lessons, every written guide, the odds calculator, and the read on every hand you play. None of it is ever metered.
There is also an optional membership (£5.99/mo or £49/yr) that adds more to play: every side table and member room, the games that aren't Hold'em, build-your-own-table, the rest of the drills and practice packs, Lessons with Webb from Level 2, a report on your own play across every hand, the session review, and spectating after you bust. It's a real fence and we'd rather call it one than pretend otherwise. It is not pay-to-win — pay-to-win means buying an advantage over another player, and Pip is single-player with no leaderboard. Nothing you can buy changes a hand: not the cards, the odds, what you're shown, or a rebuy. See ROADMAP → How Pip pays for itself.
Checkout, billing and cancelling run through Stripe — see docs/stripe.md. Cancel any time from Settings → Membership.
pnpm install
pnpm dev # → http://localhost:3000
| Command | What it does |
|---|---|
pnpm dev | Dev server at localhost:3000 |
pnpm test | AVA suite (engine + game logic) |
pnpm test:all | The full gate: format, types, lint (Biome), AVA, knip, audit |
pnpm format | Biome — format + safe fixes |
pnpm build | Production build |
A change is done when pnpm test:all passes (and build for structural
work). The UI isn't unit-tested — verify it by running the app.
Three layers with hard boundaries (Next.js App Router, React 19, Tailwind v4, Zustand, Framer Motion):
src/lib/poker/. Pure, deterministic, React-free
Texas Hold'em: dealing, betting, side pots, hand evaluation, Monte-Carlo equity,
and the AI policy. Every rule lives here, and ships with tests.src/store/. game.ts runs the tournament over
time (turn pacing, AI timers, blind escalation, hand history, the economy);
profile.ts is the persisted player (versioned, with migrations).src/components/, src/app/.
Reads the stores; look & feel only.Full documentation lives in docs/:
| Doc | What's in it |
|---|---|
| architecture.md | Stack, layout, data flow, design decisions |
| poker-engine.md | The pure engine: rules, evaluation, equity, AI |
| game-flow.md | The tournament loop, economy, ranks, the freeroll, the Daily Deal |
| cast.md | The cast — Pip's troupe of opponents, career reads, table talk |
| venues.md | The venue ladder and venue art |
| awards.md | Collectible "special chips" — the set, triggers, visuals |
| shop.md | The Chip Shop & earned unlocks — style, never edge |
| membership.md | What is paid, what is free, and the rules that keep it honest |
| design.md | Theme tokens, typography, motion, sound |
| brand.md | The name, the voice (including the dry line), the anti-casino principles |
| development.md | Setup, testing, conventions, gotchas |
Agents working in this repo should start with CLAUDE.md /
AGENTS.md.
Each one is about a file in this repo, and links it:
pages.dev alias serves your whole site on a second host. Ours did,
for five weeks, with a correct canonical tag on every page./game out instructed nobody: Google indexed it anyway, wearing the home
page's title.src/lib/poker/handEval.ts has to absorb, each with the input that
produces it.No account needed, no cookies, no personal data. Your profile lives in your browser. Nothing leaves your device unless you ask it to: there's an optional account purely for carrying your progress to another device, it's off unless you turn it on, and it stores your email and that same profile and nothing else.
The only thing Pip records is anonymous, cookieless usage counts (via Umami) — no fingerprinting, no ad tech, nothing tied to you. The privacy page lists exactly what's counted and for how long. Because the whole app is open source, you can verify all of this in the code.
Contributions are welcome — and not only code. Playtesting and bug reports, design and
UX feedback, docs, and spreading the word all count. Start with
CONTRIBUTING.md, see what's next in ROADMAP.md, or pick
up a good first issue.
Pip is built by playpip, open source, and under
active development. It's a front-end app: everything runs in the browser and persists
locally, with one optional account for cross-device sync and no server in the game itself. The engine is deterministic
and fully unit-tested, so anyone can read exactly how a hand is dealt and shuffled —
provably fair by inspection, not by promise. The product docs in docs/
are the source of truth for everything from the brand to the
economy.
Openness is a deliberate foundation: now that Pip has things you can pay for — extra
rooms, formats and tools, never pay-to-win — and multiplayer on the roadmap, a
public codebase is what keeps the anti-scam promise honest. It does real work here:
anyone who suspects a member room deals differently can read
config/venues.ts and the engine beside it and find that it
does not. Contributions welcome.
Play money only, forever. Chips are never a currency: they cannot be bought, they cannot be cashed out, and the only shop takes chips you won at the table. The optional membership buys access to more of the game and never a chip, a card, or an edge in a hand.
Keywords: poker · texas hold'em · sit-and-go · tournament · play money · single player · card game · next.js · react · typescript