Skip to content

Releases: codedeliveryservice/Reckless

Reckless v0.9.0

01 Mar 05:31
0e92358

Choose a tag to compare

Reckless 0.9.0 is ready! You can download pre-built binaries for Windows, Linux, and macOS from the GitHub Releases page.

Thanks to everyone who contributed through code, testing, hardware support, or any other effort. This release came together because of your help.

Update highlights

NNUE

The neuron network has been updated to a modern threat-based architecture. It models the interactions between pieces, where one piece attacks or defends another, and extends the existing king-bucketed piece-square-based inputs with additional features.

Multithreading and NUMA support

NUMA (Non-Uniform Memory Access) support has been added to Reckless. Worker threads allocate memory and bind to the same NUMA node as the memory they access, reducing the cross-node memory access latency for high thread counts on multi-socket systems. Additionally, more improvements have been made specifically to improve the strength of the multithreading search.

MultiPV support

Reckless now supports MultiPV (Multiple Principal Variations). It can analyze and display multiple candidate moves, each with its corresponding principal variation. This feature is particularly useful for these who use Reckless for chess analysis as it provides a broader view of possibilities.

License

The project is now licensed under the GNU Affero General Public License v3.0. The AGPL-3.0 grants the right to use, modify, and distribute it, while requiring that any changes to the source code must be made available under the same license and that distribution of Reckless, including distribution over a network (such as providing access via a web application or service), must also include the full source code (or a pointer to where the source code can be found) to generate the exact binary being used.

Full Changelog: v0.8.0...v0.9.0

Playing Strength

Reckless v0.9.0 brings a significant Elo gain over the previous version, including in multithreaded settings and (D)FRC variants. The results of the progression are as follows:

UHO 40.0+0.40s

Elo   | 62.40 +- 3.31 (95%)
Conf  | 40.0+0.40s Threads=1 Hash=64MB
Games | N: 10000 W: 3435 L: 1658 D: 4907
Penta | [1, 491, 2275, 2196, 37]

DFRC 40.0+0.40s

Elo   | 68.13 +- 3.39 (95%)
Conf  | 40.0+0.40s Threads=1 Hash=64MB
Games | N: 10020 W: 3351 L: 1411 D: 5258
Penta | [9, 447, 2229, 2245, 80]

SMP 20.20+0.20s

Elo   | 70.91 +- 3.15 (95%)
Conf  | 20.0+0.20s Threads=8 Hash=512MB
Games | N: 10000 W: 3514 L: 1501 D: 4985
Penta | [0, 362, 2279, 2343, 16]

New contributors

We are excited to welcome new contributors, who have joined the project and made this release possible. Each of them invested time, knowledge, and effort into new features, optimizations, code quality improvements, and Elo gains that have been invaluable. We are grateful for your contributions and look forward to seeing more of your amazing work in the future. Thank you!

(in alphabetical order)

Special thanks to all hardware contributors for supporting Reckless' development by providing access to their machines, which is crucial for making progress:
https://recklesschess.space/users

Binaries

Pre-built binaries are provided for Windows, Linux, and macOS, with versions optimized for AVX2, AVX512, and a generic build that runs on virtually all CPUs.

Select the binary that matches your operating system (-windows, -linux, or -macos) and your CPU capabilities (-generic, -avx2, or -avx512). On macOS, a single universal build is provided.

  • Generic builds are the most portable but are significantly slower than AVX2 or AVX512 builds.
  • AVX2 builds are faster and supported on most modern CPUs.
  • AVX512 builds are generally the fastest but require a newer CPU.

If you're unsure which to use, you can start with the AVX512 build and fall back to AVX2 if you encounter issues.

Reckless 0.9.0-dev-2a847427

08 Jan 18:32
2a84742

Choose a tag to compare

Pre-release

An early development build that includes recent updates and improvements since the release of Reckless v0.8.0.

STC 8.0+0.08s vs. v0.8.0

