15 releases

0.1.15 Apr 6, 2024
0.1.14 Apr 4, 2024
0.1.8 Mar 29, 2024

#44 in Value formatting

Download history 375/week @ 2024-03-22 699/week @ 2024-03-29 248/week @ 2024-04-05

1,322 downloads per month

MIT license

365KB
9K SLoC

Rust 7.5K SLoC // 0.0% comments FEN 1K SLoC

♔♕♖♗♘♙ crabchess

crabchess is a 100% Rust Chess API with no unsafe code that enables you to build chess-related software tools. crabchess can import and export PGNs (Portable Game Notation) and FENs (Forsyth-Edwards Notation), determine the status of a game of chess, identify illegal move attempts, determine a game's ECO opening, track players' time remaining, and much more. crabchess works not only with standard chess but also random board configurations like Fischer random chess (Chess960).

Documentation

The full documentation is available at docs.rs.

Example

Most of the core functionality is exposed through the ChessPosition struct, which represents a game of chess. The ChessPosition struct can be mutated and consulted as a game progresses.

use crabchess::prelude::*;

// Create board with default (Staunton) starting position.
let mut position = ChessPosition::new();

// Apply moves in SAN format.
position
    .apply_sans("e4 e6 Nf3 g6 d4 Bg7 e5 Ne7 g4".split(' '))
    .unwrap();

// Or, use the `Move` enum.
position
    .apply_move(Move::Castle {
        side: Side::Kingside,
        color: Color::Black,
        timer_update: None,
    })
    .unwrap();

assert_eq!(
    position.fen(),
    "rnbq1rk1/ppppnpbp/4p1p1/4P3/3P2P1/5N2/PPP2P1P/RNBQKB1R w KQ - 1 6"
);

position
    .apply_move(Move::Standard {
        initial_square: sq!(F3),
        piece_type: Type::Knight,
        piece_color: Color::White,
        final_square: sq!(G5),
        is_capture: false,
        timer_update: None,
    })
    .unwrap();

License

This project is licensed under the MIT License - see the LICENSE file for details.

Dependencies

~4–5MB
~95K SLoC