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:
14,791 nodes
169,474 nodes
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
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.
