niklasf/shakmaty

A Rust library for chess and chess variant rules and operations

Rust

309

2,898 commits

updated Sep 8, 2026

See the code

README

shakmaty

A Rust library for 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.

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

perft45
shakmaty 0.16.01.0 ms24.1 ms
jordanbray/chess 3.1.10.8 ms18.6 ms
Stockfish 8 (x86-64-bmi2)4 ms33 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.

chess
lichess
rust

Contributors

niklasf

2,762 commits

tigerros

31 commits

kraktus

25 commits

BastiDood

21 commits

niklasf/shakmaty

A Rust library for chess and chess variant rules and operations

Rust

309

2,898 commits

updated Sep 8, 2026

See the code

README

shakmaty

A Rust library for 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.

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

perft45
shakmaty 0.16.01.0 ms24.1 ms
jordanbray/chess 3.1.10.8 ms18.6 ms
Stockfish 8 (x86-64-bmi2)4 ms33 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.

chess
lichess
rust

Contributors

niklasf

2,762 commits

tigerros

31 commits

kraktus

25 commits

BastiDood

21 commits

Languages

Rust

99.6%