- Genre
- Pool / billiards / multiplayer arcade
- Platform
- Any modern web browser (desktop, tablet, phone, foldable)
- Controls
- Drag & release to shoot · W/S power · A/D aim · Shift coarse step · Space fire
- Modes
- Practice · Vs Bot (8-ball) · Run-out time-trial · Daily seeded · Friend match · Quick match (rating-paired) · Race a Ghost · Tournaments
- Multiplayer
- Live 1v1 over WebSocket · public spectators · friend invites · in-match chat with emoji reactions
- Price
- Free
Smart Shots. Clean Game.
TGL Pool is a free browser-based 8-ball game built around two ideas: real spin physics and a Yahoo-Pool-style aim helper that's optional but on by default. The cue ball carries top spin, draw, and side English. The ghost line predicts up to three cushion bounces and shows where the object ball will travel after impact. You can drag with a finger or mouse, fine-tune with WASD, and release to shoot. The accuracy bar's green band shrinks for longer and bouncier shots — close clean pots are forgiving, full-power bank shots demand precision.
How a shot works
Tap or click the cue ball, then drag opposite the direction you want to shoot. Pull distance maps to power. While you drag, the accuracy bar at the bottom of the table sweeps left-and-right; release with the needle in the green zone for a true shot, or accept some direction jitter if you miss the band. The sweep speed scales with how hard you're pulling — soft tap-ins give you a slow, easy-to-time needle, full-power breaks make you commit. The visual zone and the math are 100% identical: what you see is what jitter sees.
The aim helper (the big difference vs other browser pool)
Practice and casual matches both ship with a Yahoo-Pool-style aim helper:
- Cue forward path — white dashed line from the cue ball, terminating at the first ball or cushion it would hit.
- Ghost cue ball — the would-be position of the cue ball at the moment of contact, shown as a dim outline circle. Lets you plan cuts.
- Multi-cushion bounces — up to three reflections off the rails, with pocket-mouth pass-throughs (so you can see when a path goes into a pocket vs bouncing off the rail).
- Target trajectory — yellow dashed line projecting where the struck object ball will travel, scaled by your power and the cut angle, with a stop ring at the predicted rest position.
- Power-scaled distances — every line shrinks to the actual physics travel of your shot. Soft taps show short lines; full-power breaks span the table.
In friend matches the host can flip the helper off so both players play strict. In every other mode the toggle is a per-player drawer setting, default on.
Real billiards physics
TGL Pool runs a fixed-step 240Hz simulation: ball-to-ball collisions with proper impulse transfer, axis-aligned cushions with pocket-mouth gaps, friction-driven deceleration, and side-spin English that curves bank shots. The same code runs on the client and the PHP server — every shot you take is replayable bit-for-bit, and the leaderboard validates submitted runs by re-simulating them. No client can fake a score because the server reproduces the exact end state from the recorded inputs.
Modes
Practice
Open table, no opponent, no win condition. Perfect for learning spin and reading the ghost line. Contextual tips appear as you play.
Vs Bot (8-Ball)
1v1 against a Rookie / Steady / Shark AI. Full 8-ball rules: open table, group claim on first legal pot, fouls, win on the 8.
Run-out
Time-trial. Pot every numbered ball as fast as possible. Lowest duration_ms on the global board wins.
Daily Seeded
Every player worldwide gets the same rack today. 10 shots, leaderboard resets at UTC midnight. Show up daily.
Friend Match
Host or join with an 8-character invite code, or send a DM invite from the friend list. Match chat with emoji reactions.
Quick Match
Rating-paired: server queues you with a player near your Glicko-2 score (±100, widening every 10 s). 60-second timeout fallback.
Race a Ghost
Pick any player's logged run; their shots replay between yours on the same rack. Lowest shot count wins.
Tournaments
Single-elimination brackets. Anyone can host, the bracket auto-seeds with byes, and finishing live matches auto-advance winners.
Multiplayer + spectators
Every multiplayer match runs over a single WebSocket. The server is authoritative for turn order; physics is deterministic on each client (same seed, same physics constants, same rack layout). Public matches show up on the spectate page — anyone can drop in and watch. Hosts can kick spectators mid-match. Match chat is shared with the rest of the site's chat system, so reactions, edits, and history work exactly like main-lobby chat.
Replays + sharing
Every shot you take is logged to the database forever — cue position, aim direction,
power, spin, accuracy-bar phase, end-state hash. The
runs & replays page lets you scrub through any
match shot-by-shot at 0.5×, 1×, 2×, or 4× speed, with deep-link URLs like
/pool/r.php?id=42&shot=7 that open the modal at a specific shot.
An "Export" button records the replay to WebM via canvas-stream; the resulting clip
plays in Discord, Slack, and Twitter previews.
Ratings + tournaments + badges
Multiplayer wins/losses feed a Glicko-2 ladder: rating, RD (rating deviation), and volatility update after every decisive match using the standard Glickman 2012 formulas. The ratings page filters out provisional players (RD > 200) so the top board is always meaningful. Idle players get gradual RD widening; quarterly seasons snapshot final standings, crown a champion, and soft-reset everyone toward 1500. Tournament champions earn a 👑 crown badge, finalists earn 🥈 — visible in profile popovers and on the badge gallery.
Controls in full
- Drag-and-release — touch or click the cue ball, drag opposite the aim direction, release to shoot.
- W / S — power +/- a notch (Shift = coarse 10% step).
- A / D — rotate aim ~0.3° per press (Shift = ~1° step).
- Space — fire the shot at the current accuracy-bar position.
- Arrow keys mirror WASD for accessibility.
- The English (spin) widget in the corner takes a drag for top/bottom/side spin; double-click resets it.
Built for every screen
Mobile portrait, mobile landscape, tablet, fold-phone (Surface Duo + Pixel Fold
unfolded), desktop, and ultrawide. The canvas long-edge is capped so the table
itself stays consistent at any scale; extra screen real estate fills with side
panels — chat, telemetry, leaderboards, friend list. Hinge-aware via
env(viewport-segment-*) so dual-screen folds split table on segment 0
and chat/telemetry on segment 1, never straddling the hinge.
How runs work
Every run starts with a server-issued seed and signed run token. Rack jitter,
accuracy-bar phase, and bot decisions are all derived deterministically from that
seed — the same seed produces the same run. Each shot records the inputs that
produced it; on submit the server replays the entire match and compares an
end_state_hash to the client's claim. Mismatch → marked pending for
review. Sanity caps (max balls potted, max duration, etc.) catch obvious cheats
before they hit the leaderboard.