Chess against a neural network that runs on the phone. No server, no internet permission.
![]() |
![]() |
![]() |
| Five levels, five nets | The Scotch, played by maia-1500 | Drag or tap-tap |
Each level is a separate Maia net, from maia-1100 to maia-1900. Maia was trained on human games in one rating band, so it makes the mistakes a player of that rating makes. There is no search: one forward pass picks the move in 4–8 ms.
Levels 4 and 5 check the top moves with a short capture probe, so the engine won't hang its queen. Levels 1–3 skip the check. At 1100–1500, people hang pieces.
Neo-brutalism with Bauhaus shapes. The king is a cross, queen an arch, rook a square, bishop a diamond, knight a triangle, pawn a circle. Move by tapping or dragging.
brew install openjdk@21 lc0
brew install --cask android-commandlinetools
python3 tools/export_maia.py # downloads the nets and converts them to ONNX
./gradlew :app:assembleDebugWithout the nets the app still builds and plays random legal moves. Release signing reads keystore.properties from the project root.
GPL-3.0, because the bundled Maia nets are GPL-3. See LICENSE and NOTICE. Maia is by CSSLab, University of Toronto: McIlroy-Young, Sen, Kleinberg, Anderson, KDD 2020.


