Open-source chess engine
A chess engine that teaches itself.
ArhanPassant learns from self-play, and each new champion must pass a measured strength test before it ships. Play the current version in your browser, or build your own skills with puzzles that adapt to your level.
v0.13.0-rl4 · +6.7 Elo versus v0.13.0-rl3 in 5,714 paired test games · strength evidence
About 3,507 on the CCRL Blitz scale in our own matches (7 October); not an official CCRL rating.
How it gets stronger
- Step 1
It plays itself
The current champion plays thousands of games against itself. Selected positions are saved with search evaluations and game outcomes for the next training round.
- Step 2
It learns from those games
A neural network is trained on the saved positions to judge who is better. Better judgement means better moves.
- Step 3
It has to prove it
The candidate plays the champion in pairs of games with colours swapped. A sequential strength test must pass before a candidate is promoted; small samples and undecided tests stay experimental.
- Step 4
It ships, and starts again
Each promotion is logged below with its games and measured gain. The new champion becomes the opponent for the next round.
Promotion ledger
gate: SPRT [0, 5] Elo · α = β = 0.05 · 5+0.05 (8+0.08 up to 0.12.0)
| Version | Date | Change | Games | Gain vs previous |
|---|---|---|---|---|
| 0.13.0-rl4 | 2026-10-07 | Reinforcement learning round 4: the previous network fine-tuned on 15.1M new self-play positions plus round 3's 24.2M | 5714 | +6.7 Elo (1.5 to 11.9) |
| 0.13.0-rl3 | 2026-10-07 | Reinforcement learning round 3: the previous network fine-tuned on 16.6M new self-play positions plus round 2's 23.2M | 1756 | +16 Elo (6.7 to 25.4) |
| 0.13.0-rl2 | 2026-10-06 | Reinforcement learning round 2: the previous network fine-tuned on 15.1M new self-play positions plus round 1's 20.0M | 1288 | +20.5 Elo (9.9 to 31.1) |
| 0.13.0-rl1 | 2026-10-06 | Reinforcement learning round 1: the previous network fine-tuned on 20.0M new self-play positions | 1032 | +27.3 Elo (14.9 to 39.8) |
| 0.12.0 | 2026-10-05 | NNUE network (8 king buckets, 8 output buckets), 512 hidden units, trained on 381.8M self-play positions | 2560 | +12.4 Elo (4.6 to 20.2) |
| 0.11.0 | 2026-10-04 | NNUE network (8 king buckets, 8 output buckets), 512 hidden units, trained on 353.9M self-play positions | 1104 | +26.5 Elo (14.2 to 38.8) |
| 0.10.0 | 2026-10-03 | NNUE network (8 king buckets, 8 output buckets), 512 hidden units, trained on 312.2M self-play positions | 9780 | +5.3 Elo (1 to 9.5) |
| 0.9.0 | 2026-10-03 | NNUE network (8 king buckets, 8 output buckets), 512 hidden units, trained on 295.0M self-play positions | 2720 | +14.6 Elo (5.9 to 23.3) |
| 0.8.0 | 2026-10-02 | NNUE network, 512 hidden units, trained on 283.5M self-play positions | 896 | +34.2 Elo (20.4 to 48.2) |
| 0.7.0 | 2026-10-02 | NNUE network, 512 hidden units, trained on 235.0M self-play positions | 1188 | +27.6 Elo (14.9 to 40.2) |
| 0.6.0 | 2026-10-02 | NNUE network, 512 hidden units, trained on 199.0M self-play positions | 836 | +43.9 Elo (27.8 to 60.1) |
| 0.5.0 | 2026-10-02 | NNUE network, 512 hidden units, trained on 120.6M self-play positions | 1980 | +19.9 Elo (9.3 to 30.4) |
| 0.4.0 | 2026-10-02 | NNUE network, 256 hidden units, trained on 86.5M self-play positions | 748 | +51.5 Elo (34.4 to 68.8) |
| 0.3.0 | 2026-10-01 | NNUE network, 256 hidden units, trained on 45.3M self-play positions | 414 | +232.6 Elo (204 to 264.1) |
| 0.2.0 | 2026-10-01 | First NNUE network (128 hidden units) trained on 3.5M self-play positions | 720 | +83.1 Elo (61.1 to 105.8) |
| 0.1.0 | 2026-10-01 | Baseline: alpha-beta search with a hand-written evaluation | — | starting point |
Training that adapts to you
The trainer keeps a running estimate of your rating and of your skill at each tactical pattern, and chooses the next puzzle from 47,000 rated positions to teach you the most.
At the edge of your level
Each puzzle is picked so you should solve about four in five. Too easy teaches nothing; too hard teaches frustration.
Weak spots first
Your skill is tracked separately for forks, pins, back-rank mates and 20 other patterns, and the trainer leans toward the ones you miss.
Misses come back
A puzzle you get wrong returns after 10 minutes, then a day, then three days, then a week, until you solve it every time.
Your own mistakes too
Enter your Lichess or Chess.com name and the engine reviews your games, turning the moves that cost you most into puzzles.
For developers
One Rust codebase: a UCI engine for any chess GUI, a chess library with legal move generation checked against published perft counts, and the WebAssembly build that runs on this page.
Engine detailsuse arhanpassant::Position;
let pos = Position::startpos();
for m in pos.legal_moves().iter() {
println!("{}", pos.san(m)); // a3, a4, Na3, ...
}