Elo   | 48.54 +- 2.54 (95%)
Conf  | 8.0+0.08s Threads=1 Hash=16MB
Games | N: 20136 W: 6710 L: 3915 D: 9511
Penta | [59, 1312, 4671, 3827, 199]
https://recklesschess.space/test/10484/

LTC 40.0+0.40s vs. v0.8.0

Elo   | 55.24 +- 3.32 (95%)
Conf  | 40.0+0.40s Threads=1 Hash=64MB
Games | N: 10014 W: 3286 L: 1707 D: 5021
Penta | [3, 562, 2315, 2107, 20]
https://recklesschess.space/test/10485/

Full Changelog: v0.8.0...v0.9.0-dev-2a847427

Reckless 0.9.0-dev-0dd5b9ac

11 Dec 19:40
0dd5b9a

Choose a tag to compare

Pre-release

An early development build that includes recent updates and improvements since the release of Reckless v0.8.0.

Full Changelog: v0.8.0...v0.9.0-dev-0dd5b9ac

Reckless 0.9.0-dev-c5af2cea

07 Dec 13:08
c5af2ce

Choose a tag to compare

Pre-release

An early development build that includes recent updates and improvements since the release of Reckless v0.8.0.

Full Changelog: v0.8.0...v0.9.0-dev-c5af2cea

Reckless 0.9.0-dev-fe4d4b3d

07 Nov 07:44
fe4d4b3

Choose a tag to compare

Pre-release

An early development build that includes recent updates and improvements since the release of Reckless v0.8.0.

Full Changelog: v0.8.0...v0.9.0-dev-fe4d4b3d

Reckless v0.8.0

30 Aug 01:27

Choose a tag to compare

Reckless has come a long way since its early days as a solo project.

During the FIDE & Google Efficient Chess AI Challenge, I worked with Shahin (@peregrineshahin) on the team that finished in second place. After the competition in late February 2025, the whole search algorithm started being rebuilt from the ground up. Shortly after, @peregrineshahin joined the project as one of its co-authors, with Styx (@styxdoto) joining a bit later.

Together, we have transformed Reckless into a formidable chess engine, moving far and beyond the capabilities of its predecessor.

We are now releasing Reckless v0.8.0, one of the strongest chess engines in the world and the strongest chess engine written in Rust.

Playing Strength

Reckless v0.8.0 is enormously stronger than the previous release. In practical terms, v0.7.0 is no longer a meaningful opponent of measuring progress. Nevertheless, using a balanced opening book 8moves_v3, the results of the progression are as follows:

STC 8.0+0.08s

Elo   | 334.77 +- 6.38 (95%)
Conf  | 8.0+0.08s Threads=1 Hash=16MB
Games | N: 10116 W: 7583 L: 38 D: 2495
Penta | [0, 4, 216, 2127, 2711]
https://recklesschess.space/test/7421/

LTC 40.0+0.40s

Elo   | 301.49 +- 8.15 (95%)
Conf  | 40.0+0.40s Threads=1 Hash=64MB
Games | N: 5004 W: 3506 L: 2 D: 1496
Penta | [0, 0, 150, 1200, 1152]
https://recklesschess.space/test/7422/

Update highlights

Syzygy Tablebase Support

We have added support for Syzygy endgame tablebases with up to 7 pieces, thanks to the Fathom library.

Chess960 Support

Reckless can now play Chess960 (Fischer Random Chess), with full support for castling rules and position setup. It also handles assymmetrical starting positions, commonly referred to as Double Fischer Random Chess (DFRC).

NNUE Improvements

The originally used custom network trainer has been replaced with Bullet, a specialized ML library developed by @jw1912. Over 30 iterations of stronger networks have been merged, leading to a multi-layer NNUE model trained on billions of positions.

Binaries

Pre-built binaries are provided for Windows, Linux, and macOS, with versions optimized for AVX2, AVX512, and a generic build that runs on virtually all CPUs.

Select the binary that matches your operating system (-windows, -linux, or -macos) and your CPU capabilities (-generic, -avx2, or -avx512). On macOS, a single universal build is provided.

  • Generic builds are the most portable but are significantly slower than AVX2 or AVX512 builds.
  • AVX2 builds are faster and supported on most modern CPUs.
  • AVX512 builds are generally the fastest but require a newer CPU.

