Erinn
Erinn is a chess engine I started writing in February 2026 because I wanted to try using Kotlin and I was in my annual chess programming mood. It isn't built on some grand new idea, instead (mostly) following established engine development practices.
Using Kotlin, a language only a few other engines I know of use, presents some interesting challenges. Most engine devs prefer C/C++ or Rust instead, because they can avoid GC and bytecode interpretation overhead and have more control in general. With Erinn I try to work around these limitations to show that JVM languages can bring forth strong chess engines too (nevermind that engines like Calvin already do an excellent job with this).
Architecture
Erinn's board representation consists of bitboards with a redundant piece array indexed by square and its search is negamax with alpha-beta pruning. Moves for the sliding pieces are generated with magic bitboards. It uses a ИИUƎ net, trained on data generated by self-play for evaluation.
NNUE
The neural net used for evaluation makes use of 8 king input buckets, a hidden layer of 128 neurons activated with SCReLU and 8 output buckets based on material.
Or in short: (768x8 -> 128)x2 -> 1x8
Once the Java vector API is fully released, which may still take a while, I will use it to accelerate the inference code, but until then Erinn is relying on the JIT compiler's auto-vectorization, which does come with some downsides. Mainly it's quite tricky to get it to effectively vectorize 16- or 8-bit integer math, which is why Erinn currently uses 32-bit integers. This way it can make use of comparatively fine-grained quantization too, to hopefully make up for the slow speed with increased accuracy at least partially.
Search
Erinn's search is pretty standard. The most remarkable thing about it is its use of recapture extensions, which I haven't seen in any top engines (though I've certainly not seen every top engine from the inside). I assume this is because singular extensions extend in the situations where recapture extensions would trigger anyway, so they aren't useful anymore once SE is implemented.
Playing Strength
| Version | Release Date | CCRL 40/15 Elo | CCRL Blitz Elo |
| 1.0 | 2026-06-10 | - | 2585 (#371-373) |
| 1.1 | 2026-07-11 | 2733 (#370) | - |
| 2 | 2026-10-01 | - | 3166 (#213) |
This makes Erinn the strongest Kotlin chess engine on CCRL Blitz at the time of writing (2026-10-22).