Repository navigation
Releases: LinkLikesLattes/SimpleChess
Release list
SimpleChess v3.5.0
SimpleChess 3.5.0
| Comparison (10+0.1, pentanomial SPRT) | Elo (95%) |
|---|---|
| Code only: 3.5.0 vs 3.4.0, both on the new network | +11 [+3, +19] |
| Network only: SCNNUEv3-2026-10-03 vs SCNNUEv3-2026-09-26, both on the 3.4.0 engine | +30 [+22, +39] |
| Code + network: 3.5.0 vs the 3.4.0 release | +32 [+23, +41] |
| 3.5.0 vs the 3.2.0 release | +58 [+46, +70] |
- 30 engine bug fixes. Search: in-tree repetitions are draws on their first recurrence, the node's static evaluation survives razoring and singular verification, the quiescence search tries quiet queen promotions, a mate on the 100th halfmove is scored as mate, and tablebase scores are stored and compared correctly. UCI:
go infinitenever answers beforestop,go searchmovesandgo matework, malformedsetoptionvalues and aSyzygyPathchange mid-search no longer crash the engine, and over-full FENs are refused. Time: no more ~1 ms moves at a low clock when Move Overhead exceeds the increment. Startup: an unreadable newest network falls back to the next one, and the network beside the binary is found when started throughPATH. Full list in the changelog. - New network
SCNNUEv3-2026-10-03. Same architecture; the training set grew from 2.34 to 3.17 billion self-play positions (+35%).
Downloads (each zip holds the engine, LICENSE, NOTICE and install notes):
simplechess-3.5.0-windows-avx2.zip— Windows x86-64, AVX2 (Intel Haswell / AMD Zen or newer); keep the network file beside the exe.simplechess-3.5.0-macos-arm64.zip— macOS on Apple Silicon (M1 or newer), macOS 11+; keep the network file beside the binary.simplechess-3.5.0-android-arm64.zip— Android, phone SoCs from about 2018 on (Arm dot-product); network embedded.simplechess-3.5.0-android-arm64-generic.zip— Android, older 64-bit SoCs without dot-product; network embedded, slower.
To build from source: make (or make profile-build PGO_NET=nets/SCNNUEv3-2026-10-03.scn5 for the fastest binary); the network ships in the repository. Third-party notices are in NOTICE.
SimpleChess v3.4.0
SimpleChess 3.4.0
- Win/draw/loss output (
UCI_ShowWDL). New check option (default off): every scoredinfoline also carrieswdl W D L— the side to move's win/draw/loss chances in per mille — after the score and any bound tag. The chances come from a logistic model in the score whose centre and width depend on the material on the board; mates and tablebase results show1000 0 0/0 0 1000. Display only:cpis unchanged and play is identical with the option on or off. The current model is preliminary and will be replaced. - New network
SCNNUEv3-2026-09-26. Same architecture; the training set grew from 1.69 to 2.34 billion self-play positions (+38%). +24 Elo [+13, +35] over the previous network on the same engine at 10+0.1. - Android arm64 artifacts (
simplechess-3.4.0-android-arm64.tar.gz,-arm64-genericfor pre-2018 SoCs) are under this tag's Actions run: https://github.com/LinkLikesLattes/SimpleChess/actions/runs/36330739515
Source release. Build with make (or make profile-build PGO_NET=nets/SCNNUEv3-2026-09-26.scn5 for the fastest binary); the network ships in the repository. Third-party notices are in NOTICE.
SimpleChess v3.3.2
SimpleChess 3.3.2
Android build fix: the 3.3.1 Android binary crashed at startup on devices.
- Static executable. 3.3.1's Android binary was linked as a static-PIE, and Android's static startup code reads
mainthrough a pointer that has not been relocated yet, so it segfaulted before the engine ran (DroidFish: "Failed to start engine"). The Android build is now a plain static executable, which Android runs directly. The CI checks the file is exactly that (no loader, no dynamic section, nothing to relocate at startup) and now run-tests the shipped file itself, unpacked from the uploaded archive, rather than a separate link. Artifacts (simplechess-3.3.2-android-arm64.tar.gz,-arm64-genericfor pre-2018 SoCs) are under this tag's Actions run. Reported by Arzam18 in #1. - No engine change: play is identical to 3.3.1.
Source release. Build with make (or make profile-build PGO_NET=nets/SCNNUEv3-2026-09-12.scn5 for the fastest binary); the network ships in the repository. Third-party notices are in NOTICE.
SimpleChess v3.3.1
SimpleChess 3.3.1
Android build fix: the network is now embedded in the executable.
- Embedded network.
make EMBED_NET=nets/SCNNUEv3-<date>.scn5bakes the network into the binary, so a single file runs with nothing beside it. A newer.scn5placed beside the binary still takes precedence, andEvalFilestill overrides. The Android artifacts (simplechess-3.3.1-android-arm64.tar.gz,-arm64-genericfor pre-2018 SoCs; under this tag's Actions run) are now just the executable plus install notes — the form a phone front-end or tournament harness that copies the executable alone needs. Reported by Arzam18 in #1. - No engine change: play is identical to 3.3.0.
Source release. Build with make (or make profile-build PGO_NET=nets/SCNNUEv3-2026-09-12.scn5 for the fastest binary); the network ships in the repository. Third-party notices are in NOTICE.
SimpleChess v3.3.0
SimpleChess 3.3.0
MultiPV analysis, 50-move-rule handling in the search, and an Android build. Same network as 3.2.0.
- MultiPV.
MultiPV(default 1, max 256) reports the N best root moves, each with its own principal variation, asinfo ... multipv I ...lines; each iteration runs one full root search per line, and the move played is the top line. AtMultiPV 1the search is node-identical and bestmove-identical to 3.2.0. - 50-move rule: eval damping. A freshly computed static evaluation is scaled toward zero in proportion to the halfmove clock (
eval -= eval * clock / 199, roughly half at the draw threshold), so a position shuffling toward the 50-move draw stops reporting an advantage it can no longer force and the search stops chasing it. - 50-move rule: mate reclassification. A cached mate score is trusted only if the mate can be delivered before the 50-move draw resets the game; an unreachable one is downgraded to a high non-mate score, so the engine no longer trusts, extends or reports a forced mate the draw counter voids. Reachable mates are unaffected.
- Android arm64 build.
.github/workflows/android.ymlcross-compiles a fully static position-independent executable for 64-bit Android — for DroidFish or any UCI front-end — in two variants (arm64, for phone SoCs from about 2018 on, andarm64-genericfor older ones), verifies the ELF, run-tests the build under qemu-user with the network, and uploadssimplechess-3.3.0-android-<variant>.tar.gz(binary, network, install notes) as a run artifact. The build for this release is under the repository's Actions tab. Credit to Arzam18 for the idea and the NDK recipe. - Housekeeping. The
Pass*tuning knobs are no longer advertised in theucioption list (setoptionstill accepts them);make clean,make versionand header dependency tracking now work in a source-only checkout.
Source release. Build with make (or make profile-build PGO_NET=nets/SCNNUEv3-2026-09-12.scn5 for the fastest binary); the network ships in the repository. Third-party notices are in NOTICE.
SimpleChess v3.2.0
SimpleChess 3.2.0
Chess960 / FRC / DFRC support and a new self-play network, plus an evaluation-tension correction-history update and an endgame search fix.
Strength: +34 Elo over 3.1.0. Head-to-head vs SimpleChess 3.1.0 — 5,526 games at 10s+0.1s, 1 thread, 256 MB hash, paired openings: Elo +34 [+26, +41], LOS 100%. The gain is the network retrain; the code changes are at parity at this fast control and are built to pay off at the longer time controls (2'+1" and up) the search is tuned for. Estimated 3529 on the CCRL Blitz 2'+1" (1-CPU) scale (95% interval 3501–3557) — our own gauntlet estimate, not a CCRL rating.
- Correction history weighted by evaluation tension (E6). The network is queried a second time with the side-to-move swapped; the resulting "tension" scales how large a step the pawn-structure correction table takes at deeper nodes. +3.5 Elo at 10s+0.1s.
- Adaptive search width no longer narrows in the endgame. The width that scales reductions and pruning used to fall to zero once material came off, so the engine searched its narrowest tree exactly where lines are most forcing; that material factor is gone. +3 Elo, and it fixes the endgame depth-vs-move-stability pathology.
- Chess960 / FRC / DFRC. Set
UCI_Chess960(GUIs and lichess-bot do it for you): castling is spoken king-to-rook (e1h1), X-FEN and Shredder-FEN castling fields are both accepted, and asymmetric (DFRC) back ranks need nothing extra. Standard-chess play is bit-identical to 3.1.0. Verified against Stockfish 19's FRC/DFRC perft set; a newperft <depth>debug command is included. Move Overheadis honoured. The option was parsed but ignored (a hard-coded 30 ms reserve); a GUI or lichess-bot that asks for more is now respected.- Move-generation fix. A vendored library mis-counted double checks from two diagonal sliders, which could produce an illegal interposition or a crash; fixed and verified against python-chess over 1.7M positions.
positionnow also validates every move and leaves the board unchanged on a king-less or unparseable FEN instead of crashing later. - New network.
SCNNUEv3-2026-09-12.scn5, trained from the engine's own self-play; the whole +34 Elo is this retrain.
Source release. Build with make (or make profile-build PGO_NET=nets/SCNNUEv3-2026-09-12.scn5 for the fastest binary); the network ships in the repository. Third-party notices are in NOTICE.
SimpleChess v3.1.0
SimpleChess 3.1.0
Syzygy tablebases, and a much faster engine on both Apple Silicon and x86-64 — with a search that is bit-for-bit the same as 3.0.0's.
Strength: +77 Elo over 3.0.0. Head-to-head vs SimpleChess 3.0.0 — 612 games at 10s+0.1s, 1 thread, 256 MB hash, paired openings: +173 =400 −39 (61.0%), Elo +77 [+63, +92], LOS 100%. The gain is speed turned into depth: every change below was verified to produce the same nodes, score and PV at fixed depth as 3.0.0.
- Syzygy endgame tablebases (via Fathom, MIT). Interior WDL probing behind
SyzygyPath,SyzygyProbeDepth,SyzygyProbeLimitandSyzygy50MoveRule;tbhitsreported in the info line. Probing stays off untilSyzygyPathis set. - x86-64 / AVX2 speed pass. AVX2 kernels for the int8 L1 dot product, the fused accumulator updates, the L2 layer and its epilogues; single-pass make/refresh; child-key transposition-table prefetch; 64-byte-aligned weights; large pages on Windows; PEXT magics; PGO. About 2.3× the node rate of 3.0.0 on a single thread.
- NEON / Apple Silicon speed pass. The same ideas ported to NEON — a fused source→destination accumulator pass, a 4-output
vdotqL1 dot with independent chains, 64-wide fused chunks — plus every x86 change re-measured on ARM (the ones that did not pay off there are x86-only). About 1.6× the node rate of 3.0.0 on a single thread; a middlegame position now exceeds 1M nodes/s per thread on an M1 Max. - Build. The Makefile and CMake pick
-march=nativeon x86-64 hosts and-mcpu=nativeon Apple Silicon;make ARCH="-march=x86-64-v3"gives a binary for any AVX2 machine. PGO builds are deterministic (sandboxed training workload).
Source release. Build with make (or make profile-build PGO_NET=nets/SCNNUEv3-2026-08-30.scn5 for the fastest binary); the network ships in the repository. Third-party notices are in NOTICE.
SimpleChess v3.0.0
SimpleChess 3.0.0
The engine is now NNUE-only.
Strength: +127 Elo over 2.5. Head-to-head vs SimpleChess 2.5 — 3000 games at 300ms/move, 1 thread, 256 MB hash, paired openings: +1322 =1408 −270 (67.5%), Elo +127 [+118, +136], LOS 100%.
- Hand-crafted evaluation removed entirely. The network is no longer optional: the engine loads its net at startup and exits with an error if none can be found. The
MaterialBlend/NNUEWeight/NNUEScaleblend options are gone. - Date-keyed networks. Nets are named
SCNNUEv<MAJOR>-<YYYY-MM-DD>.scn5(engine major + export date, year-month-day so filenames sort chronologically). The engine discovers and loads the newest net of its own major automatically, falling back to the newest older-major net during transitions. - New network:
SCNNUEv3-2026-08-30— trained on an 879.8M-position self-play pool: two full generation runs combined with exact position-level deduplication, keeping the newest generation's evaluation for every position. All training data is the engine's own self-play; no external engines or databases label it. - Search is behavior-identical to 2.5 at shipping defaults (verified move-for-move on a fixed-depth suite with the same network).
The repo ships only the latest network; earlier networks are available from earlier releases. Source-only release — build with make (see the README).
SimpleChess v2.5.0
First public release.
- UCI chess engine (C++20) with an NNUE evaluation trained entirely on the engine's own self-play — bootstrapped from its own hand-crafted eval, then evolved beyond it.
- The network (
nets/SCNNUEv2-5.scn5) is bundled, so a clone or source download runs out of the box. - Build with
make, ormake profile-build PGO_NET=nets/SCNNUEv2-5.scn5for the profile-guided build. - Licensed under GPL-3.0.
Source-only release — no prebuilt binaries attached.