Belofte  version 2.1.14
A promising chess program using the UCI or Winboard interface

Issues known and planned for upcoming releases

This is the file for belofte, a promising chess program released under GNU - GPL v2.0. This list is what we call, a TODO list.

*In the source code, you will find comments in the form of TODO,

, ... These elements need to be merged with below todo list. Run grep -riE "TODO|@bug" * in src folder.*

UI improvements

  • Command line input does not support key-up (history) and sometimes inserts characters when editing input line (use of del/backspace). Evaluate using readline
  • Feedback on debug command options;
  • Implement load game and save game;
  • Allow to pass commands with parameters on the command line;
  • Mate symbol should be added on movelist when generating moves, now only + is added.

UCI interface improvements

  • Be able to resign, maybe by annotating the move score when returning move;
  • Feedback to interface on info command. Options to be added: refutation (UCI_ShowRefutations=true) cpuload, sbhits, tbhits, hashfull, multipv, ...
  • Implement UCI_Analyze;
  • Only output search output after x time as per UCI specification.

Xboard interface improvements

  • Implement devide command;
  • Act on otim command to change playing style in case of time pressure;
  • Take into account next time control using remaining moves;
  • Be able to resign;
  • Implement result command;
  • Cannot add xboard version to BanksiaGui, use uci only;

Engine improvements

  • AB search - cut off at certain depth if score does not improve;
  • Split initial move evaluation from real evaluation, reuse initial evaluation to moderate real evaluation (allowing to score moves instead of resulting position);
  • If score unstable during iterative search, allow more time;
  • Null-move pruning.

Position evaluation improvements

  • Take into account space occupation;
  • Take into account mobility (number of moves when not considering check);
  • Take into account king safety (number of checks possible, number of empty fields that can lead to check with available material, open or semi open line to king or adjacent, mate on last line possible;
  • Pawn defended by pawn, Pawn next to pawn, attacks on weak pawn;
  • Defended and attacked pieces;
  • In endgame, take into account mating material;
  • Force develop pieces from their initial position;
  • Take into account Bishops positional info:
    • Bishop pair;
    • Bishops in open positions;
    • Bishops outside chain;
    • Dynamic bishop evaluation (pair vs knight, single vs knight)
    • Bad and good bishops (also in endgame).


  • Instead of calculating rook/queen/bishop looking at king, invert by king looking at those;
  • Implement stand-pat in QS search;
  • Decouple movelist from board structure (Suggested by Sven);
  • No move generation when copying board;
  • During move generation, no need to keep all the board statistics;
  • Board as [144] instead as [64] array;
  • Use makeMove/unmakeMove instead of copying board in search algorithm;
  • Keep track of m_piecesonboard instead of calculating;
  • Calculate pawncolumns when calculating pieces;
  • Only do material eval when playing move, make sure staticscore does not create cut-off on positional score;
  • Use separate thread to check for time passed instead of checking elapsed time in search loop, this thread can be paused;
  • Keep track of position static value instead of calculating each time.

Platform specific improvements or bugs


  • The source does not cater for the CR LF line termination;
  • Unicode result strings on windows (compile flag with unicode?);
  • Add version info to codeblocks generated exe.

Mac OS X

  • Support for Mac OS X Power-PC and Apple Sillicon (M1), multi-architecture binaries (Fat binaries) for PPC / x86 / ARM has not been tested;
  • Debugging is currently not possible in NetBeans. Needs configuration of the debugger by signing it so it can attach to a process. (Sandboxing issue!)

Other enhancements

Code purity

  • Use stream operator for thinking output instead of sendInfo* functions;
  • Inherit levels instead of global level class;
  • Review implementation of expect.

More platforms

  • Version for iOS;
  • Support for AnBox (Android on Linux) and darling (Mac OS on Linux);
  • Create WebAssembly version and integrate in WebAssembly UI;
  • Compilation for Solaris Sparc and x86, 32 and 64 bit;
  • More testing required with ICS servers;
  • Create project for Eclipse environment;
  • Make sure make does not create object files in src directory;
  • Do cross compilation (e.g. Compilation of windows target from linux).


  • Other chess variants. Chess 960, ...;
  • Create man page;
  • Create installer (possibly with integration in xboard/... etc.);
  • Add locale for game save. Will allow for loading and saving games with different piece letters;
  • Make sure the source code is hosted on a platform that will always allow universal access with no restrictions whatsoever (other than GPL);
  • Support for OpenBench (;