shakmaty
A Rust library for chess and chess variant rules and operations
shakmaty
A Rust library for chess and chess variant rules and operations
Features
-
Generate legal moves:
use shakmaty::{Chess, Position}; let pos = Chess::default(); let legals = pos.legal_moves(); assert_eq!(legals.len(), 20); -
Play moves:
use shakmaty::{Square, Move, Role}; // 1. e4 let pos = pos.play(&Move::Normal { role: Role::Pawn, from: Square::E2, to: Square::E4, capture: None, promotion: None, })?; -
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.
-
Bitboards and attack generation with compact fixed shift magic attack tables or Hyperbola Quintessence.
-
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). See the COPYING file for the full license text.
more like this
TachiSnap
TachiSnap — Pixel Snapper for animation pixel artists. Rust + WebAssembly client-side tool for cleaning up AI-generated…
bit_gossip
Pathfinding library for calculating all node pairs' shortest paths in an unweighted undirected graph.