Skip to content
TimmothPublic

About

A strong dotnet UCI Chess engine

Topics

Resources

Stars

48 stars

Watchers

5 watching

Forks

Latest commit

 

History

217 Commits

Folders and files

Repository files navigation

Sapling v2.0.0 — a .NET UCI chess engine

Play it here -> https://timmoth.com/sapling/play/

Or challenge it on Lichess / playstrategy -> https://lichess.org/@/sapling-bot | https://playstrategy.org/@/timmoth

Rating lists

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

Lichess account ratings

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

Tournament history

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.

Published Report Listed place Games Score%
2025-01-28 Sapling 1.2.2 vs Top Chess Engines 51 10,000 50.47%
2025-01-28 Astra 4.1 vs Top Chess Engines 48 100 65.50%
2025-01-31 Lambergar 1 vs Top Chess Engines 57 100 84.00%
2025-01-31 Pingu 5 vs Top Chess Engines 53 100 88.00%
2025-01-31 Viridithas 16 vs Top Chess Engines 49 100 18.00%
2025-02-06 Obsidian 15 vs Top Chess Engines 50 100 13.50%
2025-02-06 Schneckbert 1 vs Top Chess Engines 52 100 84.50%
2025-02-12 Integral 6 vs Top Chess Engines 54 100 14.00%
2025-02-14 Stash 36 vs Top Chess Engines 51 100 68.00%
2025-02-26 Integral 7 vs Top Chess Engines 48 100 16.50%
2025-02-28 Booot 7.4 vs Top Chess Engines 60 100 16.50%
2025-03-08 Arcanum 2.5 vs Top Chess Engines 51 100 77.00%
2025-03-08 Alexandria 8 vs Top Chess Engines 49 100 14.00%
2025-03-13 Cinder 0.1.3 vs Top Chess Engines 49 100 34.50%
2025-03-14 Quanticade 1 vs Top Chess Engines 52 100 19.00%
2025-03-16 Reckless 0.7 vs Top Chess Engines 53 100 42.50%
2025-03-23 Astra 5.1 vs Top Chess Engines 57 100 24.50%
2025-03-23 Perseus 1 vs Top Chess Engines 62 100 70.50%
2025-03-26 Schneckbert 2 vs Top Chess Engines 57 100 67.50%
2025-03-26 Plenty 5 vs Top Chess Engines 50 100 17.00%
2025-03-30 Cadie 2.1 vs Top Chess Engines 51 100 81.50%
2025-04-02 Stockfish 17.1 vs Top Chess Engines 48 100 12.50%
2025-04-03 Pawnocchio 1.4 vs Top Chess Engines 53 100 50.00%
2025-04-04 Schneckbert 3 vs Top Chess Engines 50 100 61.50%
2025-04-14 Viridithas 17 vs Top Chess Engines 46 100 18.50%
2025-04-14 Leorik 3.1 vs Top Chess Engines 59 100 54.50%
2025-04-18 Superultra 2.1 vs Top Chess Engines 52 100 40.00%

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.

Releases

You can browse all windows, linux or mac releases here

Running from source

From the repository root:

dotnet restore src/Sapling.sln
dotnet run --project src/Sapling/Sapling.csproj --configuration Release

For self-contained Windows, Linux, Intel macOS and Apple Silicon builds, see the release workflow. Existing platform helper scripts are in Scripts/.

Commands

  • quit : exit the program
  • setoption name threads value 8 : sets the number of threads to use
  • ucinewgame : initializes a new game
  • position startpos : sets the engine to the starting chess position
  • position startpos moves a2a3 a7a6 : sets the engine to the starting position then applies a set of moves
  • position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 : sets the engine to the position given by the fen string
  • d : outputs a diagram of the current position
  • go perft 6 : Runs a pert test to a specific depth
  • go depth 10 : Returns the best move after searching for the given depth
  • go wtime 10000 btime 10000 winc 100 binc 100 : returns the best move after searching with the given time control
  • go see a2a3 : [Dev] returns a the result of static exchange evaluation for a given move
  • go eval : [Dev] returns the static evaluation of the current position
  • datagen : [Dev] starts generating data as viriformat binpacks (out-worker<N>.binpack), used when training a new NNUE network

Features

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

SPRT

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.

NNUE

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.

Resources:

About

A strong dotnet UCI Chess engine

Topics

Resources

Stars

48 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages