Released Rudim 2.0.0 & 2.1.0 in the last 2 weeks
2.0.0 rewrote the entire engine in rust -> https://github.com/znxftw/rudim/releases/tag/v2.0.0
2.1.0 implemented LMR and improved on performance -> https://github.com/znxftw/rudim/releases/tag/v2.1.0
New engine releases & news H1 2026
Moderator: Ras
-
znx
- Posts: 5
- Joined: Mon Dec 09, 2024 5:51 am
- Full name: Vishnu Bhagyanath
-
ranzuh
- Posts: 4
- Joined: Wed Feb 02, 2022 10:23 pm
- Full name: Eetu Rantala
Re: New engine releases & news H1 2026
Ratsu 2.0.0 released!
This release elevates Ratsu to the next level by introducing an NNUE (Efficiently Updatable Neural Network) to replace the hand-crafted evaluation. +331 Elo over Ratsu 1.2.0 in self-play. Estimated CCRL blitz Elo 2643 +/- 40.
More details and binaries found here:
https://github.com/ranzuh/ratsu/releases/tag/v2.0.0
- Eetu
This release elevates Ratsu to the next level by introducing an NNUE (Efficiently Updatable Neural Network) to replace the hand-crafted evaluation. +331 Elo over Ratsu 1.2.0 in self-play. Estimated CCRL blitz Elo 2643 +/- 40.
More details and binaries found here:
https://github.com/ranzuh/ratsu/releases/tag/v2.0.0
- Eetu
-
znx
- Posts: 5
- Joined: Mon Dec 09, 2024 5:51 am
- Full name: Vishnu Bhagyanath
Re: New engine releases & news H1 2026
Few updates to Rudim in the past few weeks :
Rudim v2.1.1 - Optimizations & Hash Move (https://github.com/znxftw/rudim/releases/tag/v2.1.1)
Rudim v2.1.2 - RFP, PV Tables & Scoring, Dynamic LMR (https://github.com/znxftw/rudim/releases/tag/v2.1.2)
Rudim v2.1.3 - Aspiration Windows, Mobility, 2 Tier TT (https://github.com/znxftw/rudim/releases/tag/v2.1.3)
Rudim v2.2.0 - Phased MoveGen, Precomputed Lookups (https://github.com/znxftw/rudim/releases/tag/v2.2.0)
Rudim v2.1.1 - Optimizations & Hash Move (https://github.com/znxftw/rudim/releases/tag/v2.1.1)
Rudim v2.1.2 - RFP, PV Tables & Scoring, Dynamic LMR (https://github.com/znxftw/rudim/releases/tag/v2.1.2)
Rudim v2.1.3 - Aspiration Windows, Mobility, 2 Tier TT (https://github.com/znxftw/rudim/releases/tag/v2.1.3)
Rudim v2.2.0 - Phased MoveGen, Precomputed Lookups (https://github.com/znxftw/rudim/releases/tag/v2.2.0)
-
CMCanavessi
- Posts: 1149
- Joined: Thu Dec 28, 2017 4:06 pm
- Location: Argentina
Re: New engine releases & news H1 2026
Facón 1.5 - Espiga
https://github.com/CMCanavessi/facon/releases/tag/v1.5
+220 Elo over 1.4 (Ordo ~2550, G3+G4 combined n=2080).
Gauntlet 3 (low-Ordo field, avg ~2310): 800.5/1040 (77.0%, Ordo ~2550).
Gauntlet 4 (high-Ordo field, avg ~2680): 345.5/1040 (33.2%, Ordo ~2545).
Cross-validation across the two fields confirms the rating within ~5 Elo.
The bulk of the gain comes from fixing a game_phase() inversion that had silently disabled king-safety evaluation in the middlegame since version 1.1 -- the fix in isolation measured +224 Elo at 10+0.1 self-play. The rest of the release adds search refinements (LMP, SEE-aware ordering, IIR, countermove, razoring, TT aging), evaluation refinements (knight outpost two-tier, mopup guard extended to KNN and KBB same-color), and infrastructure improvements (bench rebalanced and deepened, eval debug command, CLI bench mode, observability output).
Search
Late Move Pruning (LMP): skip late quiet moves at shallow depths in non-PV nodes when enough alternatives have already been searched without raising alpha.
SEE-aware capture ordering: captures split into GOOD (SEE >= 0, before quiets) and BAD (SEE < 0, after quiets) tiers. Replaces the single MVV-LVA tier from 1.4.
Internal Iterative Reductions (IIR): non-PV nodes without a TT move at sufficient depth are reduced by 1 ply before searching; the next visit benefits from move ordering.
Countermove heuristic: third quiet-move ordering tier after killers; remembers the refutation move per opponent (piece, to-square) pair.
Razoring: at depth 1-2 in non-PV nodes, drop into qsearch if eval + 250cp <= alpha.
Evaluation
game_phase() inversion fix (carried over from 1.1): the function had been returning the inverse of its documented contract, silently zeroing king-safety in the middlegame and using the endgame king PST from move 1. +224 Elo measured in isolation. Single largest source of strength gain in 1.5.
Knight outpost refactor: previous outpost detection required only that the square not be attackable by enemy pawns. Refactored to two tiers: KNIGHT_OUTPOST_REACHABLE (10cp, no friendly pawn support) and KNIGHT_OUTPOST_SUPPORTED (25cp, supported by a friendly pawn).
Knight outpost forward_mask fix: the disqualifying forward mask incorrectly included the knight's own rank, causing false-negatives when an enemy pawn sat on the same rank in an adjacent file. Pawns capture diagonally forward, so such pawns cannot attack the knight. Mask now strictly ahead.
Mopup insufficient material guard extended: now covers K+N+N vs K and K+B+B same-color vs K, in addition to the K+B vs K and K+N vs K cases from 1.4. K+B+B with opposite-colored bishops continues to trigger mopup correctly.
Transposition Table
TT aging: global generation counter packed into the entry's bound byte. Replacement compares (age_in_generations * 4) + (stored_depth - new_depth). Smarter eviction keeps the TT relevant across moves without losing meaningful old data. Entry size unchanged at 16 bytes.
Infrastructure
bench default depth raised from 15 to 18: more meaningful per-position measurements. Bench signature: 299,881,540 nodes at depth 18 (deterministic, used as no-regression check).
bench position rebalancing: 6 of 10 positions replaced for better time distribution. Per-position share went from 0.01%-38.85% (1.4 set) to 2.7%-16.7% (much more uniform). Each position now carries a label describing the search feature it stresses.
bench verbose flag: when present, full search output is emitted. Default (quiet) mode prints only per-position summary and total.
CLI bench mode: the binary can now be invoked as ./facon-1.5 bench [verbose] [depth N] (or facon-1.5.exe bench ... on Windows) to run the benchmark once and exit, without UCI handshake. Useful for automation.
eval UCI command: new debug command that prints a per-component breakdown of the static evaluation for the current position. Calls evaluate_verbose() which reproduces evaluate() exactly but accumulates each term separately.
Final summary on aborted iteration: when the search is interrupted mid-iteration, the engine now emits a final UCI info depth line and a human-readable info string summary right before bestmove, capturing total nodes / time / nps that would otherwise be lost between the last heartbeat and the bestmove.
currmove output suppressed for first 2 seconds: UCI info currmove lines from the root are gated by elapsed time. At shallow depths each move at the root completes in well under a millisecond, producing hundreds of currmove lines per second; suppressing this volume reduces stdout pressure on GUI pipe readers without losing useful information.
Build
MSVC support removed from CMakeLists.txt: the previous MSVC branch was non-functional because the source uses GCC/Clang builtins directly without wrappers. CMake now rejects MSVC at configure time with FATAL_ERROR. Native Windows builds should use MinGW-w64.
-fomit-frame-pointer added to Release builds: frees %rbp as a general-purpose register in the hot search/eval paths. Measured ~+2.3% NPS on Ryzen 7 1700 (Zen 1).
Known limitations
Drawn pawnless endings evaluated as material: KB vs K, KN vs K, KNN vs K, and KBB same-color vs K are theoretically drawn but evaluate() returns the raw material count (~+330 to ~+660 cp) rather than 0. An override forcing 0 was attempted during 1.5 development but reverted after extended gauntlet testing measured ~30 Elo regression -- the override was technically correct but demotivated the engine from reaching positions whose drawn final endings propagated back through search. Proper resolution requires material-signature endgame recognition or tablebase probing, planned for a future version.
Checksums (SHA1)
f7627bc8d319610b9d607f8349b955201ca152b0 facon-1.5
705aa911390d15bb819d9b792620cf3456bb6c5e facon-1.5.exe
Graham, Lars and Andres have already been testing this binary and have reported no problems with it whatsoever. You can actually watch it play live on Graham's division 13 at https://ccrl.live/16069
https://github.com/CMCanavessi/facon
https://github.com/CMCanavessi/facon/releases/tag/v1.5
+220 Elo over 1.4 (Ordo ~2550, G3+G4 combined n=2080).
Gauntlet 3 (low-Ordo field, avg ~2310): 800.5/1040 (77.0%, Ordo ~2550).
Gauntlet 4 (high-Ordo field, avg ~2680): 345.5/1040 (33.2%, Ordo ~2545).
Cross-validation across the two fields confirms the rating within ~5 Elo.
The bulk of the gain comes from fixing a game_phase() inversion that had silently disabled king-safety evaluation in the middlegame since version 1.1 -- the fix in isolation measured +224 Elo at 10+0.1 self-play. The rest of the release adds search refinements (LMP, SEE-aware ordering, IIR, countermove, razoring, TT aging), evaluation refinements (knight outpost two-tier, mopup guard extended to KNN and KBB same-color), and infrastructure improvements (bench rebalanced and deepened, eval debug command, CLI bench mode, observability output).
Search
Late Move Pruning (LMP): skip late quiet moves at shallow depths in non-PV nodes when enough alternatives have already been searched without raising alpha.
SEE-aware capture ordering: captures split into GOOD (SEE >= 0, before quiets) and BAD (SEE < 0, after quiets) tiers. Replaces the single MVV-LVA tier from 1.4.
Internal Iterative Reductions (IIR): non-PV nodes without a TT move at sufficient depth are reduced by 1 ply before searching; the next visit benefits from move ordering.
Countermove heuristic: third quiet-move ordering tier after killers; remembers the refutation move per opponent (piece, to-square) pair.
Razoring: at depth 1-2 in non-PV nodes, drop into qsearch if eval + 250cp <= alpha.
Evaluation
game_phase() inversion fix (carried over from 1.1): the function had been returning the inverse of its documented contract, silently zeroing king-safety in the middlegame and using the endgame king PST from move 1. +224 Elo measured in isolation. Single largest source of strength gain in 1.5.
Knight outpost refactor: previous outpost detection required only that the square not be attackable by enemy pawns. Refactored to two tiers: KNIGHT_OUTPOST_REACHABLE (10cp, no friendly pawn support) and KNIGHT_OUTPOST_SUPPORTED (25cp, supported by a friendly pawn).
Knight outpost forward_mask fix: the disqualifying forward mask incorrectly included the knight's own rank, causing false-negatives when an enemy pawn sat on the same rank in an adjacent file. Pawns capture diagonally forward, so such pawns cannot attack the knight. Mask now strictly ahead.
Mopup insufficient material guard extended: now covers K+N+N vs K and K+B+B same-color vs K, in addition to the K+B vs K and K+N vs K cases from 1.4. K+B+B with opposite-colored bishops continues to trigger mopup correctly.
Transposition Table
TT aging: global generation counter packed into the entry's bound byte. Replacement compares (age_in_generations * 4) + (stored_depth - new_depth). Smarter eviction keeps the TT relevant across moves without losing meaningful old data. Entry size unchanged at 16 bytes.
Infrastructure
bench default depth raised from 15 to 18: more meaningful per-position measurements. Bench signature: 299,881,540 nodes at depth 18 (deterministic, used as no-regression check).
bench position rebalancing: 6 of 10 positions replaced for better time distribution. Per-position share went from 0.01%-38.85% (1.4 set) to 2.7%-16.7% (much more uniform). Each position now carries a label describing the search feature it stresses.
bench verbose flag: when present, full search output is emitted. Default (quiet) mode prints only per-position summary and total.
CLI bench mode: the binary can now be invoked as ./facon-1.5 bench [verbose] [depth N] (or facon-1.5.exe bench ... on Windows) to run the benchmark once and exit, without UCI handshake. Useful for automation.
eval UCI command: new debug command that prints a per-component breakdown of the static evaluation for the current position. Calls evaluate_verbose() which reproduces evaluate() exactly but accumulates each term separately.
Final summary on aborted iteration: when the search is interrupted mid-iteration, the engine now emits a final UCI info depth line and a human-readable info string summary right before bestmove, capturing total nodes / time / nps that would otherwise be lost between the last heartbeat and the bestmove.
currmove output suppressed for first 2 seconds: UCI info currmove lines from the root are gated by elapsed time. At shallow depths each move at the root completes in well under a millisecond, producing hundreds of currmove lines per second; suppressing this volume reduces stdout pressure on GUI pipe readers without losing useful information.
Build
MSVC support removed from CMakeLists.txt: the previous MSVC branch was non-functional because the source uses GCC/Clang builtins directly without wrappers. CMake now rejects MSVC at configure time with FATAL_ERROR. Native Windows builds should use MinGW-w64.
-fomit-frame-pointer added to Release builds: frees %rbp as a general-purpose register in the hot search/eval paths. Measured ~+2.3% NPS on Ryzen 7 1700 (Zen 1).
Known limitations
Drawn pawnless endings evaluated as material: KB vs K, KN vs K, KNN vs K, and KBB same-color vs K are theoretically drawn but evaluate() returns the raw material count (~+330 to ~+660 cp) rather than 0. An override forcing 0 was attempted during 1.5 development but reverted after extended gauntlet testing measured ~30 Elo regression -- the override was technically correct but demotivated the engine from reaching positions whose drawn final endings propagated back through search. Proper resolution requires material-signature endgame recognition or tablebase probing, planned for a future version.
Checksums (SHA1)
f7627bc8d319610b9d607f8349b955201ca152b0 facon-1.5
705aa911390d15bb819d9b792620cf3456bb6c5e facon-1.5.exe
Graham, Lars and Andres have already been testing this binary and have reported no problems with it whatsoever. You can actually watch it play live on Graham's division 13 at https://ccrl.live/16069
https://github.com/CMCanavessi/facon
My chess engine Facón: https://github.com/CMCanavessi/facon
-
Aleks Peshkov
- Posts: 1005
- Joined: Sun Nov 19, 2006 9:16 pm
- Location: Russia
- Full name: Aleks Peshkov
Re: New engine releases & news H1 2026
Petrel 3.5
https://github.com/AleksPeshkov/petrel/ ... s/tag/v3.5
In this version I spend efforts in refactoring and low-level optimizations.
Still expected 30-50 Elo above previous version.
https://github.com/AleksPeshkov/petrel/ ... s/tag/v3.5
In this version I spend efforts in refactoring and low-level optimizations.
Still expected 30-50 Elo above previous version.
-
znx
- Posts: 5
- Joined: Mon Dec 09, 2024 5:51 am
- Full name: Vishnu Bhagyanath
Re: New engine releases & news H1 2026
Rudim v3.0.0 is out - integrated a simple (768 -> 32) x 2 -> 1 NNUE
~200 ELO gain from the HCE.
All the training was done from self play from random weights (no HCE evals used, no other engines evals used)
More details : https://github.com/znxftw/rudim/releases/tag/v3.0.0
v3.x.x will continue to improve on the NNUE - I stopped self play training the NNUE once it overtook the HCE to release v3.0.0.
Some older smaller releases I forgot to post :
Rudim v2.2.2 - Countermove, Fail-Soft & Optimizations
https://github.com/znxftw/rudim/releases/tag/v2.2.2
Rudim v2.2.1 - SEE, Futility Pruning, Incremental PST
https://github.com/znxftw/rudim/releases/tag/v2.2.1
~200 ELO gain from the HCE.
All the training was done from self play from random weights (no HCE evals used, no other engines evals used)
More details : https://github.com/znxftw/rudim/releases/tag/v3.0.0
v3.x.x will continue to improve on the NNUE - I stopped self play training the NNUE once it overtook the HCE to release v3.0.0.
Some older smaller releases I forgot to post :
Rudim v2.2.2 - Countermove, Fail-Soft & Optimizations
https://github.com/znxftw/rudim/releases/tag/v2.2.2
Rudim v2.2.1 - SEE, Futility Pruning, Incremental PST
https://github.com/znxftw/rudim/releases/tag/v2.2.1
-
CMCanavessi
- Posts: 1149
- Joined: Thu Dec 28, 2017 4:06 pm
- Location: Argentina
Re: New engine releases & news H1 2026
We finally hit ~2800 elo

Facón 1.6 - Temple
https://github.com/CMCanavessi/facon/releases/tag/v1.6
Approximately +250 Elo over 1.5 (Ordo ~2800, Gauntlet 4 n=1040).
Unlike 1.5, whose gain came almost entirely from a single critical bug fix, 1.6's improvement is a deliberate, broad evaluation overhaul. Every tunable evaluation weight was centralized into a single flat vector and optimized with Texel tuning; the piece-square tables were made phase-tapered (separate middlegame and endgame values); and three new evaluation feature groups were added: pawn shelter/storm, a second king-safety layer, and a positional refinement group covering tempo, bishop outpost, and passed-pawn play. On the infrastructure side, the magic numbers are now hardcoded, making engine startup effectively instant.
The development was strict and incremental: features were added one at a time (or in small thematic groups), each validated by self-play before the next was included, and only measurable gainers were kept. Three conceptually sound features were implemented, tuned, measured, and rejected (rook-behind-passer, non-linear mobility, material imbalance).
Evaluation -- Tuning and Tapering
Weight centralization: every tunable evaluation weight collected into a single flat array eval_weights[NUM_WEIGHTS] (934 entries), organized into named groups. Previously weights were scattered as named compile-time constants. The array is non-const so the tuner can mutate it; the eval hot path treats it as read-only by convention.
Texel-tuned weight set: the integrated weights were produced by Texel tuning on a labeled quiet-position dataset. Material was modeled as a separate tunable during tuning and folded back into the PSTs afterward, so PIECE_VALUE stays fixed at 100/320/330/500/900 while the evaluation reproduces the tuned values.
Tapered piece-square tables: each PST square now holds separate middlegame and endgame values, blended by game_phase(). Lets the tuner express phase-dependent placement (king centralization bad in the middlegame and good in the endgame, advanced pawns worth progressively more as material comes off).
Evaluation -- New Feature Groups
Pawn shelter / storm: scores the friendly pawn nearest the king on the king's file and the two adjacent files (shelter, bucketed by rank gap), and enemy pawns advancing on those files (storm, bucketed by advancement). Tapered.
Second king-safety layer: open/semi-open files toward the king (king's file weighted apart from adjacent files) and safe checks (squares an enemy can check from without being captured, per piece type). Complements the attacker-count king safety from earlier versions.
Tempo (+19 Elo, n=860, LOS 98.5%): a bonus for the side to move, added per the side to move rather than per colour. The single most valuable feature added in 1.6.
Bishop outpost (+6.6 Elo, n=3480, LOS 93%): a bishop on relative ranks 4-6 on a square no enemy pawn can challenge, with a larger bonus when pawn-supported. Mirrors the knight outpost.
Passed-pawn refinement (+10.6 Elo as a group, n=6520, LOS 99.94%): king proximity (own king near is good, enemy king near is bad, endgame-weighted), blockade (enemy piece on the stop square; a minor blockades more effectively than a major), free path to promotion, and pawn protection. Computed in a single pass over passed pawns, no NPS cost.
Evaluation -- Trace and Consistency
trace_evaluate() and the trace command: trace_evaluate() produces the linear coefficient decomposition of the evaluation (required for Texel tuning); its dot product with the weight vector reproduces evaluate() within the documented tapered-blend rounding tolerance (<=2cp). The new trace UCI debug command prints the per-weight coefficients and the engine-vs-trace fidelity check.
Infrastructure
Hardcoded magic numbers: the bishop/rook magics, previously found at startup by a fixed-seed randomized search, are now baked in as constants. Startup time dropped from ~261 ms to ~11 ms (~96% faster) on the Ryzen 7 1700; the generated attacks are bit-identical (bench unchanged at 618952, depth 8). The randomized search is preserved under #ifdef FACON_REGENERATE_MAGICS for offline regeneration; not compiled into the normal build.
Build
Version bumped to 1.6, codename "Temple": the version-string/binary-name logic distinguishes development codenames (suffix carried) from release codenames (no suffix), and the version-selection comments were generalized so they need no editing between development and release.
Features attempted and rejected
Rook behind passed pawn (Tarrasch rule): -9 Elo (n=3020, LOS 2.9%). Redundant with the rook PST and existing passed-pawn terms.
Non-linear mobility (per-count tables): -12 Elo (n=5300). Overfit; the linear mobility from 1.4 is more robust at this strength.
Material imbalance (Kaufman-style, knight/rook/bishop-pair scaled by pawn count): approximately neutral to -5 Elo. The tuning itself signaled redundancy (two of three terms wrong-signed vs theory, tiny magnitudes, error barely moved, optimizer redistributed existing PST/bishop-pair value); self-play confirmed it.
Known limitations
Drawn pawnless endings evaluated as material (carried from 1.5): K+B vs K, K+N vs K, K+N+N vs K, and K+B+B same-color vs K return the raw material count rather than 0. An override forcing 0 was attempted in 1.5 and reverted after measuring ~30 Elo regression. Proper resolution requires material-signature endgame recognition or tablebase probing, planned for a future version.
Checksums (SHA1)
b38f845e6de27867c9cf08b2f0f4b6d1d9e8f187 facon-1.6
ac61999b8a482173eef5d206fcfac1590b6e78a8 facon-1.6.exe
https://github.com/CMCanavessi/facon
Facón 1.6 - Temple
https://github.com/CMCanavessi/facon/releases/tag/v1.6
Approximately +250 Elo over 1.5 (Ordo ~2800, Gauntlet 4 n=1040).
Unlike 1.5, whose gain came almost entirely from a single critical bug fix, 1.6's improvement is a deliberate, broad evaluation overhaul. Every tunable evaluation weight was centralized into a single flat vector and optimized with Texel tuning; the piece-square tables were made phase-tapered (separate middlegame and endgame values); and three new evaluation feature groups were added: pawn shelter/storm, a second king-safety layer, and a positional refinement group covering tempo, bishop outpost, and passed-pawn play. On the infrastructure side, the magic numbers are now hardcoded, making engine startup effectively instant.
The development was strict and incremental: features were added one at a time (or in small thematic groups), each validated by self-play before the next was included, and only measurable gainers were kept. Three conceptually sound features were implemented, tuned, measured, and rejected (rook-behind-passer, non-linear mobility, material imbalance).
Evaluation -- Tuning and Tapering
Weight centralization: every tunable evaluation weight collected into a single flat array eval_weights[NUM_WEIGHTS] (934 entries), organized into named groups. Previously weights were scattered as named compile-time constants. The array is non-const so the tuner can mutate it; the eval hot path treats it as read-only by convention.
Texel-tuned weight set: the integrated weights were produced by Texel tuning on a labeled quiet-position dataset. Material was modeled as a separate tunable during tuning and folded back into the PSTs afterward, so PIECE_VALUE stays fixed at 100/320/330/500/900 while the evaluation reproduces the tuned values.
Tapered piece-square tables: each PST square now holds separate middlegame and endgame values, blended by game_phase(). Lets the tuner express phase-dependent placement (king centralization bad in the middlegame and good in the endgame, advanced pawns worth progressively more as material comes off).
Evaluation -- New Feature Groups
Pawn shelter / storm: scores the friendly pawn nearest the king on the king's file and the two adjacent files (shelter, bucketed by rank gap), and enemy pawns advancing on those files (storm, bucketed by advancement). Tapered.
Second king-safety layer: open/semi-open files toward the king (king's file weighted apart from adjacent files) and safe checks (squares an enemy can check from without being captured, per piece type). Complements the attacker-count king safety from earlier versions.
Tempo (+19 Elo, n=860, LOS 98.5%): a bonus for the side to move, added per the side to move rather than per colour. The single most valuable feature added in 1.6.
Bishop outpost (+6.6 Elo, n=3480, LOS 93%): a bishop on relative ranks 4-6 on a square no enemy pawn can challenge, with a larger bonus when pawn-supported. Mirrors the knight outpost.
Passed-pawn refinement (+10.6 Elo as a group, n=6520, LOS 99.94%): king proximity (own king near is good, enemy king near is bad, endgame-weighted), blockade (enemy piece on the stop square; a minor blockades more effectively than a major), free path to promotion, and pawn protection. Computed in a single pass over passed pawns, no NPS cost.
Evaluation -- Trace and Consistency
trace_evaluate() and the trace command: trace_evaluate() produces the linear coefficient decomposition of the evaluation (required for Texel tuning); its dot product with the weight vector reproduces evaluate() within the documented tapered-blend rounding tolerance (<=2cp). The new trace UCI debug command prints the per-weight coefficients and the engine-vs-trace fidelity check.
Infrastructure
Hardcoded magic numbers: the bishop/rook magics, previously found at startup by a fixed-seed randomized search, are now baked in as constants. Startup time dropped from ~261 ms to ~11 ms (~96% faster) on the Ryzen 7 1700; the generated attacks are bit-identical (bench unchanged at 618952, depth 8). The randomized search is preserved under #ifdef FACON_REGENERATE_MAGICS for offline regeneration; not compiled into the normal build.
Build
Version bumped to 1.6, codename "Temple": the version-string/binary-name logic distinguishes development codenames (suffix carried) from release codenames (no suffix), and the version-selection comments were generalized so they need no editing between development and release.
Features attempted and rejected
Rook behind passed pawn (Tarrasch rule): -9 Elo (n=3020, LOS 2.9%). Redundant with the rook PST and existing passed-pawn terms.
Non-linear mobility (per-count tables): -12 Elo (n=5300). Overfit; the linear mobility from 1.4 is more robust at this strength.
Material imbalance (Kaufman-style, knight/rook/bishop-pair scaled by pawn count): approximately neutral to -5 Elo. The tuning itself signaled redundancy (two of three terms wrong-signed vs theory, tiny magnitudes, error barely moved, optimizer redistributed existing PST/bishop-pair value); self-play confirmed it.
Known limitations
Drawn pawnless endings evaluated as material (carried from 1.5): K+B vs K, K+N vs K, K+N+N vs K, and K+B+B same-color vs K return the raw material count rather than 0. An override forcing 0 was attempted in 1.5 and reverted after measuring ~30 Elo regression. Proper resolution requires material-signature endgame recognition or tablebase probing, planned for a future version.
Checksums (SHA1)
b38f845e6de27867c9cf08b2f0f4b6d1d9e8f187 facon-1.6
ac61999b8a482173eef5d206fcfac1590b6e78a8 facon-1.6.exe
https://github.com/CMCanavessi/facon
My chess engine Facón: https://github.com/CMCanavessi/facon
-
NathanDrake
- Posts: 8
- Joined: Mon Jun 01, 2026 4:57 pm
- Full name: Francesco Torsello
Triumviratus 4.0 — open-source (GPLv3) UCI engine, original search + Stockfish NNUE
Hi all,
I'd like to share Triumviratus 4.0, a free/open-source (GPLv3) UCI engine I've
been developing as a hobby project.
WHAT IS ORIGINAL
- The classical alpha-beta search (PVS, null-move, LMR, singular extensions,
multi-cut, ProbCut, the full move-ordering/history stack), the bitboard move
generator, the engine architecture, and the SPSA tuning pipeline are my own work.
- A "single-board" NNUE bridge that feeds Stockfish's network directly from the
engine's own bitboards (no second board kept in sync).
WHAT IS DERIVED (and credited)
- The NNUE evaluation is **derived from Stockfish** (the HalfKAv2_hm code in
sfnnue/), and the default network is Stockfish's own nn-b1a57edbea57.nnue.
Stockfish is GPLv3, so Triumviratus is **entirely GPLv3** as well: the original
Stockfish copyright notices are preserved and the complete source is published.
This is not a Stockfish fork of the search — it is my search using SF's eval.
WHAT'S NEW IN 4.0
- A large co-tuned search vector: 55 parameters re-tuned together via a single
big SPSA run (plus several dormant heuristics enabled). Internally validated by
SPRT vs the previous defaults (same net both sides, 20+0.08): +29.5 +/- 21 Elo,
LOS 99.7%.
- New 24-byte transposition table caching a 16-bit static eval (skips NNUE
forward passes on TT hits).
- Cumulative measured gain vs the previous release 3.7 (build-neutral SPRT,
same net): +27.6 Elo, before the co-tune above.
STRENGTH
I won't post a self-measured Elo — I'd rather let CCRL/independent testing place
it. In my own gauntlets it is clearly stronger than its predecessors and above SF12.
Feedback and test results very welcome.
NETWORKS / SETUP
- Default big net nn-b1a57edbea57.nnue + small net nn-baff1ede1f90.nnue go next
to the executable. An optional in-house net (nn-rubicon-v1.nnue) can be used
via the EvalFile UCI option.
- Builds: BMI2 required. Two variants, _avx2 (Haswell/Zen+) and _avx512
(Ice Lake/Zen4+).
SOURCE & DOWNLOAD (GPLv3)
- Source + binaries: https://github.com/Tors3/Triumviratus
I'd like to share Triumviratus 4.0, a free/open-source (GPLv3) UCI engine I've
been developing as a hobby project.
WHAT IS ORIGINAL
- The classical alpha-beta search (PVS, null-move, LMR, singular extensions,
multi-cut, ProbCut, the full move-ordering/history stack), the bitboard move
generator, the engine architecture, and the SPSA tuning pipeline are my own work.
- A "single-board" NNUE bridge that feeds Stockfish's network directly from the
engine's own bitboards (no second board kept in sync).
WHAT IS DERIVED (and credited)
- The NNUE evaluation is **derived from Stockfish** (the HalfKAv2_hm code in
sfnnue/), and the default network is Stockfish's own nn-b1a57edbea57.nnue.
Stockfish is GPLv3, so Triumviratus is **entirely GPLv3** as well: the original
Stockfish copyright notices are preserved and the complete source is published.
This is not a Stockfish fork of the search — it is my search using SF's eval.
WHAT'S NEW IN 4.0
- A large co-tuned search vector: 55 parameters re-tuned together via a single
big SPSA run (plus several dormant heuristics enabled). Internally validated by
SPRT vs the previous defaults (same net both sides, 20+0.08): +29.5 +/- 21 Elo,
LOS 99.7%.
- New 24-byte transposition table caching a 16-bit static eval (skips NNUE
forward passes on TT hits).
- Cumulative measured gain vs the previous release 3.7 (build-neutral SPRT,
same net): +27.6 Elo, before the co-tune above.
STRENGTH
I won't post a self-measured Elo — I'd rather let CCRL/independent testing place
it. In my own gauntlets it is clearly stronger than its predecessors and above SF12.
Feedback and test results very welcome.
NETWORKS / SETUP
- Default big net nn-b1a57edbea57.nnue + small net nn-baff1ede1f90.nnue go next
to the executable. An optional in-house net (nn-rubicon-v1.nnue) can be used
via the EvalFile UCI option.
- Builds: BMI2 required. Two variants, _avx2 (Haswell/Zen+) and _avx512
(Ice Lake/Zen4+).
SOURCE & DOWNLOAD (GPLv3)
- Source + binaries: https://github.com/Tors3/Triumviratus
-
Sylwy
- Posts: 5260
- Joined: Fri Apr 21, 2006 4:19 pm
- Location: IAȘI - the historical capital of MOLDOVA
- Full name: Silvian Rucsandescu
Re: Triumviratus 4.0 — open-source (GPLv3) UCI engine, original search + Stockfish NNUE
THANK YOU ! I added Triumviratus like 3rd guest in my RUST_TOURNAMENT. Together with the great CODA engine. The triumvirat is: CODA-Triumviratus-Cherry !NathanDrake wrote: ↑Fri Jun 12, 2026 9:54 am Hi all,
I'd like to share Triumviratus 4.0, a free/open-source (GPLv3) UCI engine I've
been developing as a hobby project.

-
Graham Banks
- Posts: 45978
- Joined: Sun Feb 26, 2006 10:52 am
- Location: Auckland, NZ
Re: New engine releases & news H1 2026
My understanding is that it uses SF nets.
gbanksnz at gmail.com