Skip to content

@jralls jralls released this Mar 31, 2019 · 386 commits to maint since this release

The GnuCash development team announces GnuCash 3.5, the sixth release of the 3.x stable release series.


GnuCash 3.5-1 Windows Bundle

We've fixed a couple of problems with the Windows AIO Bundle and uploaded a new one to the usual places. NOTE that this is not a new release of GnuCash; the functioning of the program itself is unchanged.

It fixes two problems, one serious, one not so much:

A few bugs listed as "known problems" in the GnuCash-3.5 release notes have been tested by their reporters and marked as resolved:


Between 3.4 and 3.5, the following bugfixes were accomplished:

The following fixes and improvements were not associated with bug reports:

  • API: Add dedicated api to query build-time, version related compile constants and use it in several location in the code for consistent behaviour.
  • Budget: Save and restore the Account filter settings.
  • Build: Fix deprecation warnings for g_type_class_add_private.
  • <li><b>CSV Tokenizer</b>: Add additional test to guard against quote parsing regressions.</li>
  • GUI: Replace ambiguous mnemonic for File>Export>Export Active Register...
  • GUI: Rearrange menu accelerators for Actions>Online Actions menu items
  • GUI: Add mnemonic for File>Import>Import Bills...
  • GUI: Move Balance-Forecast report to Reports>Assets & Liabilities
  • GUI: Move Void Transactions item in Report Options from the Accounts tab to the Filter tab.
  • I18N: Fix erratic localization of dates on Windows.
    Date format selection on Windows relies on Windows National Language functions and those are unaffected by the POSIX setlocale(). We have in the past relied upon gtk initialization to handle this but it has not been reliable since the move to Gtk3. Note that this applies only when the locale is set via a Unix-style environment variable (typically LANG) or in the environment file; it's unnecessary and ignored when using the localization settings in Region & Language.
  • I18N: Unify phrases to remove untranslated msgids.
  • I18N: Restore the global locale after Guile munges it.
    There's no way to change the environment locale on Windows so calling setlocale(LC_ALL, ""), as guile does in its init routine, reads the user's Language and Region settings instead of the environment variables. We save the discovered environment locale and call setlocale with it again after Guile has initialized.
  • Importing: Remove old (non-SEPA) online transaction code, because now in 2019 the banks will only offer SEPA transactions and no others. This in turn means we don't need the old ktoblzcheck checking functions at all so also remove the dependency.
  • Importing: Usability improvements for Bayes editor window
    Remove the "Are you sure" question as it is simply annoying but does not help. Fix some string wordings to be more understandable.
  • Online Banking: No longer force existence of local BIC code.
  • Online Banking: Entering of TAN must use normal visibility
    The visibility of the entered content was set to FALSE (=invisible) always, which was wrong for certain types of input as indicated by the GUI_INPUT_FLAGS. This should now be honored and visibility set to TRUE (=visible) for the correct flags.
  • Online Banking: Fix reconcile timestamps when importing balances.
    Used to be start-of-day, but needs to be day-neutral.
  • Performance: Provide a single static instance of C++ locale.
    We can't use std::locale::global because all streams imbue it by default and if it's not 'C' (aka std::locale::classic) then we must imbue all the streams that we don't want localized, and that's most of them.
  • Performance: Add GncDateTime::timestamp().
    To provide a C++ implementation of gnc_date_timestamp and to avoid using the expensive and localized GncDateTime::format().
  • Performance: Implement a faster date-time serialization function.
    Has the side effect of recording all date-times in XML files in UTC instead of local time with a timezone. This will help users who like to keep their files under version control because the time strings won't shift every time Daylight time begins or ends.
  • Performance: >Fix XML load CPU hotspot: Scrub.c xaccTransScrubPostedDate
    The refactoring provides roughly 10% reduction in user CPU use for XML file load by moving an expensive function to within an if-clause where the result is used.
  • Performance: Speed-up of txn match dialog: Suspend GUI refresh during deletion of selected lines.
  • Performance: Sorting speed-up: Cache the bool value of Transaction's is_closing property.
  • Register: Accept URLs or file paths for files associated with transactions. File paths can be relative or absolute. A preference is provided.
  • Reports: Speed up the budget and cash flow report calculation by iterating over accounts only once.
  • Reports: Heavy scrubbing for code readability and performance.
  • Reports: New Report by Ryan Turner: Balance Forecast Report
    This report forecasts the combined balances of the selected accounts based on the scheduled transactions and plots them on a line graph. You can set a "reserve" amount, which will draw a red line on the graph, so you can easily see if your forecast dips below a given value. There is also a "future minimum" line which shows what the lowest future balance will be at a given point. I find this useful in conjunction with the "target" line for planning.
  • Reports: Fix crash when loading saved-report with unknown choices.
    If a saved-report with e.g. relative date, multichoice option is unknown, the report would crash, and the Report-Options would segfault. This commit fixes both: report-date defaults to 'today', multichoice-options defaults to default-value. Following this commit, if a report loads a saved-report or .gcm from a future version, a gnc:warn will be emitted and the report will not crash; it will use relative-date today. Multichoice will remain the default value. Report Options will not segfault. The user will be notified via a gnc:gui-warn dialog
  • Reports: Date intervals at end-of-month:
    Instead of recursing the date, we calculate the next month using an index-based multiplier, and apply modulo/remainder as appropriate to determine the next month/year. Then we attempt to create new mktime, and if the resulting mktime's month is not as expected, reduce the mday by 1 until resulting month is correct. This fixes monthly intervals for end-of-month days. Test via monthly/quarterly deltas, and also includes leapyear calculation.
  • Reports: Date-grouping must allow indenting.
    Indenting checkbox was erroneously disabled when: sortkey = date, date-subtotal = not 'none.
  • Reports: Table display
    It is intuitive that if the user wishes to show the subtotal-table, and hide the transactions, then both the main (hidden) transactions and subtotals must be hidden as well.
  • Reports: Update US Income Tax information for 2018.
  • Scheme Deprecations:
    • account-assoc
    • account-hash
    • account-hashtable-ref
    • account-hashtable-set!
    • account-in-alist
    • account-in-list-pred
    • account-in-list?
    • account-same?
    • gnc-commodity-collector-commodity-count
    • gnc-commodity-collector-contains-commodity?
    • gnc:commodity-collectorlist-get-merged
    • gnc:exchange-by-pricedb-helper
    • gnc:exhange-by-pricevalue-helper
    • gnc:get-commoditylist-inst-prices
    • gnc:hook-run-danglers
    • gnc:make-drcr-collector
    • gnc:make-stats-collector
    • gnc:report-template-menu-name/name
    • gnc:report-template-name-to-id
    • gnc:report-template-new-options/name
    • gnc:report-template-renderer/name
    • gnc:restore-report
    • gnc:save-options
    • split-assoc
    • split-hash
    • split-hashtable-ref
    • split-hashtable-set!
    • split-in-list?
    • split-same?
  • Scheme: Replace account and split utility functions with SRFI-1 functions.
  • Scheme: Testing (create-transaction) adds price trading commodities/currency.
    this will modify a test which was calibrated to record purchase price only. fix transaction creation to add prices for both purchase and sales, and also fix test which was assuming no sale price was bring recorded.
  • Scheme: Testing (env-create-multisplit-transaction) This is the general case for any transaction creation.
    Rewrite other transaction creation routines to use it. All tests still work unchanged, which confirms this function works well. This will allow tests to create multisplit transactions, of an arbitrary number of splits. If the list-of-split's values are not balanced (i.e. total 0), the engine will create an Imbalance-CUR split.
    The motivation is to allow creation of complex multisplit multicommodity transactions eg USD50 + GBP20 (USD25) = EUR66 (USD75) as well as their prices GBP/USD = 25/20 and EUR/USD = 75/66.
    • USD -50
    • USD -25 = GBP -20
    • USD +75 = EUR +66

    This will be useful in creating tests for stock-based reports, whereby stock sales need splits in STOCK/ASSET/INCOME accounts.
  • Scheme: Redesign gnc:account-get-balances-at-dates,
    replacing the ignore-closing? parameter with a split->amount function parameter having a default value of xaccSplitgetAmount. (split->amount split) should return the amount of the split or #f; in the latter case the split is skipped. This allows for a more general account balance list accumulator with novel balance strategies. For example a split->amount function could test void status and return xaccSplitVoidForerAmount on void splits; test description/memo for some content and vary the returned amount accoridingly; or test the split and return 1 or 0 creating a counter. To recreate the ignore-closing use case pass (lambda (s) (and not (xaccTransGetIsClosingTxn (xaccSplitGetParent s))) (xaccSplitGetAcmount s)))
  • Scheme: Replace some option names. Automatically convert usage of the old names and issue a warning.

