One of the advantages of working with xTuple ERP is that you can change it. Add to this the ability to write scripts and packages for xTuple ERP and you have a lot of flexibility on how to modify or extend the core application. However, wIth an application as large and complex as this, documentation of the internals is important. Even for C++ experts, there is just too much code to understand everything about the application without some help.

The following links take you to The xTuple ERP Programmer Reference for different versions of xTuple ERP:

Getting Started

When you click on one of the links above, you'll see an introductory page with several tabs across the top:

Main Page
Clicking on this tab will always take you back to the introduction.
Related Pages
The Classes tab lets you look at the documentation based on either the name of the C++ class or other data structure, descriptions of the classes, the class inheritance hierarchy (which classes are derived from which others), or the names of class members.
Modules are parts of the source code that we have documented as belonging together, regardless of file names or position in the directory structure.
This is a list of all publicly available classes in the code. Most windows and some widgets are represented in this list twice, once for the .cpp source file and a second time as the user interface class. Qt and xTuple ERP use multiple inheritance - the C++ class containing the business and control logic is in the .cpp file and inherits the widgets, layouts, and signal/slot connections from a separate corresponding class generated from the .ui file.
The examples are a handful of JavaScript files referred to in the Programmer Reference showing how to access and expand desktop client functionality through extensions.

Probably the best way to start using this documentation is to pick a particular window that you want to change. Then look through the Class List on the Classes tab for the most likely internal name for that window (see the qt-client wiki for another way to get this name). Once you have a good candidate, you'll likely see two lines with that same name, one just plain and the other starting "Ui:". For example, if you are looking for the window that lets you create or edit a currency exchange rate, search for "currency" on the Class Index. You should find the following (and a few other lines):

Click on currencyConversion. The resulting page shows a handful of member functions and slots. These are the functions and slots defined specifically for the currencyConversion window (class). Near the top of the page, however, you'll see a List of all members link. Clicking here will bring up a list of all members of the currencyConversion class, including those that it inherits from its parent classes, QDialog and Ui_currencyConversion (which in turn comes from Ui::currencyConversion).

Now you can find the internal names of the pair of dates (a DateCluster widget called _dateCluster), the field for entering the exchange rate, and other widgets. If you want to learn more about what a particular item on the list is for, click the name of the item. For example, clicking on _rate will show you the documentation for the _rate button. If you want to find out what you can do with the _rate field (e.g., can you hide it?), click on the XLineEdit link.

The programmer reference documentation is sparse. The addition of details is a work in progress. If you would like to help with this effort, please send email to See the Doxygen Manual for information on how to tag your contributions.