CXBoard Protocol Definition

Noah Roberts

Table of Contents

Permission to Use
Description of CFEN
Interface to Engine
Engine to Interface
Play mode
Forced mode


This article documents the CXBoard protocol, version 1, designed for communication between Chinese Chess engines and interfaces or converters.


The XBoard (WinBoard for MS lackeys) has been very successful in the computer Chess community. Separating the interface from the engine has allowed developers to take differing directions in development goals yet still have interoperatable components. Users may interact with engines through a variety of interfaces in order to play against them, use them to analyze games, or pit them against each other. Interface authors can devote themselves to designing a pleasant and complete interface without having to worry about AI issues, and engine authors can write their engines knowing that they will be useful to users in the manner they wish to use them.

Recently a competitor to XBoard was designed called the Universal Chess Interface (UCI). This new protocol took a very different direction than XBoard yet still stayed relatively similar. In UCI the interface is in charge of everything and the engine's only job is to think about positions. The UCI protocol also adds some very useful commands sets, such as its option set, that XBoard is not yet capable of. One of the major strengths of UCI over XBoard is that UCI was designed as a communication protocol while XBoard is an ad-hoc protocol created origionally to communicate with a single engine (GNUChess).

Neither of these protocols is capable of communicating all of the needs for Chinese Chess as they where designed for Western Chess and it's variants only. A new protocol is necissary to adiquately replicate the XBoard/Engine system created by XBoard/GNUChess and then later by UCI. This document describes just such a protocol.

There are weaknesses and strengths in both XBoard and UCI, and since we are creating something totally new we have decided to use the best parts of each. In CXBoard you may run the engine in forced mode only like UCI, or you may choose to let the engine be in more control like XBoard. We have adopted the UCI option command set as well as synchronization and a few other things, added commands necissary for the engine to have control from XBoard, and added a small set of extra commands that seemed useful and/or necissary.