BGS Docs

Game clocks & timing

Timing on BGS is platform-side: the game-server tracks each player's clock and enforces deadlines, while the engine never sees the clock. This page describes the model — what creators configure, how clocks move, and what it means for engine authors.

What the creator configures

At game creation, the host picks two values, stored on the game as options.timing:

Two optional modifiers:

Shorter timePerGame/timePerMove values make a "live" game; the usual settings make asynchronous games that play out over days.

How clocks move

The game-server maintains, per current player, a timerStart timestamp and a deadline (computed from the player's remainingTime, skipping the paused hours when a timer window is set).

When a player stops being the current player (they moved, or the turn passed), the game-server:

  1. subtracts the elapsed time since timerStart from their remainingTime;
  2. adds timePerMove back (not for dropped players);
  3. clamps the result between timePerMove and timePerGame — you can never bank more than your initial clock, and never drop below one move's worth.

When timePerMove is short (15 minutes or less — live games), the refund is instead applied eagerly right after the move is saved, so the displayed clock refreshes immediately even if the player stays the current player.

Games can have several current players at once (e.g. 6nimmt!, where everyone picks a card simultaneously) — each current player has their own timerStart/deadline, and each clock only runs while that player is current.

Timeouts, drops, and inactivity

The platform does not auto-drop a player the instant their deadline passes. Instead:

So the deadline is social enforcement plus a safety net — not a hard engine event.

What this means for engine authors