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.

Loading the engine…About 1.9 MB
Play as
Thinking time per move

    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.

    1. Hand-tuned evaluation1,100
    2. First neural network2,550
    3. Second neural network3,350
    4. Current engineabout 4,000

    Results

    MeasureResult
    Move generationExact on 6 standard positions; start position depth 6 = 119,060,324
    Speed3.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
    Puzzles92.3% of a frozen 10,000-puzzle set at 100k nodes. Stockfish 19: 99.4%
    Rejected ideasPuzzle 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.