Variants (experimental)

python-chess supports several chess variants.

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

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

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

Looks for a variant board class by variant name.


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)


Stockfish and other engines allow you to switch variants by setting the UCI_Variant option.

>>> board = chess.variant.RacingKingsBoard()
>>> engine.setoption({
...     "UCI_Variant": type(board).uci_variant,
...     "UCI_Chess960": board.chess960
... })
>>> engine.position(board)


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

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