Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Toledo NanoChess UCI

Toledo NanoChess is originally a killer chess engine because it is the smallest one in the world ! The quality of the code within so few bytes is totally incredible.

This UCI version is a derivative work of the library Toledo NanoChess released in 2013 for JavaScript. It has some benefits :

  • Play with a desktop application through the modern UCI protocol.
  • Undo the last move without losing your game.
  • With pyChess' slider, select the strength of the AI when you start a new game (6 is a good value).
  • Toledo plays both White and Black.
  • Play Chess960 with unsupported castling.
  • Information about the analysis : processing time, nodes, nodes per second...

Despite it was coded and tested in just three days, this UCI port doesn't aim to be the smallest one in the world... ;-)


First, install which is the host application to run the script.

For pyChess, just add toledo-uci.js to the list of engines.

For WinBoard, add this new line in the engine list :

"Toledo NanoChess UCI" -fcp 'C:\full-path-to\node.exe "C:\full-path-to\toledo-uci.js"' -fn "Toledo NanoChess UCI" -fUCI

For the command line, execute node toledo-uci.js.


Refer to the header of the main JavaScript file to know more about the license.

Supported commands

  • uci
  • setoption name Skill Level value (number) where (number) is a level between 1 and 20
  • isready
  • ucinewgame
  • position startpos
  • position startpos moves (string) with as many moves written in UCI format (like e2e3) as needed
  • position fen (string) where (string) is a complete position in FEN format
  • position fen (string) moves (string)
  • debug displays Toledo NanoChess' internal variables
  • debug move (string) where (string) is a move to perform written in UCI format (like a2a1q)
  • debug board displays the internal board
  • debug quality executes the automated quality check
  • go
  • go depth (number) where (number) is the forced depth to reach (it temporarily overrides the current strength of the AI)
  • quit

Any other command is unsupported (like stop) or partially ignored (like go infinite).