#chess #lichess

no-std shakmaty

Chess and chess variant rules and operations

79 releases

Uses new Rust 2024

0.29.0 Jul 5, 2025
0.27.3 Mar 9, 2025
0.27.2 Sep 22, 2024
0.27.1 Jul 11, 2024
0.0.1 Mar 13, 2017

#13 in Game dev

Download history 816/week @ 2025-04-03 801/week @ 2025-04-10 2318/week @ 2025-04-17 1585/week @ 2025-04-24 1870/week @ 2025-05-01 2090/week @ 2025-05-08 917/week @ 2025-05-15 460/week @ 2025-05-22 650/week @ 2025-05-29 453/week @ 2025-06-05 446/week @ 2025-06-12 656/week @ 2025-06-19 1037/week @ 2025-06-26 743/week @ 2025-07-03 713/week @ 2025-07-10 703/week @ 2025-07-17

3,338 downloads per month
Used in 35 crates (30 directly)

GPL-3.0-or-later

620KB
11K SLoC

shakmaty

Chess and chess variant rules and operations

crates.io docs.rs

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. 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).

Dependencies