shakmaty
Chess and chess variant rules and operations
Features
-
Generate legal moves:
use ; let pos = default; let legals = pos.legal_moves; assert_eq!; -
Play moves:
use ; // 1. e4 let pos = pos.play?; -
Detect game end conditions:
pos.is_checkmate(),pos.is_stalemate(),pos.is_insufficient_material(),pos.outcome(). -
Read and write FEN, SAN and UCI notation.
-
Supports all Lichess variants: Standard chess, Chess960, Antichess, Atomic, King of the Hill, Three-Check, Crazyhouse, Racing Kings and Horde. Provides vocabulary to implement other variants.
-
Bitboards and compact fixed shift magic attack tables.
-
Fast compact binary encodings for positions and moves.
-
Zobrist hash positions.
-
Probe Syzygy tablebases with shakmaty-syzygy.
-
Parse PGN files with pgn-reader (experimental).
Documentation
Performance
Expect move generation performance in the ballpark of the world's best chess engines.
Simple perft speed can give a rough indication, but only that -- for example, Stockfish maintains additional data structures for evaluation (and newer Stockfish versions put even less emphasis on perft speed).
Here is a snapshot at a point in time. No hashtables. i7-6850K CPU @ 3.60GHz.
| perft | 4 | 5 |
|---|---|---|
| shakmaty 0.16.0 | 1.0 ms | 24.1 ms |
| jordanbray/chess 3.1.1 | 0.8 ms | 18.6 ms |
| Stockfish 8 (x86-64-bmi2) | 4 ms | 33 ms |
License
shakmaty is licensed under the GPL-3.0 (or any later version at your option).