← home
TGL Pool hero — neon TGL POOL logo with the tagline Smart Shots. Clean Game., a cue ball striking the 8-ball with sparks, surrounded by stripe and solid balls in motion
Play now → Practice mode
8-ball browser pool free HTML5 game spin physics aim helper ghost ball multiplayer pool deterministic replay Glicko-2 ratings tournaments daily challenge no install mobile-friendly
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:

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

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.

Play TGL Pool → All games