Expand description

Yet another Rust chess library

🦉🦉🦉

Owlchess is a chess library written in Rust, with emphasis on both speed and safety. Primarily designed for various chess GUIs and tools, it’s also possible to use Owlchess to build a fast chess engine.

The code is mostly derived from my chess engine SoFCheck, but rewritten in Rust with regard to safety.

This crate supports core chess functionality:

  • generate moves
  • make moves
  • calculate game outcome
  • parse and format boards in FEN
  • parse and format moves in UCI and SAN

Example

use owlchess::{Board, movegen::legal, Move};
use owlchess::{Coord, File, Rank};

// Create a board with initial position
let b = Board::initial();

// Generate all the legal moves
let moves = legal::gen_all(&b);
assert_eq!(moves.len(), 20);

// Parse move "e2e4" from UCI string
let mv = Move::from_uci("e2e4", &b).unwrap();
let e2 = Coord::from_parts(File::E, Rank::R2);
let e4 = Coord::from_parts(File::E, Rank::R4);
assert_eq!(mv.src(), e2);
assert_eq!(mv.dst(), e4);

// Create a new board with made move `mv`
let b = b.make_move(mv).unwrap();
assert_eq!(b.as_fen(), "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1");

Re-exports

pub use board::Board;
pub use board::RawBoard;
pub use chain::MoveChain;
pub use movegen::MoveList;
pub use movegen::MovePush;
pub use moves::Make;

Modules

Bitboard-related stuff

Board and related things

Board that remembers previous moves

Move generation and related things

Moves and related stuff

Core chess types

Structs

Bitmask on chess board

Flags specifying allowed castling sides for both white and black

Contents of square on a chess board

Coordinate of a square

Chess move

Enums

Castling side (either queenside or kingside)

Color of chess pieces (either white or black)

Reason for game finish with draw

File (i. e. a vertical line) on a chess board

Short status of the game (either running of finished)

Move kind

Outcome of the finished game

Kind of chess pieces (without regard to piece color)

Rank (i. e. a horizontal line) on a chess board

Reason for game finish with win