We have revised translations for Arabic, Croatian (New!), Farsi, French, German, Spanish, Ukrainian

Revised or added account templates for Belgium (French) (New!), Frsnce, Croatia (New!), Germany. Switzerland (French)

Known Issues

The following are open bug reports new to the 3.x series considered significant by the development team:


Concurrent with the release of Gnucash 3.3 we're pleased to also release a new version 3.3 of the companion Help and Tutorial and Concepts Guide.

Documentation changes:

Getting GnuCash for Windows and MacOS X

GnuCash is provided for both Microsoft Windows XP® and later and MacOS X 10.9 (Mavericks)® and later in pre-built, all-in-one packages. An installer is provided for Microsoft Windows® while the MacOS X® package is a disk image containing a drag-and-drop application bundle.

The SHA256 Hashes for the downloadable files are:

  • 776d0b51b6029e25b5c7e9eb86021d5ecf1b09d8f3241b279f76dba9cc3b7745  gnucash-3.5.tar.bz2
  • a378c18df302d9b2c53a59e63a5e1e2d7192048e96f81be6e53926af5c8607d7  gnucash-3.5.tar.gz
  • 1e14f343eaf7c2118a937a74fd51842fdce59b0bd73db5863103b27592dbaafa  gnucash-3.5-1.setup.exe
  • 9ceda37f952bb53364b5ecbe5005642a8ff4158610e1c268ccbd041cdb2b1535  Gnucash-Intel-3.5-1.dmg
  • b320815c90397ab6574dfe50b462d72199a0b34b03625b1c8d7b04a2ab6f563e  gnucash-docs-3.5-1.tar.gz

To compile GnuCash from the source code by yourself, you will need at least Gtk+ 3.10, Guile 2.0, Boost 1.54, WebKitGtk 2.4, and GoogleTest 1.7.0. In addition you will need SWIG 2.0.10 if compiling from git. Please consult the README.dependencies file in the sources for the exact list of dependencies and versions.

Getting the documentation

The documentation is available at Documentation page of the GnuCash website. The 3.5 documentation can be found under "GnuCash v3 (current stable release)" in multiple languages both for reading online and for download in pdf, epub, and mobi formats. The documentation is included in the MacOS and Windows application bundles.

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.

Assets 7
You can’t perform that action at this time.