GnuCash 2.4.0 released

The GnuCash development team proudly announces GnuCash 2.4.0, the latest stable release of the GnuCash Free Accounting Software. With this new release series, GnuCash can use an SQL database using SQLite3, MySQL or PostgreSQL. It runs on GNU/Linux, *BSD, Solaris, Microsoft Windows and Mac OSX.

WARNING: You should uninstall any earlier GnuCash version from your system prior to installing 2.4.0.

Failing to do so may result in startup errors. In particular on Windows this may cause “Parse error: entry point not found” errors.

Major changes in the 2.4.0 release include;

  • In addition to the XML backend, Gnucash can now use a SQLite3, MySQL or PostgreSQL database to store the data. This is a new implementation using libdbi. It supports all features including the business features. In order to build with this, add –enable-dbi to the configure command. In addition to the libdbi-dev package for your distribution, you will also need the appropriate DBD (libdbi driver) package for sqlite3, mysql or postgresql.
  • As a replacement for the current GtkHTML HTML engine used to display reports and graphs, Gnucash can use WebKit. WebKit is the engine used by Google Chrome on Windows and Safari on Apple. In order to build with this, add –with-html-engine=webkit to the configure command. You will need an appropriate webkit-dev package. On win32, you will need to download the file from the source repository and put it into the downloads directory of your gnucash build area.
  • Updated AqBanking on Win32.

Getting GnuCash

Source code for GnuCash 2.4.0 can be downloaded from:

  • Sourceforge: bzip2, gzip, all files.
  • You can also checkout the sources directly from the subversion repository with this command:

    svn co gnucash

To install GnuCash, you will need Gnome 2, guile, slib. In addition you will need swig if compiling from subversion.

Win32 binary

The Gnucash 2.4.0 Win32 setup executable can be downloaded from Sourceforge as well.

Mac OSX binary

The Gnucash 2.4.0 MacOSX package can be downloaded from Sourceforge as well.

