Repository navigation
Kestrel 2.1
Kestrel 2.1
A small release on top of 2.0: the same engine, the same network, the same moves. Only the default settings and the version label change, so that Kestrel starts the way chess-engine testers expect.
What changed
| Setting | 2.0 | 2.1 |
|---|---|---|
Hash |
64 MB | 256 MB |
OwnBook (opening book) |
on | off |
Experience (position learning) |
on | off |
- If you want the opening book or position learning, switch
OwnBook/Experienceon. Chess programs that setHashthemselves are not affected by the new default. - The experience file (
kestrel_experience_v2.dat) is now only read and written whenExperienceis on. - The depth-12
benchnow gives 1,051,844 nodes (2.0: 934,326). The search did not change: the difference comes from the new defaults (every bench position is searched now, none is answered from the book, and the hash is larger). - The engine reports itself as
Kestrel 2.1. The network is the one from 2.0 (and 2.0 beta 1); the network file keeps its name,kestrel_net_2_0.bin.
I found no bug in 2.0 (see below), so this is not a bug-fix release in the strict sense.
Same moves as 2.0
With the same settings, 2.1 and 2.0 search exactly alike: on 18 test positions (one thread, 300,000 nodes each) the best move, depth, score, node count and principal variation were identical, with 2.1 on its default settings and 2.0 with Hash 256, OwnBook false and Experience false set by hand. In a 400-game match at 5 + 0.1 (one thread, the same openings for both sides) 2.1 on its defaults scored -3 +/- 19 Elo against 2.0 with those settings given explicitly (110 wins, 113 losses, 177 draws, all games ended normally): no difference, as expected.
Strength
Unchanged from 2.0, which played the same moves. Measured with 2.0 (fastchess, 1 thread, 32 MB hash, no book, no experience file): pooled over six time controls 2.0 is about +37 +/- 11 Elo ahead of Kestrel 1.1 (1,900 games) and about +48 +/- 13 ahead of Kestrel 1.0 (1,500 games); at 5 + 0.1 (600 games each) +38 +/- 20 against 1.1 and +64 +/- 21 against 1.0. At about 20 ms per move (1 + 0.01) it is roughly level with 1.1. The full table is in the 2.0 release notes. No rating list has tested Kestrel yet.
Which file do I need?
| File | For |
|---|---|
Kestrel-2.1-windows-x86-64-v3.zip |
Windows 64-bit, AVX2 + BMI2 CPUs (recommended) |
Kestrel-2.1-windows-x86-64-v2.zip |
Windows 64-bit, SSE4.2 + POPCNT CPUs |
Kestrel-2.1-windows-x86-64.zip |
Windows 64-bit, any CPU |
Kestrel-2.1-linux-x86-64-v3.tar.gz |
Linux x86-64, AVX2 + BMI2 CPUs |
Kestrel-2.1-linux-x86-64-v2.tar.gz |
Linux x86-64, SSE4.2 + POPCNT CPUs |
Kestrel-2.1-linux-x86-64.tar.gz |
Linux x86-64, any CPU |
Kestrel-2.1-linux-arm64.tar.gz |
Linux ARM64 |
Kestrel-2.1-macos-x86-64.tar.gz |
macOS, Intel Macs |
Kestrel-2.1-macos-arm64.tar.gz |
macOS, Apple Silicon (M1 and newer) |
The three Windows builds are also attached as plain .exe files (same program as in the zips; a plain exe has no opening book: put claude_book.txt next to it and switch OwnBook on if you want it). kestrel_net_2_0.bin is the network alone (needed only to build from source or to load with EvalFile).
Only the x86-64-v3 builds have the AVX2 evaluation code (CPU with AVX2 and BMI2: most PCs since 2015). The v2 and generic builds work on older CPUs but are about 37 % slower.
Status of each build
- Windows: all three builds were run here; each gives the same depth-12 bench (1,051,844 nodes), so the plain code and the AVX2 code agree exactly. On the x86-64-v3 exe the two black-box audits of 1.1 were repeated: 83 of 83 protocol and robustness cases and 31 of 31 rule checks against python-chess pass. The longer test suite of 1.1 was re-run on the 2.1 source as well: a GCC build and a clang AddressSanitizer + UBSan build (each also with 4 threads by default) pass 27 of 27 checks (accumulator self-test over 186,000 positions, perft, perft against python-chess, evaluation mirror symmetry, PV legality, UCI fuzzers,
go infinite/stopraces, MultiPV and ponder checks, bench). Before this release the 1.1 test battery was also run against 2.0 to look for bugs: 303 edge cases, Chess960 against python-chess, clock safety (480 cases, no overrun), thread stress with 4 and 8 threads, a memory soak test and python-chess interoperability all pass, and no bug was found. The logs are inlogs/of the repository. - Linux and macOS: compiled with Zig and the file format checked, but not run (no such machine was available). Please open an issue if one does not start.
- The exe is about 88 MB and is not code-signed; some virus scanners are suspicious of big unsigned programs (1.0 had a false positive, see
docs/BUILDING.md).
Building from source
src/kestrel_2_0.cpp (the file name is unchanged) embeds the network with .incbin "kestrel_net.bin", which the assembler looks up in the current directory: download kestrel_net_2_0.bin from this release, save it as kestrel_net.bin in the folder where you run the compiler, then for example
g++ -std=c++17 -O3 -march=x86-64-v3 -static -pthread -DNDEBUG -o kestrel.exe path/to/src/kestrel_2_0.cpp
The network is not stored in the git history (76 MB per version); see docs/BUILDING.md for the other targets.