Penny - extensible double-entry accounting

Penny is inspired by, but incompatible with, Ledger by John Wiegley. It is a double-entry accounting system which reads your accounting data from plain-text files that you maintain. Tools allow you to query your data from the command line.

Penny should work on any recent UNIX system.

Screenshot

Why Penny

Why I wrote this thing and how it compares to Ledger and to hledger

Installation

Installing Penny is hard, sorry! It is written in Haskell, a cutting-edge functional language. This means that you need the GHC Haskell compiler. That alone will cost you at least 700 MB of disk space (though in this age of terabyte disks, maybe this isn't such a big deal.)

Here are the steps you can take to install Penny:

  1. Install the Haskell Platform, version 2013.2.0.0
  2. Run cabal install penny as root, or cabal install --user penny as a non-privileged user.
  3. cabal install does not install the documentation; to do that, find out where cabal install downloaded the penny tarball (usually this will be in $HOME/.cabal/packages/hackage.haskell.org/penny/$PENNY_VERSION.)
  4. Unpack the tarball somewhere, change to the directory that gets unpacked, and as root run ./install-docs. That will put the manpages in the correct places.

If you have problems installing Penny, let me know and I'll see if I can help.

Documentation

Most of Penny's documents are written in roff for consumption by your UNIX man page reader; they are also here for your convenience. I use tbl in the man pages, but apparently those tables are not showing up in the HTML version, sorry. They are just showing up as empty images. To get the full effect of the tables, look at the PDF versions instead.

Some of the files below are plain text files. Some of these contain UTF-8 text, which might not display properly in your web browser. If you see garbage characters, just save the file and view it in a proper text viewer or editor instead.

Getting started

penny-basics.7 (PDF)- START HERE - gets you started in Penny

starter.pny - sample Penny file format

penny-examples.7 (PDF) - more examples of penny usage

Stocks and commodities

penny-commodities.7 (PDF) - how to use Penny to track commodities

stocks.pny - sample ledger file with stocks

stocks-realized.pny - stocks after you have realized a capital gain or loss by selling them.

penny-selloff.1 (PDF) - using Penny to calculate capital gains and losses from commodity sales

Customization

penny-custom.7 (PDF) - how you can write a custom Penny binary with all your settings; requires rudimentary Haskell knowledge

Reference

penny.1 (PDF) - has all options for the main penny program, in exhaustive detail

penny-suite.7 (PDF) - lists all Penny man pages and most documentation

more-file-format-details.pny - a Penny ledger file showing more features of the file format.

Miscellaneous

penny-diff.1 (PDF) - like diff, but for Penny

penny-fit.7 (PDF) - can help you automatically import transactions from your bank, though it will require rudimentary Haskell knowledge.

penny-reconcile.1 (PDF) - can help you when reconciling your bank accounts

penny-reprint (PDF) - tidies up ledger files

Hackage pages

Hackage is a repository of Haskell packages, sort of like CPAN if you are familiar with that.

Development

Surely there are no bugs in this software! But if you find some, or if you just have some nifty idea and you want me to look at it, the best way to do it is by using git and Github. You can also email me. I can't lie, it takes me forever to respond to emails, so I apologize in advance. The best thing about Github is that you can fork the code and go off on your merry way; Penny's BSD style license is no impediment to that and believe me, if you do that I won't be offended.

Start by rummaging around in the Haddock documentation for penny-lib, though it is not as good as it should be. Start at the top and work your way down through each level of the tree.

Using Penny? Let me know...

I develop this software because I find it useful; it's the classic "itch-scratching" kind of thing. So if nobody uses it, I really won't mind. Buf if you do use it, and you want to let me know - even if it's just to say "gnucash, hledger, and Mint are all better, what are you thinking, but there are some interesting ideas buried in here" - then feel free to let me know on Github or by email.