Repository navigation
Correction (16 October 2026): the Windows executable
luna-v4.1.0-windows-x86_64.exewas compiled for the CPU of the build machine, not for the baseline x86-64 target as first stated below. See "Platforms and requirements".
Highlights
Luna CE v4.1.0 measures +48.6 Elo over v4.0.0 at a 10+0.1 time control, confirmed at a second thread count and
a slower time control (see Results below). The release also fixes a multi-second engine startup delay, adds
internal iterative reduction and a faster NNUE accumulator update, and is licensed under GPLv3-or-later.
Results
Three fixed-length matches, each v4.1.0 vs the v4.0.0 binary, 95% confidence intervals:
| test | time control | threads | games | Elo | 95% CI | draw ratio |
|---|---|---|---|---|---|---|
| Test 0 | 10+0.1 | 1 | 3,000 | +48.6 | +/- 9.2 | 45.3% |
| Test 1 | 10+0.1 | 2 | 3,000 | +49.1 | +/- 9.3 | 44.0% |
| Test 2 | 60+0.6 | 2 | 1,000 | +38.4 | +/- 15.0 | 51.2% |
All games used the UHO_4060_v4.epd opening book, a sharp, deliberately imbalanced book chosen to separate
engines more cleanly than a balanced one would. Elo measured on it is valid for comparing these two specific
builds under these conditions, but is not directly comparable to Elo from a balanced book or another project's
rating list.
Before trusting a gain this large, four possible sources of error were checked and ruled out: the binary tested
as "v4.0.0" was confirmed to be the actual v4.0.0 release (identical search node counts against a fresh build of
that tag); the match engine does not restart either side between games (persistent processes for the whole
match, confirmed on the running process list); both sides use the same time-management code (unchanged in this
release), and there were zero time losses in all three matches; and in the Test 0 match every decisive game
(1,641 of 3,000) ended by checkmate, with no game decided by adjudication.
What's new since v4.0.0
- Startup time cut from about 3.2 s to under 0.1 s. The magic-bitboard tables used for sliding-piece move
generation were being recomputed by a randomized search on every process start; they are now precomputed and
loaded directly. Measured on real ARM64 hardware (a Lenovo Tab M11 tablet via Termux); the mechanism is
architecture-independent, so the same fix applies on any platform. - Internal iterative reduction (IIR): positions reached without a transposition-table move are searched at
reduced depth, a standard search-efficiency technique. Measured at +12.2 +/- 9.6 Elo on its own, against a
development snapshot, not against v4.0.0 directly -- not additive with the Results figures above (those
already include this change). - Quiescence search improvements: quiescence now probes and stores results in the transposition table, and
searches check evasions when the side to move is in check. - Late move pruning (LMP) in the main search.
- Faster NNUE accumulator updates: two changes, measured separately, 1 thread, depth 18, both standard bench
positions, against each change's own immediate predecessor (not against each other, nor against v4.0.0
directly): an explicit SIMD (SSE2/NEON) row-update kernel measured +9.6%/+7.4% NPS on an x86-64 PC and
+1.3%/+0.8% on Oracle (AArch64); fusing a move's row updates into one pass per accumulator half measured
+7.3%/+7.9% on the PC and +11.8%/+13.2% on Oracle. Neither changes which positions or moves are searched
(verified by exact node-count and evaluation identity against the previous implementation in each case). info nodesnow reports the sum across all search threads, instead of only the first thread's count, when
running withThreads> 1.- Relicensed from MIT (v4.0.0) back to GPLv3-or-later (see License below).
Platforms and requirements
Three prebuilt binaries ship with this release:
luna-v4.1.0-windows-x86_64.exe-- Windows x86-64. Correction: this executable was compiled for the CPU of the build machine (a native build), not for the baseline x86-64 target as first stated. It contains POPCNT, LZCNT and 256-bit vector (AVX/AVX2) instructions, so it needs a reasonably recent CPU (roughly from 2013-2015 onward) and may fail to start with an illegal-instruction error on older ones.luna-v4.1.0-linux-aarch64-- Linux on ARM64. Requires glibc 2.34 or later (e.g. Ubuntu 22.04+, Debian 12+).
It will not run on older distributions (Ubuntu 20.04, Debian 11, and similar, which ship glibc 2.31).luna-v4.1.0-android-arm64-- Android on ARM64 (API level 21+), built with NDK r27d.
For any other platform, build from source with cargo build --release (see the README for details).
License
v4.1.0 is licensed under the GNU General Public License v3.0 or later. v4.0.0 was released under the MIT
license; versions before v4.0.0 were released under the GPL. The NNUE architecture and the AVX2/NEON inference
kernels, ported from akimbo by Jamie Whiting, remain separately MIT-licensed
and compatible with GPLv3 -- only Luna's own code's license changed. The akimbo MIT text is included in full in
THIRD_PARTY_NOTICES.md. The v4.1.0 tag includes a docs-only commit after the commit the binaries were built
from; source code is identical.
Not measured
In the interest of not overstating this release, the following were explicitly not tested and should not be
assumed to behave the same as what was measured above:
- Threads=1 at the slower 60+0.6 time control (only Threads=2 was tested at that time control).
- Any time control slower than 60+0.6.
- Threads values above 2.
- Hash sizes other than 64 MB.
- Real mobile-device play (the startup-time improvement was measured on a tablet in isolation, not inside a full
game on a phone).
Checksums
See SHA256SUMS in this release's assets.