Changes between 2.3.17 and 2.4.0 include:

  • User-visible changes
    • Update copyright notice dates to include 2010
    • Use proper decimal separator for monetary amounts
    • If you have a parent account with a subaccount whose commodity allows more decimal places in the amount field than the parent account does things don’t work right if you open a register for the parent account and all subaccounts. This situation can occur if you have a broker account with subaccounts for the securities held in that broker account. If you open a register for the top account and all subaccounts, it is impossible to enter a transaction to buy or sell a fractional share of the security where there are more digits after the decimal point than the parent account allows. This change fixes this if the subaccount allows no more than six digits after the decimal point.
    • When creating a new style sheet, make sure the name for it is non-empty.
    • Implement (but currently deactivated) auto-completion in the invoice ledger using all entries from the current book. Eventually, this will enable drawing the auto-completion from all entries in the previous invoices (i.e. book-wide), but in order to give the user a good enough feedback during typing we additionally need a quick-fill object over those book-wide entries. Currently, the user cannot see whether the current description would result in an auto-completion from another invoice, and that’s not yet enough.
    • Implement auto-completion in the invoice/bill entry ledger.
    • Take a first shot at adding auto-completion in the business ledger, but currently it doesn’t do anything yet.
  • Updated translations or translation-related changes
    • Updated
    • Mark erroneous translation as fuzzy because it doesn’t have the correct c-format.
    • Reverse inadvertent mods to po/ in r19904
    • Updated Greek translation provided by Nikos Charonitakis.
    • Updated Japanese translation, copied from the Translation Project.
    • Add “discount” to all glossary files because some languages use different translations in billing terms and invoices. Additional the german translation is added to glossary/de.po. This change does not break the string freeze as it is not user visible.
    • Update German translation. (This includes the 14 new strings which are already there but not yet being used.)
    • Merge German translation with latest pot template. This is merged using msgmerge –no-location de.po gnucash.pot -o and we use “–no-location” to make the updates actually readable. (Unfortunately this doesn’t prevent the strings from changing ordering anyway. Oh well.)
    • Remove superfluous whitespace at end of string. Incidentally, this way the string already exists and no broken translation results.
    • When extracting the translation strings from the scheme files, sort the scheme files to obtain a stable ordering of the output.
  • Bugs fixed
    • Bug #637346: Adding python-bindings to doxygen documentation Patch by Christoph Holtermann.
    • Bug #637041: Revert r19861 as the patch from bug#635439 causes a crash. The patch can be re-applied after the 2.4.0 release is out, but for now I prefer to defer it until after the release. To be precise, this patch reverts all parts of bug#635439: r19861, r19860, r19854, r19853.
    • Bug #629446: TRY is now called plain Turkish Lira.
    • Bug #454109: Online banking: grey out online actions when there is no online account Patch by Manfred Usselmann: Online actions are disabled for accounts which have no bankcode and account id assigned This fix does not require initialization of the AB_BANKING object.
    • Bug #635926: Lower-case the name of the lock table to avoid confusing Postgres. Also abstract it to a static variable instead of repeating the string everywhere.
    • Bug #635967: Slots didn’t correctly read the path semantics stored by 2.3.15 and earlier. Corrected, but note that 2.3.15 and earlier didn’t write lists to the database, so users should re-save from XML using 2.3.17 or later.
    • Bug #635355: Partly implement the correct “DTAUS import and send” feature again. Patch by Manfred Usselmann. The main part of the feature is delayed until the string freeze is lifted. This part (without adding strings) implements the infrastructure for sending only the correctly imported transactions to the bank later.
    • Bug #636459: Recursively delete slots contained in slots of type KVP_TYPE_FRAME or KVP_TYPE_LIST.
    • Bug #635859: Strip all trailing ‘/’es from kvp_slot paths when loading. This changes round-tripping slightly (because the resulting slot key won’t have the trailing slash when it’s re-saved as xml). It may also change the behavior of the facility using the slot, because the key is changed. So far, the only known instances which trip this bug are import-map-bayes, because descriptions may have ‘/’es in them (and why shouldn’t they). Unfortunately, fixing this right (so that key values can have embedded ‘/”es and be saved/retrieved from sql databases will require changing the slot architecture in ways that impact the engine. Since we don’t have adequate unit tests to be confident of not introducing a regression, I’m applying this instead.
    • Bug #609472: Fix translation of displayed style sheet names in the style sheet editor.
    • Bug #635911 GnuCash crashes out when trying to save-as MySQL Disclaimer: This fix attempt is purely based on the information given in the bug report and code reading. I never could reproduce this bug but the code suggests an unitialized pointer may be the the cause.
    • Bug #635469: Add a (typemap for a) QofQueryParamList typedef. Patch by Matthijs Kooijman: This is a typedef for a GSList, that is used to identify the path from an object to one of its parameters in search queries and sorting. This typedef replaces GSList everywhere where it’s applicable. This relieves the need to special case a few functions in the swig bindings and makes the bindings for a bunch of other functions work as well. Note this is (still) only an in typemap, since no useful functions that return a QofQueryParamList are exposed in the bindings right now anyway.
    • Bug #635632: Update existing eguile reports to use new for syntax. Patch by Matthijs Kooijman <>: This makes use of the new for syntax introduced in the previous commit, making these reports and templates a bit easier to read and modify.
    • Bug #635632: Add custom for loop syntax for eguile templates Patch by Matthijs Kooijman <>: The built-in for-each loop construct is a bit cumbersome: It always requires an explicit lambda and the list to loop over is the last argument. Especially the latter makes it very hard to read when the lambda is big and multiple for-each’es are nested. For hashes, this prevents the need of the cumbersome hash-fold and slightly better hash-for-each (which still suffers from the same problems as for-each and is not available in guile 1.6). This new syntax allows for three distinct syntaxes: * Looping over a single list: (for a in lst do (display a)) * Looping over multiple lists: (for (a b) in (lsta lstb) do (display (+ a b))) * Looping over a hash: (for key => value in hash do (display (* key value)))
    • Bug #635469: Add bindings for running a qofquery on invoices. This adds a new typedef “GncInvoiceList” with the corresponding typemap, and adds two new functions qof_query_create_for_invoices and qof_query_run_for_invoices, which are trivial wrappers around qof_query_create_for and qof_query_run respectively.
    • Bug #635355: Add public declaration of gnc_info_dialog. Patch by Manfred Usselmann.
    • Bug #635439: Patch to autoset owner in the payment dialog Patch by Matthijs Kooijman <>
    • Revert “Bug #635439: Patch to autoset owner in the payment dialog” This reverts commit 232ae4064952cb65e9703d61778cb1531d2e4f56.
    • Bug #635439: Fix “Pay invoice” while the invoice dialog is open. Patch by Matthijs Kooijman <>: If you use “Pay invoice”, normally a new payment dialog is opened which is completely filled in. However, when there was already a dialog open, it was reused but only the owner would be filled in. This patch makes sure that the invoice and amount are filled in as well.
    • Bug #635439: Patch to autoset owner in the payment dialog Patch by Matthijs Kooijman <>: In the payment dialog, set the owner when an invoice is selected Before, you would always need to select an owner manually. If you would just select an invoice (which was possible, since the invoice selection is not disabled when no owner has been selected yet), pressing OK would error out because no owner was selected. This patch makes sure that when an invoice is selected, but no owner is selected yet, the right owner is filled into the owner selection box automatically. This also happens when the wrong owner is selected, which can happen because the invoice autocompletion is not limited to invoices from the selected owner, but always completes all invoices. This could cause weird behaviour: Select an owner, then use completion to select an invoice by another owner and press ok. This would cause the amount for the invoice by the other owner to be charged against the first owner. This patch prevents that by replacing the first owner by the other owner in the dialog. This patch also changes gnc_invoice_set_owner to no longer reset the invoice selection to NULL. Instead, this is now handled by
  • Other code/build changes
    • Update to 2.4.0 Update gnucash-bin.c to indicate stable version is 2.4.0, next stable version 2.6 Here we go…
    • Add gnc-backend-dbi-priv.h to list of header files so that ‘make distcheck’ passes
    • Fixed date problem in MySql backend
    • Removed accidentally created directory.
    • Add enumeration of indexes in sql backends. This is a first step to rewriting databases in a safe way. Indexes are named entities in sql databases and so need to be renamed along with the tables before creating and populating a new set. This change also introduces a unit test of the new enumeration, and that test has to be able to see data structures which are private to gnc-backend-dbi.c, so those data structures are moved to a new file, gnc-backend-dbi-priv.h, which both gnc-backend-dbi.c and tests/test-stuff.c can include.
    • Add debug helper function qofeventid_to_string.
    • Support for GncCommodityNamespace, better support for GncCommodity, and example enhancements. Patch supplied my Mark Jenkins.
    • Changes to example Script to include added namespace functionality This patch changes the example script to reflect the capability of reading all namespaces. Patch provided by Christoph Holtermann.
    • Cutecash: Add generation of dummy gnc-version.h file.
    • Add missing newline at end of file
    • Replace more obsolete #define’d function names by their current names.
    • Add gitignore for backup files from make check.
    • Replace more obsolete #define’d function names by their current names.
    • Make “make check” work when run from “make distcheck”.
    • Replace obsolete <QueryNew.h> #defines by the current <qof.h> function names.
    • Follow-up to r19928: Include gnc-version.h with directory path to avoid picking the wrong file.
    • Improve the cached quickfill for GncEntry description lines of r19941.
    • Add APIs to get/set a flag signifying that a transaction is a book-closing txn. This is necessary for Bug #570042 but doesn’t completely solve it until the reports are updated to use the new API. This is backwards-compatible with the slot data inserted by the book closing since 2010-03-02.
    • Adds checking of gnc_commodity_namespace in glists In src/base-typemaps.i check for return type gnc_commodity_namespace is added so that it is returned instead of gnc_type_monetary. Thanks to Christoph Holtermann for the patch.
    • Move to the correct place and remove incorrect path/file
    • Change indent to 4 sp
    • Implement prerequisites for full auto-completion in the entry ledger. Added a cached quickfill for GncEntry description lines. Extend QuickFillCell interface to be able to use a common cached quickfill.
    • Remove doubled include files. (Also, QuickFill.h doesn’t depend on gdk.h)
    • Add messages to backend errors, ensuring that qof_session_backend_get_message() will actually get a useful message, or that there will be a descriptive warning immediately before in the trace file.
    • Move gnc-version.h and gnc-svninfo.h from gnome-utils to core-utils.
    • If the build directory is not the source directory and the source directory is read only, the build fails. Fix by only making guile-strings.c if building from SVN.
    • Get rid of the rest of the gnc-prices man page, r19921 is incomplete
    • Remove variable names that conflict with Python keywords. Relevent when using SWIG autodoc feature for python bindings.
    • Add %feature(“autodoc”, “1”); to gnucash_core.i to pass C documentation through to python interface.
    • New example script for prices dababase. Thanks to Christoph Holtermann for contributing to this.
    • Remove obsolete gnc-prices man page
    • Add Gnucash svn version to sql versions table.
    • Insert missing space
    • Re-enable -Werror in and remove %feature(“autodoc”, “1”); from gnucash_core.i
    • Add commodity price functions to bindings. See Bug 636457 for more details.
    • Add PriceList to typemap for Python bindings
    • Patch by Matthijs Kooijman. In r19863, some qofquery bindings were added. For those to compile, business-core.i now includes qofquery.h. However, this causes the bindings for qofquery.h to be generated twice: Once through engine.i and once through business-core.i. The latter generated broken versions of the bindings, breaking (at least) the receivable aging report. This commit changes the %include to an %import, so the new bindings still compile but the query bindings don’t get generated twice.
    • Re-indentation of source code. This re-indentation was done using astyle-1.24 using the following options: astyle –indent=spaces=4 –brackets=break –pad-oper –pad-header –suffix=none
    • Make prototype for gnc_entry_ledger_get_entry public. Add documentation.
    • Fix GtkSpinButton with page-size deprecated warning in gnucash.trace

How can you help?

Translating: The new release comes with some new translation strings. If you consider contributing a translation, we invite you to test this release already.

About the Program

GnuCash is a free, open source accounting program released under the GNU General Public License (GPL) and available for GNU/Linux, *BSD, Solaris, Mac OSX and Microsoft Windows. Programming on GnuCash began in 1997, and its first stable release was in 1998.

Comments are closed.