Start a game
- Choose Time per move (5, 10, or 30 seconds; default 10) and Joining, then select Create Room. Registered players and guests begin in a waiting room with only the creator, ready by default.
- A second signed-in player can join an eligible registered room. The host can instead choose Add bot or Add local in the host-only actions row below the player list.
- Add bot opens a Difficulty level modal: choose an integer from 0% to 100% (default 50%), then confirm Add bot. Add local opens a modal asking only for Player 2. Enter a 1–24-character name different from the creator's and confirm Add local. Cancel retains the entered value.
- The room stays waiting. Bots show Automatic bot; local players are ready by default. The host can select Remove on either added card to reopen the slot, or Kick for a remote player. A kicked player cannot view or rejoin that room.
- Once both slots are filled and the humans are ready, the host selects Start Game. The server then assigns X and O randomly, and X moves first. In a local game, the creator keeps their own identity and the same session controls both turns. Recreating a completed game opens a new creator-only waiting room.
Bot and local matches do not affect ELO. Registered humans' current ELO stays visible when their display preference allows it. Removing the added opponent restores a registered room's rated eligibility. Guest rooms are unrated and public to view, and cannot be joined remotely even while slot 2 is empty.
On every bot move, Difficulty level is the percentage chance to use Perfect, which selects the best move from a solved graph of board positions. Otherwise, the bot takes an immediate win, blocks an immediate loss, or chooses a random unoccupied cell. At 0% it always uses Win, Block, Random; at 100% it always uses Perfect. Perfect treats unresolved position cycles as draws and ignores live threefold-repetition history.
Every room is public to view. A registered room's Joining setting is Open by default. Host approval lets the host Accept or Decline requests; 4-digit passcode requires the exact code chosen at creation. Only the host sees the passcode. Adding a bot or local player preserves this policy and existing requests or invitations. Acceptance rechecks availability and offers public viewing if the room filled or started first. Removing the added opponent restores the original joining path. Leaving a waiting room with only a bot or local seat remaining deletes it, including through Exit and Join.
Take a turn
Place your symbol in any empty cell. Players alternate turns, and a move cannot be placed on an occupied cell.
You can click an empty cell, or use the arrow keys to select a cell and press Space to place your mark.
The server counts down the selected time for the current move. If time expires, the server selects a random empty cell for that player. The next human receives the full selected time after the automatic move and any immediate bot response.
Your marks are ordered from newest to oldest. When you place a fourth mark, your oldest mark disappears immediately. The glowing mark shows which of your marks will disappear on your next turn.
End the game
You win by keeping three of your marks in one horizontal, vertical, or diagonal line. A win is checked only after any required oldest-mark removal, so a line that is broken by that removal does not win.
A position includes both players' marks in the order they will disappear and the player whose turn is next. The second time the same position appears, a warning says that one more appearance will draw. The third appearance ends the game as a draw.
Ratings and leaving
In a rated online two-player room, a three-in-a-row win or repetition draw updates both players' Infinite XO ELO. A draw gives each player a 0.5 result score. During an active game, either player may choose Resign to remain in the completed room or Resign & Exit to return to the lobby after that same resignation succeeds. The opponent wins, both ratings are updated, the resigning player remains in the completed roster, and the navbar control otherwise changes to Exit. A direct active Exit request is treated as the same resignation. Local matches and matches against the bot are unrated; exiting a local match ends it without a rating change. Leaving a waiting room has no rating effect. The top-left links and closing the page change presence only and let a player return. Spectators may watch but cannot place marks or resign. After a rated result, each player card shows its ELO change in green for an increase, red for a decrease, or neutral white when unchanged.
During a rated game, open ELO changes in the right panel to compare the projected ratings. A player selects Win, Draw, or Loss from their perspective. A spectator instead selects either named player as the winner or Draw. Selecting a scenario changes only the preview; it does not change either rating or the game result. The actual update is calculated when the game completes. Bot and local games do not show this rated-game preview.