Zeppelin v1.4.0 - Even stronger NNUE, than the previous version
https://github.com/jszczerbinsky/zeppel ... tag/v1.4.0
https://codeberg.org/jszczerbinsky/zepp ... tag/v1.4.0
https://zeppelin.bot.nu/versions
New engine releases & news H1 2026
Moderator: Ras
-
ChickenMan4236
- Posts: 23
- Joined: Wed Oct 01, 2025 8:55 pm
- Location: Poland
- Full name: Jakub Szczerbiński
-
ChickenMan4236
- Posts: 23
- Joined: Wed Oct 01, 2025 8:55 pm
- Location: Poland
- Full name: Jakub Szczerbiński
Re: New engine releases & news H1 2026
Zeppelin v1.4.1
Some minor improvements in move ordering and skipping moves with low SEE in quiescence
https://zeppelin.bot.nu
https://github.com/jszczerbinsky/zeppel ... tag/v1.4.1
https://codeberg.org/jszczerbinsky/zepp ... tag/v1.4.1
Some minor improvements in move ordering and skipping moves with low SEE in quiescence
https://zeppelin.bot.nu
https://github.com/jszczerbinsky/zeppel ... tag/v1.4.1
https://codeberg.org/jszczerbinsky/zepp ... tag/v1.4.1
-
ZlomenyMesic
- Posts: 7
- Joined: Sun Nov 09, 2025 12:33 pm
- Full name: Daniel Michna
-
Aleks Peshkov
- Posts: 988
- Joined: Sun Nov 19, 2006 9:16 pm
- Location: Russia
- Full name: Aleks Peshkov
Re: New engine releases & news H1 2026
Petrel 3.4 (NNUE), Petrel 2.4 (PeSTO)
https://github.com/AleksPeshkov/petrel/ ... s/tag/v3.4
https://github.com/AleksPeshkov/petrel/ ... s/tag/v2.4
Modest strength increase (~30 Elo) but I hope this release is more stable as previous one had several issues.
https://github.com/AleksPeshkov/petrel/ ... s/tag/v3.4
https://github.com/AleksPeshkov/petrel/ ... s/tag/v2.4
Modest strength increase (~30 Elo) but I hope this release is more stable as previous one had several issues.
-
Gabor Szots
- Posts: 1534
- Joined: Sat Jul 21, 2018 7:43 am
- Location: Budapest, Hungary
- Full name: Gabor Szots
Re: New engine releases & news H1 2026
Alex, please exes for Windows.Aleks Peshkov wrote: ↑Fri Mar 20, 2026 12:15 am Petrel 3.4 (NNUE), Petrel 2.4 (PeSTO)
https://github.com/AleksPeshkov/petrel/ ... s/tag/v3.4
https://github.com/AleksPeshkov/petrel/ ... s/tag/v2.4
Modest strength increase (~30 Elo) but I hope this release is more stable as previous one had several issues.
Gabor Szots
CCRL testing group
CCRL testing group
-
ChickenMan4236
- Posts: 23
- Joined: Wed Oct 01, 2025 8:55 pm
- Location: Poland
- Full name: Jakub Szczerbiński
Re: New engine releases & news H1 2026
Zeppelin v1.4.2
PEXT move generation and optimizations for CPUs with popcount
https://github.com/jszczerbinsky/zeppel ... tag/v1.4.2
https://codeberg.org/jszczerbinsky/zepp ... tag/v1.4.2
https://zeppelin.bot.nu/versions
PEXT move generation and optimizations for CPUs with popcount
https://github.com/jszczerbinsky/zeppel ... tag/v1.4.2
https://codeberg.org/jszczerbinsky/zepp ... tag/v1.4.2
https://zeppelin.bot.nu/versions
-
CMCanavessi
- Posts: 1143
- Joined: Thu Dec 28, 2017 4:06 pm
- Location: Argentina
Re: New engine releases & news H1 2026
Facón 1.2 - Rojo Vivo
https://github.com/CMCanavessi/facon/releases/tag/v1.2
+330 Elo over 1.1 (Ordo ~1690, confirmed across two gauntlets totaling 2080 games at 2min+1sec)
Pre-work bug fixes:
unmake_move() hash corruption: hash = st.hash was placed before the piece operations, which XOR the hash incrementally. The restored hash was immediately re-corrupted after every unmake. Latent bug since 1.0 — affected TT hit rates, repetition detection, and PV display. Fixed by moving hash = st.hash to the last line of unmake_move().
make_null_move() full-move counter corruption: unmake_null_move() decremented full_move_number when Black made a null move, but make_null_move() never incremented it. Fixed.
Double generate_all_moves() in TT probe path: eliminated by moving a single generation before the TT probe and reusing it. ~2-5% nps improvement.
Search:
Null Move Pruning (NMP): if the side to move can pass their turn and the resulting reduced-depth search still exceeds beta, prune immediately. Guards: not in check, ply > 0, non-pawn material present (zugzwang guard), depth >= 3. Reduction R = 3. Largest single search improvement in Facon's history: +5.6 average depth over 1.1 at long time controls.
Triangular PV array: replaced TT-based PV retrieval with an explicit pv_table_[MAX_PLY][MAX_PLY] updated on every alpha raise. Eliminates stale PV lines and the "PV continues after threefold repetition" GUI warning.
PV repetition detection: the PV walk seeds a seen[] array with game history hashes and stops if any resulting position was seen before.
Evaluation:
Mopup evaluation: in pawnless endings with a decisive advantage (≥300cp), rewards pushing the losing king toward corners and keeping the winning king close. Guides conversion of technically won positions that standard PSTs cannot resolve.
Infrastructure:
UCI threading: go now launches the search in a dedicated thread. The UCI loop returns immediately and can process stop while searching. Previously stop was silently ignored during search.
isatty()-gated output: startup banner, TT info, and interactive prompt are suppressed when launched by a GUI or automated tool.
TT silent constructor: no output is emitted during static initialization; print_info() is called explicitly from main() after the banner.
Time Management:
Time forfeit fix: engine was losing games on time. Fixed: HARD_FACTOR 3.0 → 2.0, SAFETY_FACTOR 0.95 → 0.90, OVERHEAD_MS = 100 subtracted upfront, hard limit capped at remaining/3, 100ms grace buffer before expiry. Zero time forfeit losses across 2080 gauntlet games.
extend_time() reason parameter: time extension events are logged with a human-readable reason string ("PV change", "score drop").
start() allocation report: soft and hard limits for each move are emitted as info string for TM diagnostics at long time controls.
Observability:
currmove/currmovenumber: each root move emits a standard UCI info currmove line as it begins searching.
New-best SAN info string: when the best move at the root changes relative to the previous iteration, emits a human-readable info string with move in SAN, score, depth, and timestamp.
Heartbeat: if no output has been emitted for 5 minutes, a standard info line plus a status string are emitted. Distinguishes a deep search from a crash at long time controls.
Code audit fixes:
Quiescence time check: quiescence() checked stats_.nodes (negamax-only counter) for its periodic time check. During deep capture sequences the check never fired. Fixed: uses stats_.qnodes.
Nodes / NPS reporting: all UCI output reported only negamax nodes, excluding quiescence. In tactical positions this caused severe underreporting. Fixed: all output now uses stats_.nodes + stats_.qnodes.
PV seen[] array size: off-by-one in the theoretical worst case. Fixed: seen[MAX_GAME_HISTORY + MAX_PLY + 2].
I feel like this is the first version of Facón that I'm really happy with. I've done extensive testing and haven't seen any bugs, no time loses, no illegal moves, and it plays very consistent. It still has a lot of areas that need improvement, new features to be added, etc. But the TT bug that I found that was present since 1.0 was horrible. Basically, Facón was playing 50% intended moves, 50% random moves
Almost 50% of the elo improvement comes from that fix alone. The rest comes from NMP and mopup.
Really looking forward to the CCRL testing of this version
https://github.com/CMCanavessi/facon
https://github.com/CMCanavessi/facon/releases/tag/v1.2
+330 Elo over 1.1 (Ordo ~1690, confirmed across two gauntlets totaling 2080 games at 2min+1sec)
Pre-work bug fixes:
unmake_move() hash corruption: hash = st.hash was placed before the piece operations, which XOR the hash incrementally. The restored hash was immediately re-corrupted after every unmake. Latent bug since 1.0 — affected TT hit rates, repetition detection, and PV display. Fixed by moving hash = st.hash to the last line of unmake_move().
make_null_move() full-move counter corruption: unmake_null_move() decremented full_move_number when Black made a null move, but make_null_move() never incremented it. Fixed.
Double generate_all_moves() in TT probe path: eliminated by moving a single generation before the TT probe and reusing it. ~2-5% nps improvement.
Search:
Null Move Pruning (NMP): if the side to move can pass their turn and the resulting reduced-depth search still exceeds beta, prune immediately. Guards: not in check, ply > 0, non-pawn material present (zugzwang guard), depth >= 3. Reduction R = 3. Largest single search improvement in Facon's history: +5.6 average depth over 1.1 at long time controls.
Triangular PV array: replaced TT-based PV retrieval with an explicit pv_table_[MAX_PLY][MAX_PLY] updated on every alpha raise. Eliminates stale PV lines and the "PV continues after threefold repetition" GUI warning.
PV repetition detection: the PV walk seeds a seen[] array with game history hashes and stops if any resulting position was seen before.
Evaluation:
Mopup evaluation: in pawnless endings with a decisive advantage (≥300cp), rewards pushing the losing king toward corners and keeping the winning king close. Guides conversion of technically won positions that standard PSTs cannot resolve.
Infrastructure:
UCI threading: go now launches the search in a dedicated thread. The UCI loop returns immediately and can process stop while searching. Previously stop was silently ignored during search.
isatty()-gated output: startup banner, TT info, and interactive prompt are suppressed when launched by a GUI or automated tool.
TT silent constructor: no output is emitted during static initialization; print_info() is called explicitly from main() after the banner.
Time Management:
Time forfeit fix: engine was losing games on time. Fixed: HARD_FACTOR 3.0 → 2.0, SAFETY_FACTOR 0.95 → 0.90, OVERHEAD_MS = 100 subtracted upfront, hard limit capped at remaining/3, 100ms grace buffer before expiry. Zero time forfeit losses across 2080 gauntlet games.
extend_time() reason parameter: time extension events are logged with a human-readable reason string ("PV change", "score drop").
start() allocation report: soft and hard limits for each move are emitted as info string for TM diagnostics at long time controls.
Observability:
currmove/currmovenumber: each root move emits a standard UCI info currmove line as it begins searching.
New-best SAN info string: when the best move at the root changes relative to the previous iteration, emits a human-readable info string with move in SAN, score, depth, and timestamp.
Heartbeat: if no output has been emitted for 5 minutes, a standard info line plus a status string are emitted. Distinguishes a deep search from a crash at long time controls.
Code audit fixes:
Quiescence time check: quiescence() checked stats_.nodes (negamax-only counter) for its periodic time check. During deep capture sequences the check never fired. Fixed: uses stats_.qnodes.
Nodes / NPS reporting: all UCI output reported only negamax nodes, excluding quiescence. In tactical positions this caused severe underreporting. Fixed: all output now uses stats_.nodes + stats_.qnodes.
PV seen[] array size: off-by-one in the theoretical worst case. Fixed: seen[MAX_GAME_HISTORY + MAX_PLY + 2].
I feel like this is the first version of Facón that I'm really happy with. I've done extensive testing and haven't seen any bugs, no time loses, no illegal moves, and it plays very consistent. It still has a lot of areas that need improvement, new features to be added, etc. But the TT bug that I found that was present since 1.0 was horrible. Basically, Facón was playing 50% intended moves, 50% random moves
Really looking forward to the CCRL testing of this version
https://github.com/CMCanavessi/facon
Follow my tournament and some Leela gauntlets live at http://twitch.tv/ccls