Chess
Full chess on an 8×8 board: castling, en passant, promotion, check and mate. Move generation is checked against standard perft counts.
2 players
Full chess: castling, en passant, promotion, check, checkmate and stalemate, the fifty-move rule, threefold repetition and insufficient material. Move generation lives in `functions` and uses the board functions (ray, leap, neighbours); the perft counts match the known values.
Draws by repetition and by the fifty-move rule happen automatically (no claim needed). For repetition, the en passant chance counts whenever an enemy pawn stands next to the pawn that just moved two squares (not whether that capture is also legal). No clock, no draw offers, no resigning.
Goal and end of the game
- Win the side to move has no move and is in check
- Draw the side to move has no move and is not in check
- Draw nobody can checkmate any more
- Draw the same position for the third time
- Draw fifty moves by each side without a capture or pawn move
How the game goes
Follow the track from top to bottom. ↻ repeats, a side track is a branch; under every step: what you decide there. Tap a step for what you decide there.
All steps in words
- Match
- The side to move makes a move
Allowed if there is a legal move.
- Choose legal moves
- The side to move makes a move
Under the hood
These rules are read straight from the game's model: the same data the engine plays with. For the exact expressions, the rules diagram and the model source: