Miransas-Chess
ENGINE

The Engine

What is miransas-chess?

miransas-chess is a UCI-compatible chess engine written from scratch in Rust. It uses hand-written alpha-beta search with all the modern pruning techniques, no external dependencies, and aims to be a clear, hackable codebase for anyone who wants to learn how a chess engine works under the hood.

Architecture

Board representation. 8×8 mailbox (one Option<Piece> per square), with incremental Zobrist hashing and full make/unmake — no board cloning in the search hot path.

Search. Iterative-deepening alpha-beta on a transposition table. Move ordering uses TT move first, MVV-LVA for captures, killer moves, and a history heuristic. Pruning techniques include null move pruning (with adaptive R and zugzwang detection), late move reductions (Stockfish-style log formula), and aspiration windows (exponential widening, depth ≥ 4).

Evaluation. Hand-crafted material plus piece-square tables. Tapered evaluation between middlegame and endgame is on the roadmap. NNUE is planned for FAZ 8.

Move generation. Pseudo-legal generation with post-filtering for legality. True legal generation with pin and check awareness is FAZ 3. Magic bitboards are FAZ 6.

Performance

After FAZ 2, the engine searches roughly 99.36% fewer nodes than the FAZ 1 baseline implementation. On standard test positions:

startpos depth 6

14,791 nodes

kiwipete depth 5

169,474 nodes

endgame depth 8

22,969 nodes

Perft is reference-correct on five standard test positions. Search NPS is approximately 600k–1.2M depending on position; raw perft NPS is 7M–12M.

Charts

Visual breakdown of node counts, throughput, and development progress.

Search Nodes — FAZ 1 vs FAZ 2

−99.36% node reduction

Standard Bench Suite — FAZ 2

Nodes per position

Throughput

Nodes per second

Development Roadmap

FAZ progress

FAZ 1
Brute-force
FAZ 2
Alpha-Beta + pruning
FAZ 3
Legal movegen (planned)
FAZ 6
Magic bitboards (planned)
FAZ 8
NNUE eval (planned)
Completed
Planned

Development process

The codebase is structured around clear FAZ (phase) boundaries. Every change is benchmarked against the previous baseline and recorded in CHANGELOG.md with before/after numbers. Phase progress and the full roadmap are public on GitHub.

Long-term goal

The long-term aim is for miransas-chess to compete meaningfully with modern open-source engines. Concretely: reach a strength where games against engines like Stockfish, Berserk, or Obsidian produce interesting positions instead of immediate losses — and ideally, a strength good enough to play as a Lichess bot at a respectable rating. There is no deadline. The point is the build, not the schedule.