Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
77 lines (58 sloc) 2.63 KB


python-chess supports several chess variants.

>>> import chess.variant
>>> board = chess.variant.GiveawayBoard()
>>> # General information about the variants
>>> type(board).uci_variant
>>> type(board).xboard_variant
>>> type(board).starting_fen
'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w - - 0 1'

See :func:`chess.Board.is_variant_end()`, :func:`~chess.Board.is_variant_win()` :func:`~chess.Board.is_variant_draw()` :func:`~chess.Board.is_variant_loss()` for special variant end conditions and results.

Variant Board class UCI/XBoard Syzygy
Standard :class:`chess.Board` chess/normal .rtbw, .rtbz
Suicide :class:`chess.variant.SuicideBoard` suicide .stbw, .stbz
Giveaway :class:`chess.variant.GiveawayBoard` giveaway .gtbw, .gtbz
Atomic :class:`chess.variant.AtomicBoard` atomic .atbw, .atbz
King of the Hill :class:`chess.variant.KingOfTheHillBoard` kingofthehill  
Racing Kings :class:`chess.variant.RacingKingsBoard` racingkings  
Horde :class:`chess.variant.HordeBoard` horde  
Three-check :class:`chess.variant.ThreeCheckBoard` 3check  
Crazyhouse :class:`chess.variant.CrazyhouseBoard` crazyhouse  
.. autofunction:: chess.variant.find_variant


Chess960 is orthogonal to all other variants.

>>> chess.Board(chess960=True)
Board('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1', chess960=True)

See :func:`chess.BaseBoard.set_chess960_pos()`, :func:`~chess.BaseBoard.chess960_pos()`, and :func:`~chess.BaseBoard.from_chess960_pos()` for dealing with Chess960 starting positions.


Multi-Variant Stockfish and other engines have an UCI_Variant option. XBoard engines may declare support for variants. This is automatically managed.

>>> import chess.engine
>>> engine = chess.engine.SimpleEngine.popen_uci("stockfish-mv")
>>> board = chess.variant.RacingKingsBoard()
>>> result =, chess.engine.Limit(time=1.0))


Syzygy tablebases are available for suicide, giveaway and atomic chess.

>>> import chess.syzygy
>>> import chess.variant
>>> tables = chess.syzygy.open_tablebase("data/syzygy", VariantBoard=chess.variant.AtomicBoard)