ArhanPassant

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

  1. 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.

  2. 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.

  3. 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.

  4. 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)

VersionDateChangeGamesGain vs previous
0.13.0-rl42026-10-07Reinforcement learning round 4: the previous network fine-tuned on 15.1M new self-play positions plus round 3's 24.2M5714+6.7 Elo (1.5 to 11.9)
0.13.0-rl32026-10-07Reinforcement learning round 3: the previous network fine-tuned on 16.6M new self-play positions plus round 2's 23.2M1756+16 Elo (6.7 to 25.4)
0.13.0-rl22026-10-06Reinforcement learning round 2: the previous network fine-tuned on 15.1M new self-play positions plus round 1's 20.0M1288+20.5 Elo (9.9 to 31.1)
0.13.0-rl12026-10-06Reinforcement learning round 1: the previous network fine-tuned on 20.0M new self-play positions1032+27.3 Elo (14.9 to 39.8)
0.12.02026-10-05NNUE network (8 king buckets, 8 output buckets), 512 hidden units, trained on 381.8M self-play positions2560+12.4 Elo (4.6 to 20.2)
0.11.02026-10-04NNUE network (8 king buckets, 8 output buckets), 512 hidden units, trained on 353.9M self-play positions1104+26.5 Elo (14.2 to 38.8)
0.10.02026-10-03NNUE network (8 king buckets, 8 output buckets), 512 hidden units, trained on 312.2M self-play positions9780+5.3 Elo (1 to 9.5)
0.9.02026-10-03NNUE network (8 king buckets, 8 output buckets), 512 hidden units, trained on 295.0M self-play positions2720+14.6 Elo (5.9 to 23.3)
0.8.02026-10-02NNUE network, 512 hidden units, trained on 283.5M self-play positions896+34.2 Elo (20.4 to 48.2)
0.7.02026-10-02NNUE network, 512 hidden units, trained on 235.0M self-play positions1188+27.6 Elo (14.9 to 40.2)
0.6.02026-10-02NNUE network, 512 hidden units, trained on 199.0M self-play positions836+43.9 Elo (27.8 to 60.1)
0.5.02026-10-02NNUE network, 512 hidden units, trained on 120.6M self-play positions1980+19.9 Elo (9.3 to 30.4)
0.4.02026-10-02NNUE network, 256 hidden units, trained on 86.5M self-play positions748+51.5 Elo (34.4 to 68.8)
0.3.02026-10-01NNUE network, 256 hidden units, trained on 45.3M self-play positions414+232.6 Elo (204 to 264.1)
0.2.02026-10-01First NNUE network (128 hidden units) trained on 3.5M self-play positions720+83.1 Elo (61.1 to 105.8)
0.1.02026-10-01Baseline: 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 details
use arhanpassant::Position;

let pos = Position::startpos();
for m in pos.legal_moves().iter() {
    println!("{}", pos.san(m)); // a3, a4, Na3, ...
}