ArhanPassant

Open-source chess engine

A chess engine that teaches itself.

ArhanPassant gets stronger by playing itself, and a new version only replaces the old one after beating it over thousands of games. Then it trains you the same way: one puzzle at a time, at the edge of what you can do.

v0.9.0 · about 3,426 on the CCRL Blitz scale, from 7,484 games against rated engines · how

How it gets stronger

  1. Step 1

    It plays itself

    Machines in the cloud play thousands of fast games against the current version. Every position is saved with how the game ended.

  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 new version plays the old one in pairs of games with colours swapped. It replaces the old one only if a sequential test is 95% sure it is stronger.

  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 · 8+0.08

VersionDateChangeGamesGain vs previous
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.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, ...
}