UCI compatible
Speaks the standard UCI protocol — plug it into any GUI or GUI-compatible tool. Supports position setup from FEN or move lists, depth and time controls, and ponder.
chess is a UCI-compatible engine with negamax alpha-beta search, incremental NNUE evaluation, and a transposition table — plus an MCP server so AI assistants can play and analyze games. One Rust binary, no runtime dependencies.
$ chess uci
id name chess
uciok
position startpos moves e2e4 e7e5
go depth 3
bestmove g1f3
A complete engine in a single binary — search, evaluation, and interfaces, all local and deterministic.
Speaks the standard UCI protocol — plug it into any GUI or GUI-compatible tool. Supports position setup from FEN or move lists, depth and time controls, and ponder.
Negamax with alpha-beta pruning and a transposition table — iterative deepening over a fully legal move generator.
Neural network evaluation with an incrementally updated accumulator — refreshed only for the pieces that moved, not the whole board.
Built-in Model Context Protocol server over stdio JSON-RPC — tools for new games, board state, legal moves, and best-move queries for AI agents.
chess play for interactive games, chess moves and chess board for position inspection, chess bench for perft benchmarks, chess fen for FEN export.
No runtime dependencies, no daemon, no account. A single static binary that searches millions of nodes per second.
Drive the engine over UCI, inspect positions from the shell, or benchmark move generation with perft.
$ chess uci
uci
id name chess
id author Kilo
uciok
position startpos moves e2e4 e7e5
go depth 3
bestmove g1f3
$ chess board
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
$ chess moves | head -4
b1c3
b1a3
g1h3
g1f3
$ chess bench
depth 1: 20 nodes (1506.25 ns/node) OK (expected 20)
depth 2: 400 nodes (200.52 ns/node) OK (expected 400)
depth 3: 8902 nodes (129.37 ns/node) OK (expected 8902)
depth 4: 197281 nodes (181.92 ns/node) OK (expected 197281)
depth 5: 4865609 nodes (111.67 ns/node) OK (expected 4865609)
total: 5072212 nodes in 0.58s = 8737744 nps
Generate, evaluate, search — a tight loop over a fully legal move generator, with NNUE doing the positional heavy lifting.
chess-core produces every pseudo-legal move — including castling, en passant, and promotions — then filters out any move that leaves its own king in check.
chess moves
chess-core's NNUE network scores positions through an incrementally maintained accumulator — only changed feature weights are refreshed per move.
nnue_weights.bin
chess-engine runs negamax with alpha-beta pruning and a transposition table, returning the best move over UCI or the interactive CLI.
chess uci → bestmove g1f3
Install a prebuilt binary or build from source with Cargo. Rust stable is the only requirement — no runtime dependencies.
$ ./scripts/install.sh
chess installed to ~/.local/bin/chess
$ chess uci
id name chess
uciok
$ chess bench
total: 5072212 nodes in 0.58s = 8737744 nps
Or build from your checkout:
./scripts/install-local.sh — see the
README
for details.