Play it here -> https://timmoth.com/sapling/play/
Or challenge it on Lichess / playstrategy -> https://lichess.org/@/sapling-bot | https://playstrategy.org/@/timmoth
| Rating pool / source | Version | Rating | Games | Source date / notes |
|---|---|---|---|---|
| CCRL 40/15 | 1.2.7 | 3389 ±10 | 1,924 | 16 October 2026; 64-bit |
| CCRL Blitz | 1.2.7 | 3436 ±50 | 89 | Small sample; 64-bit |
| CCRL 40/15 | 1.2.2 | 3381 ±13 | 1,072 | Current list; 64-bit |
| CEGT 40/4 | 1.2.2 NN | 3340 ±10 | 2,800 | 6 June 2025 list; x64, 1 CPU |
| CEGT 5+3, ponder on | 1.2.2 NN | ≈3380 | 1,200 | 10 August 2025 organiser report; testing estimate |
| CEDR | 1.2.7 | 3493.2 | 149 | 113th in the published table; checked 21 October 2026 |
| Carlos777 test pool | 1.2.2 | 3505.0 | 180 | 25 December 2024 report; historical personal test pool |
Snapshot from the Sapling-Bot public API, checked 21 October 2026. All four ratings are provisional. The account does not identify the deployed engine version.
| Pool | Rating | Rated games | Rating deviation |
|---|---|---|---|
| Bullet | 2901 | 389 | 193 |
| Blitz | 2811 | 352 | 194 |
| Rapid | 2816 | 38 | 212 |
| Chess960 | 2170 | 22 | 216 |
These tables collect the published results found in the organisers’ archives. Places are within the named division or event, not a worldwide engine rank. “Joint” denotes equal points; numbered places in CEDR tables follow the organiser’s tiebreak order. Season labels are retained even when the event was played or published later.
CCRL Amateur Series and Graham Banks tournaments (24 results)
| Published | Tournament | Version | Place | Score |
|---|---|---|---|---|
| 10/10/2024 | 112th Amateur Series (Division 5) | 1.1.4 | Joint 3rd / 14 | 28.5 / 52 |
| 24/10/2024 | The Magic Beanstalk | 1.2.2 | 5th / 14 | 29.5 / 52 |
| 07/11/2024 | The Tranquility Of Nature | 1.2.2 | Joint 5th / 12 | 22.5 / 44 |
| 16/11/2024 | 113th Amateur Series (Division 4) | 1.2.2 | 10th / 14 | 24 / 52 |
| 05/12/2024 | The Molybdenum Effect | 1.2.2 | Joint 6th / 12 | 22 / 44 |
| 25/12/2024 | 114th Amateur Series (Division 5) | 1.2.2 | Joint 1st / 14 | 31 / 52 |
| 19/01/2025 | The Swinging Handbag | 1.2.2 | 10th / 12 | 19.5 / 44 |
| 04/02/2025 | 115th Amateur Series (Division 4) | 1.2.2 | Joint 8th / 14 | 25.5 / 52 |
| 19/03/2025 | 116th Amateur Series (Division 5) | 1.2.2 | Joint 7th / 14 | 26 / 52 |
| 09/04/2025 | Swiss Tournament 2025-II | 1.2.2 | 36th / 44 | 8 / 18 |
| 28/04/2025 | 117th Amateur Series (Division 5) | 1.2.2 | Joint 5th / 14 | 27.5 / 52 |
| 15/05/2025 | Caught In A Lie | 1.2.7 | Joint 7th / 12 | 20 / 44 |
| 02/06/2025 | 118th Amateur Series (Division 5) | 1.2.7 | 6th / 14 | 27 / 52 |
| 27/06/2025 | The Snail And The Stallion | 1.2.7 | 6th / 12 | 22.5 / 44 |
| 13/07/2025 | 119th Amateur Series (Division 5) | 1.2.7 | Joint 7th / 14 | 24.5 / 52 |
| 06/08/2025 | Profundity And Secrecy | 1.2.7 | 3rd / 12 | 24.5 / 44 |
| 26/08/2025 | 120th Amateur Series (Division 5) | 1.2.7 | 9th / 14 | 25.5 / 52 |
| 16/10/2025 | 121st Amateur Series (Division 5) | 1.2.7 | Joint 5th / 14 | 27 / 52 |
| 11/11/2025 | The XYZ Chronicles | 1.2.7 | 10th / 12 | 16.5 / 44 |
| 09/12/2025 | 122nd Amateur Series (Division 5) | 1.2.7 | Joint 9th / 14 | 37.5 / 78 |
| 14/02/2026 | 123rd Amateur Series (Division 6) | 1.2.7 | 3rd / 14 | 43 / 78 |
| 27/04/2026 | 124th Amateur Series (Division 6) | 1.2.7 | Joint 2nd / 14 | 44 / 78 |
| 27/06/2026 | 125th Amateur Series (Division 5) | 1.2.7 | 15th / 16 | 26.5 / 60 |
| 24/08/2026 | 126th Amateur Series (Division 6) | 1.2.7 | 3rd / 16 | 33.5 / 60 |
Chess Engines Diary / CEDR (40 events)
| Date / season | Tournament | Version | Place / outcome | Score |
|---|---|---|---|---|
| 2024-09-27 | New Engines Test | 1.1.1 | 18th / 24 | 14 / 46 |
| 2024-10-03 | New Engines Test | 1.1.2 | 25th / 36 | 22.5 / 70 |
| 2024-10-04 | New Engines Test | 1.1.5 | 29th / 32 | 6.5 / 62 |
| 2024-09-27–10-09 | Amateur New Engines Test | 1.1.1 | 1st / 8 | 53.5 / 56 |
| 2024-10-10 | New Engines Test | 1.1.6 | 16th / 30 | 30 / 58 |
| 2024-10-14 | New Engines Table | 1.1.8 | 21st / 32 | 27 / 62 |
| 2024-10-16 | New Engines Test | 1.2.1 | 24th / 32 | 22.5 / 62 |
| 2024-10-16 | TOP Engines Tournament | 1.1.8 | 20th / 20 | 6 / 76 |
| 2024-10-18 | Test Chess Engines for macOS | 1.2.1 | 6th / 11 | 10.5 / 20 |
| Season 06/2024 | Slow Horses Group El-04 | 1.2.1 | Finalist; promoted to El-03 | Final: 0.5 / 2 vs Rebel-EAS 2.0 |
| Season 07/2024 | The Mandalorian Group E-3 | 1.2.1 | 2nd; promoted to E-2 | 46.5 / 48 |
| 2024-12-16–17 | Amateur Group E-10, edition 08/2024 | 1.2.1 | 1st / 10; promoted to E-09 | 17.5 / 18 |
| 2025-01-22–25 | Amateur Group E-04, season 01/2025 | 1.2.1 | 4th / 20 | 29.5 / 38 |
| 2025-03-11–12 | Amateur Group E-03, season 02/2025 | 1.2.1 | 1st / 20; promoted to E-02 | 5.5 / 7 |
| Season 03/2025 | Amateur Group E-02 | 1.2.1 | 3rd; promoted to E-01 | 4.5 / 7 |
| Season 04/2025 | Amateur Group E-01 | 1.2.6 | 3rd; promoted to Fourth League | 5.5 / 8 |
| 2025-04-23–27 | Fritz New Engines Tournament | 1.2.6 | 7th / 14 | 26.5 / 52 |
| 2025-04-27 | Elite Engines Tournament | 1.2.6 | 13th / 14 | 28.5 / 130 |
| 2025-04-27–29 | Fritz New Engines Test | 1.2.6 | 8th / 16 | 14 / 30 |
| Published 2025-05 | Chess Engines Tournament for macOS | 1.2.6 | 7th / 13 | 13 / 24 |
| Season 05/2025 | Third League Elite Chess Engines | 1.2.6 | 19th / 24 | 20 / 46 |
| 2025-08-16 | Third League, season 06/2025 | 1.2.6 | 17th / 24 | 21.5 / 46 |
| 2025-09-30 | Third League, season 07/2025 | 1.2.6 | 20th / 24 | 20 / 46 |
| 2025-10-08 | Chess Engines Test for macOS (Black Swan) | 1.2.6 | 8th / 14 | 12 / 26 |
| 2025-11-16 | Third League, season 08/2025 | 1.2.6 | 12th / 24 | 23 / 46 |
| 2026-01-12–16 | Fourth League, edition 01/2026 | 1.2.6 | 15th / 16 | 11 / 30 |
| 2026-02-13–20 | League Qualifiers 02/2026 | 1.2.6 | 15th | 6 / 11 |
| 2026-03-16–20 | League Qualifiers 03/2026 | 1.2.6 | 11th | 6.5 / 11 |
| 2026-04-17–22 | League Qualifiers 04/2026 | 1.2.6 | 20th | 6 / 11 |
| Season 05/2026 | Challenger Group A | 1.2.6 | 4th / 25; promoted to Fourth League | 14.5 / 24 |
| 2026-06-15 | First Myracle Engines Test | 1.2.7 | 6th / 6 | 5.5 / 20 |
| 2026-06-26–07-02 | New Engines Test | 1.2.7 | 5th / 20 | 28.5 / 38 |
| 2026-07-02 | CEDR Swiss Tournament | 1.2.7 | 11th / 12 | 2 / 7 |
| 2026-07-04 | New Engines Test | 1.2.7 | 12th / 13 | 22 / 72 |
| 2026-07-04–08 | Elite Engines Test | 1.2.7 | 15th / 18 | 22 / 68 |
| Season 07/2026 | Challenger Group A | 1.2.7 | 25th / 25 | 8.5 / 24 |
| Published 2026-08 | macOS Engines Tournament (labelled 30.04.2026) | 1.2.7 | 8th / 18 | 19.5 / 34 |
| Season 08/2026 | Challenger Group B | 1.2.7 | 5th / 25; promoted to A | 29 / 48 |
| Season 09/2026 | Challenger Group A | 1.2.7 | 11th | 5 / 9 |
| Season 10/2026 | Challenger Group A | 1.2.7 | 24th | 4.5 / 11 |
The macOS event published in August 2026 is dated “30.04.2026” by its organiser, although its table includes later development builds; that date has not been silently corrected.
Other organisers: Blitz, Chess960 and team events
| Date | Event | Version | Result |
|---|---|---|---|
| October 2024 | Blitz 3+2, 48th edition | 1.2.0 → 1.2.1 → 1.2.2 | Qualifier: 1st, 29/42; Division 5: 2nd, 36/60; Division 4: 6th / 16, 31/60 |
| October 2024 | FRC, 35th edition | 1.2.2 | Qualifier: 1st, 42.5/44; Division 4: 2nd, 33/44; Division 3: 1st, 30.5/44; Division 2: 12th / 12, 14.5/44 |
| December 2024 | Blitz 3+2, 50th edition | 1.2.2 | Division 4: 2nd / 16, 34/60; Division 3: 15th / 16, 23/60 |
| 2025 | Blitz Extravaganza, Division 4 | 1.2.7 | Published table: 13th / 16, 26/60. The forum announces multiple editions; the linked standings page is mutable. |
| May 2025 | SedatChess Candidate tournament | 1.2.7 | Participation verified at 30s+0.6s; interim 10th / 10, 36.1% after 137 games. Final result not verified. |
| 2026 | World Chess Engine Team Championship / Winter Chess WC, Board 3 | 1.2.7 x64 (5Pct) | United Kingdom-2; final Board 3: 11th / 24, 90.5/184. Handicapped configuration, not a full-strength rating. |
Owl Chess Blitz (27 gauntlet reports, Sapling v1.2.2)
These are individual gauntlet reports. The place is Sapling’s row in that report, and Score% is reproduced from Sapling’s row; neither is a global engine ranking. The Sapling-focused report covers 10,000 games.
The archive search covered CCRL, CEGT, CEDR, TalkChess, the organisers’ Outskirts/OpenChess posts, Owl Chess Blitz and Lichess. Some older or unindexed events may still be missing; interim results and unresolved dates are marked explicitly.
You can browse all windows, linux or mac releases here
From the repository root:
dotnet restore src/Sapling.sln
dotnet run --project src/Sapling/Sapling.csproj --configuration ReleaseFor self-contained Windows, Linux, Intel macOS and Apple Silicon builds, see the release workflow. Existing platform helper scripts are in Scripts/.
quit: exit the programsetoption name threads value 8: sets the number of threads to useucinewgame: initializes a new gameposition startpos: sets the engine to the starting chess positionposition startpos moves a2a3 a7a6: sets the engine to the starting position then applies a set of movesposition fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1: sets the engine to the position given by the fen stringd: outputs a diagram of the current positiongo perft 6: Runs a pert test to a specific depthgo depth 10: Returns the best move after searching for the given depthgo wtime 10000 btime 10000 winc 100 binc 100: returns the best move after searching with the given time controlgo see a2a3: [Dev] returns a the result of static exchange evaluation for a given movego eval: [Dev] returns the static evaluation of the current positiondatagen: [Dev] starts generating data as viriformat binpacks (out-worker<N>.binpack), used when training a new NNUE network
General
- Bitboards
- SCReLU NNUE: (768 × 4 input buckets → 1024) × 2 perspectives → 8 output buckets
- Horizontal mirroring
- Output buckets x8
- Transposition table
- Lazy SMP
- Pondering
Search
- Negamax
- Quiescence
- Alpha-Beta pruning
- Iterative Deepening
- Asperation windows
- Null move pruning
- Late Move Pruning
- Futility Pruning
- Razoring
- Principal Variation Search
- Check, singular, double and negative extensions
- Internal Iterative Reduction
- Late Move Reductions
- Cuckoo filter repetition detection
Move generation / ordering
- Pseudo-legal movegen
- Static exchange evaluation
- Killer move heuristic
- Counter move heuristic
- History heuristic with malus
- Threat history and compact continuation history
- Incremental sorting
- Magic bitboards
- PEXT bitboards
After any changes to the engine a SPRT test must be ran to ensure that the changes have a positive effect.
Run playing-strength SPRTs with CuteChess CLI using fixed engine builds, time control, and opening set. Record the command and result with the experiment.
v2.0.0 embeds the 21st network, trained with Bullet. It uses SCReLU, four king-input buckets, a 1024-wide accumulator per perspective and eight output buckets. Tiled accumulator refreshes reduce repeated memory traffic. The network is embedded in the executable.
