Play Caissa
A chess engine I wrote in Rust, using the neural network I trained. It runs in your browser, with nothing sent to a server.
The trained model
Caissa evaluates positions with a small network of 768 inputs and two 512-unit layers, trained in pure Rust on 242M Lichess positions and 1.4M self-play positions. The game above runs that exact network and search, compiled to WebAssembly on one thread. Native builds search faster and can use several threads.
Strength, measured
The headline number is the Stockfish 19 node budget Caissa ties at a fixed time per move. It rises as the engine improves, and every step is a recorded match.
Results
| Measure | Result |
|---|---|
| Move generation | Exact on 6 standard positions; start position depth 6 = 119,060,324 |
| Speed | 3.6M nodes per second per thread, 9.6M with 4 threads. Stockfish 19 on the same machine: 1.9M per thread |
| Network | (768→512)×2→1, trained on 242M Lichess positions and 1.4M self-play positions |
| Puzzles | 92.3% of a frozen 10,000-puzzle set at 100k nodes. Stockfish 19: 99.4% |
| Rejected ideas | Puzzle motif training lost 98 Elo in a pre-registered test, so it did not ship |
How it's built
Engine
Magic bitboards generated at build time, principal variation search, a lock-free transposition table and Lazy SMP over UCI.
Neural network
Quantized inference with incremental accumulators. A multithreaded CPU trainer written in the same Rust workspace.
Match runner
Paired openings, pentanomial Elo confidence intervals and SPRT stopping. A change ships only after it wins.
Receipts
Every published number links to a JSON report, so results can be traced back to the run that produced them.