Belofte  version 2.1.5
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;
  • App().sout << is not printing certain strings, nead to stream to strstream first;
  • No newline on debug output files;

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;

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;
  • Threefold repetition is not looking at variations during search and is only looking at gamehistory;
  • 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;
  • 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;
  • Board as [144] instead as [64] array;
  • Use makeMove/unmakeMove instead of copying board in search algorithm;
  • 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.

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.


  • 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 (;