Download MagicTree
An MIT-licensed, open-source 64-bit Windows UCI chess engine written in C++ by Vikrant Malvankar. The release build requires AVX2 and BMI2/PEXT.
Complete open-source package with the 64-bit Windows binary, C++17 source code, build script, README, and MIT License.
Download the README separatelyWhat's New in 3.5
Changes in MagicTree 3.5 compared with the previous release, MagicTree 3.4.
Release build & compatibility
- ▸Engine identity is updated to MagicTree 3.5 with a 2900 Elo release label.
- ▸The optimized static PEXT build adds whole-program link-time optimization for 64-bit AVX2/BMI2 processors.
- ▸The public UCI option set remains compatible with MagicTree 3.4.
Evaluation retuning
- ▸Broadly retuned piece activity, mobility, pawn structure, threats, king safety, passed pawns, initiative, tempo, and space.
- ▸Packed middle-game/endgame scores reduce duplicated evaluator arithmetic while preserving independent phase values.
- ▸Expanded evaluation tracing exposes material, pieces, passers, threats, king safety, activity, scaling, and final evaluation.
Exact & specialized endgames
- ▸Added an exact KPK bitbase generated at startup and a material-keyed endgame registry for positions up to seven pieces.
- ▸Added specialized knowledge and scaling for rook, queen, bishop, knight, pawn, fortress, and drawish endings.
- ▸Known mating material now receives directional guidance, including bishop-and-knight mate corner guidance.
Caches & search speed
- ▸Added a 2,048-entry material table and richer pawn-hash data for evaluation and tracing.
- ▸Cached child check state, streamlined check-evasion counting, compacted undo records, and bounded repetition history.
- ▸Expanded profiling and coefficient-tracing support for evaluation tuning and regression testing.
Historical Releases
Download links and release notes for previous MagicTree releases.
An open-source MIT release adding MultiPV analysis, configurable contempt, a redesigned move generator and move picker, and new selective-search speedups.
Download MagicTree 3.4.zipDownload the 3.4 README separately▸What's new in 3.4 vs 3.3
Analysis & UCI
- ▸Added MultiPV support for 1–8 analysis lines and root-relative Contempt from -100 to +100 centipawns.
- ▸Principal variations can be extended from legal transposition-table moves for clearer analysis output.
Move generation & ordering
- ▸Introduced a reusable generation context, separate tactical and quiet generation, and a dedicated pseudo-legal validator.
- ▸Reorganized move picking into specialized modes with lazy SEE, early refutations, recapture bonuses, and stable insertion sorting.
Search & engine internals
- ▸Added conservative capture-only ProbCut and deep-quiescence recapture search.
- ▸Improved Static Exchange Evaluation, transposition-table handling, profiling, and hot-path efficiency.
The first open-source MagicTree release under the MIT License, with source code, a Windows x64 executable, and broad correctness and evaluation improvements.
Download MagicTree 3.3.zipDownload the 3.3 README separately▸What's new in 3.3 vs 3.2
Open source & correctness
- ▸Published the C++17 source under the MIT License alongside the Windows x64 executable.
- ▸Improved repetition, fifty-move, stalemate, singular-search, and legal-move handling.
SEE & evaluation
- ▸Accelerated Static Exchange Evaluation and covered en-passant, promotion, and in-check recapture edge cases.
- ▸Retuned the handcrafted evaluator across material, mobility, pawns, king safety, threats, space, initiative, and tempo.
The final binary-only release before MagicTree became open source, focused on search heuristics, move ordering, correction history, and engine correctness.
Download MagicTree 3.2.zip▸What's new in 3.2 vs 3.1
Search & move ordering
- ▸Deeper Late Move Pruning, more aggressive null-move pruning, and Internal Iterative Reduction.
- ▸Reworked history-aware SEE pruning, granular capture history, and 4-ply continuation history.
Evaluation & engine internals
- ▸Correction history expanded across pawn, non-pawn, and continuation components.
- ▸Added non-pawn Zobrist-key support, transposition-table prefetching, and bishop-colour draw fixes.
A 64-bit Windows UCI chess engine requiring a BMI2/PEXT-capable CPU. Free binary-only release.
Download MagicTree 3.1.zip▸What's new in 3.1 vs 3.0
Identity & UCI layer
- ▸Engine identity updated from MagicTree 3.0 to MagicTree 3.1 in the released executable.
- ▸Added an "eval" diagnostic command reporting the full static evaluation in centipawns from the side-to-move point of view.
- ▸Added an "evaltrace" diagnostic command printing a grouped middle-game / end-game evaluation trace with per-group deltas for symmetry auditing and tuning insight.
Position legality & hashing correctness
- ▸En-passant target squares are now retained only when a legal en-passant capture is actually available.
- ▸FEN loading clears an en-passant square that cannot legally be captured by the side to move.
- ▸Double pawn pushes set the en-passant square only when the opposing side has at least one legal en-passant capture after accounting for king safety.
- ▸This avoids different Zobrist keys for positions that are legally identical apart from a phantom en-passant square.
Pawn-structure evaluation fixes
- ▸Backward-pawn detection was corrected in both the full evaluator and the pawn hash logic.
- ▸A pawn with an occupied push square is no longer treated as backward merely because the square in front is attacked.
- ▸The corrected logic requires the square in front of the pawn to be empty and attacked by an enemy pawn before the backward-pawn penalty applies.
Static-evaluation exactness & correction history
- ▸Lazy evaluation now returns an EvalResult carrying both the score and an exact/inexact flag.
- ▸Inexact lazy-eval cutoffs are no longer stored as reusable exact static evals in the transposition table.
- ▸Pawn correction history is updated only when the raw static evaluation was exact, avoiding pollution from lazy-eval shortcut scores.
- ▸Root, main, and quiescence search share the same helper for probing a TT static eval or obtaining an exact static eval when needed.
Quiescence-search robustness
- ▸Quiescence search now distinguishes total search ply from quiescence ply, keeping qsearch depth limits focused on the quiescence part of the search.
- ▸In-check positions continue searching legal evasions even at the qsearch depth limit, while quiet non-check positions still stop at the configured cap.
- ▸Checkmate detection in qsearch tracks whether a legal evasion was actually searched, avoiding false mate results in edge cases.
- ▸Qsearch capture pruning can reuse the MovePicker’s cached SEE result instead of recomputing SEE for the same capture.
Move ordering & speed
- ▸MovePicker now caches the Static Exchange Evaluation gain for captures, reused for good/bad capture splitting, checking-sac classification, and qsearch capture pruning.
- ▸MovePicker scoring and pick-next routines include optional profiling hooks.
- ▸Large per-node move arrays are no longer value-initialized, reducing avoidable per-node memory work since reads are bounded by explicit move counts.
Dynamic time management
- ▸The soft time limit is now dynamically adjusted during iterative deepening.
- ▸When the best move stays stable across iterations, MagicTree can spend less than the original soft budget and save time for later positions.
- ▸When the best move changes at meaningful depth or the root score drops, the soft budget can extend toward the hard limit.
- ▸Fixed-movetime searches preserve the requested behavior because soft and hard limits are equal in that mode.
Diagnostics & build
- ▸Added prof.h and optional MAGICTREE_PROFILE instrumentation for eval, SEE, move scoring, and move picking (inactive in normal builds).
- ▸Added evaluation trace snapshots at key stages, including pawn hash, pieces, bishop pair, material imbalance, passers, threats, king safety, space, initiative, and final score.
- ▸The 3.1 source uses PEXT/PDEP intrinsics for sliding-attack table generation and lookup; the supplied build is a 64-bit Windows PE console executable.
The first official public release of MagicTree: a 64-bit Windows UCI chess engine with a classical handcrafted evaluation. Free binary-only release requiring a BMI2/PEXT-capable CPU. No NNUE, opening book, or tablebase support is included.
Download MagicTree 3.0.zip▸MagicTree 3.0 feature summary
Board representation & position handling
- ▸64-bit bitboard representation with separate piece bitboards, occupancy bitboards, and a 64-square lookup array.
- ▸FEN loading and export, plus UCI "position startpos" and "position fen" support with trailing move lists.
- ▸Zobrist position key and pawn hash key, with position-key history for repetition detection.
- ▸Fifty-move-rule draw detection and insufficient-material draw handling.
Attack & move generation
- ▸Precomputed knight, king, and pawn attacks with PEXT/BMI2 rook and bishop sliding-attack tables.
- ▸Pseudo-legal and legal move generation that is check-aware, pin-aware, and handles double-check, castling legality, and promotions.
- ▸En-passant generation with legality validation to catch discovered-check cases, plus perft support for move-generator validation.
Search framework
- ▸Iterative deepening negamax alpha-beta with Principal Variation Search and zero-window re-searches.
- ▸Aspiration windows after the first completed depth and mate-distance score handling.
- ▸Search limits by depth, nodes, movetime, clock time, and infinite analysis, with bestmove and PV sanitation before reporting.
Transposition tables, hashing & quiescence
- ▸Main transposition table with 4-entry buckets storing best move, depth, score, static eval, bound type, and age, plus bound-aware cutoffs and hashfull reporting.
- ▸Separate pawn hash table for pawn-structure evaluation and king-shelter caching.
- ▸Quiescence search with stand-pat, capture/promotion search, limited quiet-check search, delta pruning, and SEE-based capture pruning.
Pruning, reductions & extensions
- ▸Null-move pruning (with non-pawn-material guard and verification at higher depths), reverse futility pruning, razoring, and futility pruning.
- ▸Late Move Pruning and Late Move Reductions driven by depth, move count, improving status, PV status, and history/continuation statistics.
- ▸Singular extensions with a double-extension cap and multicut-style handling, plus selective check-evasion extensions.
Move ordering & classical evaluation
- ▸TT move priority, MVV-LVA capture ordering with capture history, SEE good/bad capture splitting, killer and countermove heuristics, and 1-ply/2-ply continuation history.
- ▸Handcrafted tapered centipawn evaluation with material, piece-square tables, mobility, bishop pair, and full pawn-structure terms.
- ▸King safety (shelter, open/semi-open files, pawn storms, king-ring pressure), threat evaluation, space, initiative, endgame scaling, lazy evaluation, and pawn correction history.
Time management & UCI reporting
- ▸Fixed-depth, fixed-node, fixed-movetime, infinite, and clock-based search with move overhead, minimum thinking time, and a Slow Mover option.
- ▸Increment-aware allocation with separate soft and hard time budgets and extra time when the best move changes or the root score drops.
- ▸Reports depth, seldepth, multipv 1, score (including UCI mate format), nodes, time, nps, hashfull, and a single principal variation.
