Managing Your Money with GnuCash

GnuCash developer, Robert Merkel, explains the functionality of the Quicken alternative.

A refrain many Linux users and advocates hear again and again is “The only reason I keep Windows around is for Quicken.” Since 1997, the GnuCash Project (formerly known as xacc) has been working to provide an accounting solution for Linux. GnuCash 1.4, the current stable release, provides a simple, easy-to-use but powerful home accounting system. Development continues at a rapid rate, both through volunteers and employees of Gnumatic (, a company formed to support the continued development, marketing and productization of GnuCash and related projects.

Obtaining and Installing GnuCash

GnuCash is GPL software, so you can download the source code, as well as RPMs, from the GnuCash web site ( Several distributions, including Mandrake, SuSE, Debian and Red Hat, also include GnuCash as part of their systems. While GnuCash requires the GNOME libraries, it will run quite happily with any window manager, including KDE. The current stable version is 1.4.9, but that may have changed by the time you read this. Versions 1.5.x are the next development series. These are intended for those who wish to get involved with where GnuCash is going, rather than its use in production environments.

Building GnuCash can be a little problematic for some people as it requires the installation of a couple of uncommon build tools. In addition to a working GNOME development environment, you need Perl, guile, SWIG (available from and g-wrap, another tool now maintained by Gnumatic and available from the Gnumatic web site. The dependency on SWIG is likely to go away sometime in the next development series (1.5.x). GnuCash uses the standard GNU build environment, so compiling is just a matter of typing ./configure; make; make install.

While GnuCash's primary development environment is Linux on x86, it has been successfully compiled and run under virtually all the architectures Linux supports, as well as FreeBSD/x86 and Solaris/x86. It should also run on just about any platform to which GNOME has been ported.

Remedial Accounting 101

While many other low-end accounting programs use a “cashbook” single-entry approach to accounting, GnuCash has always used a double-entry accounting system. While slightly more complex, double-entry accounting is a far more accurate accounting technique. You'll find that double-entry is a powerful way of organizing your finances. If you are already familiar with double-entry accounting, you probably can't imagine working any other way. While it's technically possible to use GnuCash for single-entry accounting, you'd be crazy not to take advantage of GnuCash's full abilities.

So, how does double-entry accounting work in GnuCash? Every time you spend, receive or transfer money is a “transaction”. When you write a check to pay your phone bill, that's a transaction. When your paycheck goes into your account—another transaction. When you go to the ATM to get some cash for a night out, that's a transaction. When you buy a burger with that guessed it, it's a transaction (whether it's practical to account for personal burger purchases is another question). In each case, money is transferred from one place to another, and the amount taken from one place must exactly equal the amount put somewhere else. Money never appears or disappears from thin air.

Similarly, in GnuCash every transaction involves money transferred from one account to another. “Huh? Two accounts?” I hear you saying. “Okay, for a bill payment one of those accounts might be a checking account, but what's the other?” Good question. The answer is that “accounts” can be much more than checking or credit card accounts. For instance, you can create an “expense account” for “Phone Bills”. Therefore, paying a phone bill would involve two entries, one in your checking account, and one in the “Phone Bill” expense account. These amounts must exactly match, something that GnuCash immediately checks. At this point, you might think that making two separate entries is a pain. GnuCash, however, lets you make both entries at the same time. More information on double-entry accounting is available in the GnuCash documentation (on-line at

So, let's create some accounts in GnuCash and record a $100 phone bill payment. Start up GnuCash. If you installed from a binary package there's probably a menu entry somewhere, but if that's not set up just type gnucash at a command-line prompt. You'll see the main window. First, we'll need to create some accounts. One way to do so is to click on the “New” button in the toolbar, which brings up a dialog box for creating accounts.

We'll create an account to represent our checking account. In the dialog box, enter the account's details. Most of the fields are self-explanatory, but there are a few that could use some explanation. The “Account Code” is used to determine the order of display in the main window and has no other effect on the account. If you don't care what order they are displayed in, you can safely leave it blank. “Account Type” is where things start to get interesting. GnuCash has 11 different account types. Our checking account is a “bank” account. Finally, you must select a “parent account”. What's that? All will be revealed later, but for now just select “new top level one too”.

Next, we'll create the “Phone Bill” expense account. Click on the “new” button, and repeat the process. The currency for the new account must be the same as for the bank account (transferring between different currencies is performed using special “currency” accounts). Make sure you set the type of the account as “expense”. You should also select “new top level account” for this account.

If you're going to pay a phone bill, you've already got some money in your bank account. According to the rules of double-entry accounting, that money had to come from somewhere, right? Therefore, we create a special “equity” account. Repeat the process you used to create the previous accounts, but call this one “My Equity” and make it of type “equity”.

Now, enter the initial bank account balance. Open the register for the newly created bank account by double-clicking on the entry in the main window. The register shows all the transactions and a running balance for the current account. At the bottom of each register there is always a blank line to enter new transactions. The column headings display transaction fields: date, number, description, transfer (which account the transaction involves transfer from/to), deposit, withdrawal and balance.

Let's say that your current balance is $1,000.00, and we'd like to record that. The date is already set to today's date, so there's no need to modify that field. Use the tab key or the mouse to move to the next field, the description field, where we type Opening Balance. Next, we select the account where we're transferring money from—the special “My Equity” account. Enter the amount ($1,000.00) into the deposit field, and press enter to record the transaction. A new blank transaction will be created, and the balance will change to record the current account balance.

Finally, enter the phone bill. Enter the appropriate information in each field: check number, description of the transaction and the other account involved in the transaction. The transaction is recorded, the new balance for the account is calculated and a new blank transaction is recorded.


Geek Guide
The DevOps Toolbox

Tools and Technologies for Scale and Reliability
by Linux Journal Editor Bill Childers

Get your free copy today

Sponsored by IBM

8 Signs You're Beyond Cron

Scheduling Crontabs With an Enterprise Scheduler
On Demand
Moderated by Linux Journal Contributor Mike Diehl

Sign up now

Sponsored by Skybot