If you're unsure which to use, you can start with the AVX512 build and fall back to AVX2 if you encounter issues.

Looking Ahead

Since the last release, we have made over 500 commits, and the project remains very much active. We are looking forward to making Reckless better, adding new features, and more!

Reckless v0.7.0

23 Aug 19:40
4c590e0

Choose a tag to compare

Release Notes

The NNUE hidden layer size has been increased from 128 to 384, further improved by adding 4 output buckets (#56) and material scaling (#62). The final architecture is (768 -> 384)x2 -> 1x4.

Changelog

Time management

  • Time adjustment based on score stability (#50)
  • Time adjustment based on best move stability (#42)

Performance optimizations

  • Allocate a quiet move list on the stack (#51)
  • Implement operation fusion for NNUE (#58)
  • Optimize accumulator handling (#59)

Various search improvements

  • History tuning (#39)
  • Null Move Pruning tuning (#54)
  • Check extensions before the move loop (#40)
  • Disable quiescence search pruning for recaptures (#35)
  • Treat non-winning captures as unfavorable in quiescence search (#57)
  • Static Exchange Evaluation (#36, #37, #44, and #61)
  • Fully fractional LMR (#60)

Features

  • Mate Distance Pruning (#43)
  • Multi-threaded transposition table initialization (#63)

Full Changelog: v0.6.0...v0.7.0

Self-Play Benchmark Against v0.6.0

STC 8.0+0.08s

Elo   | 172.12 +- 11.31 (95%)
Conf  | 8.0+0.08s Threads=1 Hash=32MB
Games | N: 2000 W: 1007 L: 90 D: 903
Penta | [6, 38, 229, 487, 240]

LTC 40.0+0.4s

Elo   | 154.77 +- 13.83 (95%)
Conf  | 40.0+0.40s Threads=1 Hash=128MB
Games | N: 1002 W: 449 L: 30 D: 523
Penta | [0, 16, 136, 263, 86]

Reckless v0.6.0

21 Mar 23:32
f3467ae

Choose a tag to compare

Release Notes

Alongside numerous search improvements and adjustments, Reckless now supports the multi-threaded search, implemented using the Lazy SMP approach by sharing the lockless transposition table between search threads (#20, #27).

The activation function has been switched to SCReLU (bee8f74), and other three networks (#14, #26, and #33) have been trained and used during the development process.

Changelog

Time management

  • Time adjustment based on distribution of root nodes (#1)
  • Cyclic TC improvements (#31)
  • Fischer TC improvements (#32)

Late move reductions

  • Reduce checks less (#5)
  • Fractional late move reductions (#29)

History heuristics

  • Follow-up move history (#11)
  • Counter move history (#12)
  • Linear history formula (#13)
  • Separate bonus and malus (#21)
  • Index by side to move in main history (#23)

Performance optimizations

  • Transposition table prefetching (#4)
  • Handwritten SIMD for AVX2 instructions (#16)
  • Faster repetition detection (#28)

Various search improvements

  • Introduce razoring (#3)
  • Fail-soft null move pruning (#6)
  • Probe transposition table before stand pat (#7)
  • Adaptive NMP based on static evaluation (#8)
  • Use transposition table score to adjust eval (#10)
  • SPSA tuning session (#17)
  • Move check extension inside move loop (#19)
  • Update aspiration search delta function (#15)
  • Reset killer moves for child nodes (#22)
  • Avoid using static evaluation when in check (#24)
  • Increase research depth when LMR search results are promising (#30)
  • Reset killer moves before null move pruning (#34)

Full Changelog: v0.5.0...v0.6.0

Acknowledgments

Special thanks to @AndyGrant for kindly sharing his CPU time and for developing OpenBench, which is actively used in the development process.

Self-Play Benchmark Against v0.5.0

STC 8.0+0.08s

Elo   | 155.12 +- 11.83 (95%)
Conf  | 8.0+0.08s Threads=1 Hash=32MB
Games | N: 2000 W: 994 L: 156 D: 850
Penta | [8, 53, 272, 427, 240]

LTC 40.0+0.4s

Elo   | 157.43 +- 15.49 (95%)
Conf  | 40.0+0.40s Threads=1 Hash=128MB
Games | N: 1006 W: 474 L: 47 D: 485
Penta | [0, 20, 145, 229, 109]

Reckless v0.5.0

04 Feb 12:55
453eb56

Choose a tag to compare

Release Notes

This release introduces NNUE (Efficiently Updatable Neural Network), which completely replaces the previously used HCE (Handcrafted Evaluation).

The training data was generated through self-play, initially using a randomly initialized network. It was later iteratively trained on repeatedly generated data, with each iteration improving the network's strength and data quality. The training process was carried out using a custom NNUE trainer.

Additionally, a few minor changes and refactoring have been made.

Full Changelog: v0.4.0...v0.5.0

UCI Support

  • Added support for the UCI go nodes <x> command.
  • Added the custom eval command.

Self-Play Benchmark Against v0.4.0

STC 8+0.08s

Score of Reckless 0.5.0 vs Reckless 0.4.0: 811 - 46 - 143 [0.882] 1000
...      Reckless 0.5.0 playing White: 411 - 22 - 67  [0.889] 500
...      Reckless 0.5.0 playing Black: 400 - 24 - 76  [0.876] 500
...      White vs Black: 435 - 422 - 143  [0.506] 1000
Elo difference: 350.3 +/- 27.2, LOS: 100.0 %, DrawRatio: 14.3 %

LTC 40+0.4s

Score of Reckless 0.5.0 vs Reckless 0.4.0: 376 - 18 - 106 [0.858] 500
...      Reckless 0.5.0 playing White: 203 - 3 - 44  [0.900] 250
...      Reckless 0.5.0 playing Black: 173 - 15 - 62  [0.816] 250
...      White vs Black: 218 - 176 - 106  [0.542] 500
Elo difference: 312.5 +/- 33.0, LOS: 100.0 %, DrawRatio: 21.2 %

Reckless v0.4.0

13 Dec 15:09
9ed16b2

Choose a tag to compare

Search Improvements

  • Add internal iterative reductions.
  • Add futility pruning.
  • Add improving heuristic.
  • Implement a logarithmic formula for LMR, adjusted based on the history heuristic.
  • Adjust NMP based on depth with added zugzwang risk minimization.
  • Persist history table between searches and use a gravity formula.
  • Make use of TT in the quiescence search.

Evaluation Improvements

  • Enemy king-relative PST
  • Passed pawns
  • Isolated pawns

Other Changes

  • Implemented a Triangular PV table to report a full-length principal variation line.

Bug Fixes

  • Fixed a formatting bug when reporting mating scores.
  • Fixed a cache size reset bug when the ucinewgame command is received.

Self-Play Benchmark Against v0.3.0

STC 10+0.1s

Score of Reckless v0.4.0 vs Reckless v0.3.0: 539 - 47 - 164 [0.828] 750
...      Reckless v0.4.0 playing White: 284 - 17 - 74  [0.856] 375
...      Reckless v0.4.0 playing Black: 255 - 30 - 90  [0.800] 375
...      White vs Black: 314 - 272 - 164  [0.528] 750
Elo difference: 273.0 +/- 25.9, LOS: 100.0 %, DrawRatio: 21.9 %

LTC 60+0.6s

Score of Reckless v0.4.0 vs Reckless v0.3.0: 287 - 15 - 98 [0.840] 400
...      Reckless v0.4.0 playing White: 152 - 5 - 43  [0.868] 200
...      Reckless v0.4.0 playing Black: 135 - 10 - 55  [0.813] 200
...      White vs Black: 162 - 140 - 98  [0.527] 400
Elo difference: 288.1 +/- 34.5, LOS: 100.0 %, DrawRatio: 24.5 %