A reliable, user-friendly Plain Text Accounting tool with command line, terminal and web interfaces.
Go to file
Simon Michael 76df6ec88f optimise cacheLedger by using the tree to help calculate account balances
from:

	total time  =        0.14 secs   (7 ticks @ 20 ms)
	total alloc = 275,520,536 bytes  (excludes profiling overheads)

     cacheLedger                                     1   0.0    0.1      42.9       48.6
      sumTransactions                                0   0.0    0.6      28.6       42.5
       isZeroAmount                              13529   0.0    2.0      14.3       39.2
        showAmount                               13529   0.0    7.2      14.3       37.2
         showAmount'                             13529  14.3   29.9      14.3       29.9
         con2tag_Side#                           27232   0.0    0.0       0.0        0.0
       normaliseMixedAmount                       6733   0.0    1.8      14.3        2.7
        con2tag_Side#                              120   0.0    0.0       0.0        0.0
        sumAmountsPreservingPrice                 6803   0.0    0.2      14.3        1.0
         amountop                                13351   0.0    0.4      14.3        0.8
          convertAmountTo                        13351  14.3    0.4      14.3        0.4
           conversionRate                        13351   0.0    0.0       0.0        0.0
      isAccountNamePrefixOf                      25122   0.0    2.0       0.0        2.0

to:

	total time  =        0.08 secs   (4 ticks @ 20 ms)
	total alloc = 168,637,964 bytes  (excludes profiling overheads)

     cacheLedger                                     1   0.0    0.1       0.0       27.1
      sumTransactions                                0   0.0    0.3       0.0       18.8
       isZeroAmount                               3931   0.0    0.9       0.0       17.3
        showAmount                                3931   0.0    3.4       0.0       16.3
         showAmount'                              3931   0.0   12.9       0.0       12.9
         con2tag_Side#                            7884   0.0    0.0       0.0        0.0
       normaliseMixedAmount                       1964   0.0    0.8       0.0        1.3
        con2tag_Side#                               12   0.0    0.0       0.0        0.0
        sumAmountsPreservingPrice                 1970   0.0    0.1       0.0        0.5
         amountop                                 3793   0.0    0.2       0.0        0.4
          convertAmountTo                         3793   0.0    0.2       0.0        0.2
           conversionRate                         3793   0.0    0.0       0.0        0.0
2008-12-05 03:31:45 +00:00
data support tools cleanup 2008-05-26 21:19:21 +00:00
doc/misc show Main module in api docs by default 2008-10-01 09:32:02 +00:00
Ledger optimise cacheLedger by using the tree to help calculate account balances 2008-12-05 03:31:45 +00:00
tools easier options for bench.hs 2008-12-10 20:45:09 +00:00
BalanceCommand.hs work towards a fix for zero-balance root account eliding 2009-01-17 18:07:20 +00:00
bench.tests streamline bench tests, generate test ledgers 2009-01-17 18:40:27 +00:00
hledger.cabal add UICommand to other-modules 2009-01-17 17:34:37 +00:00
hledger.hs fix reading from stdin, except for ui command 2009-01-17 19:23:21 +00:00
Ledger.hs gather date stuff together, FuzzyDate -> SmartDate 2008-11-27 00:35:00 +00:00
LICENSE add LICENSE 2008-10-01 07:52:07 +00:00
Makefile fix release target 2009-01-17 23:22:21 +00:00
NEWS move that ui feature note 2009-01-17 21:12:18 +00:00
NOTES notes 2009-01-17 21:03:25 +00:00
Options.hs bump version to 0.3 2009-01-17 17:33:47 +00:00
PrintCommand.hs --options-anywhere to use ^ for negative patterns and permit options anywhere in command-line 2008-11-25 19:29:33 +00:00
README count timelog sessions on the day they end, like ledger, for now 2008-12-05 01:16:42 +00:00
RegisterCommand.hs optimise summariseTransactionsInDateSpan like cacheLedger 2008-12-05 03:32:41 +00:00
sample.ledger update sample.ledger 2008-12-05 11:09:09 +00:00
Setup.hs clean up imports whitespace, minimise explicit intra-app import/export declarations for now 2008-10-10 01:53:39 +00:00
Tests.hs make sample ledger more complex to verify a fix 2008-12-05 08:35:52 +00:00
UICommand.hs haddock fixes 2008-12-10 07:56:00 +00:00
Utils.hs a cached ledger now includes the full ledger text, also. 2008-12-10 07:29:08 +00:00

hledger - a ledger-compatible text-based accounting tool
========================================================

Welcome to hledger! 

hledger is a haskell clone of John Wiegley's "ledger" text-based
accounting tool (http://newartisans.com/software/ledger.html).  
It generates ledger-compatible register & balance reports from a plain
text ledger file, and demonstrates a functional implementation of ledger.
For more information, see hledger's home page: http://joyful.com/hledger

Copyright (c) 2007-2009 Simon Michael <simon@joyful.com>
Released under GPL version 3 or later.


Installation
------------
hledger requires GHC. It is known to build with 6.8 and 6.10.
If you have cabal-install, do::

 cabal update
 cabal install hledger

Otherwise, unpack the latest tarball from
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hledger and do::

 runhaskell Setup.hs configure
 runhaskell Setup.hs build
 sudo runhaskell Setup.hs install 

This will complain about any missing libraries, which you can download and
install manually from hackage.haskell.org. (The Build-Depends: in
hledger.cabal has the full package list.)

To get the latest development code do::

 darcs get http://joyful.com/repos/hledger


Examples
--------
Here are some commands to try::

 hledger --help
 hledger -f sample.ledger balance
 export LEDGER=sample.ledger
 hledger -s balance
 hledger register
 hledger reg cash
 hledger reg -- shop
 hledger ui

hledger looks for your ledger file at ~/.ledger by default. To use a different file,
specify it with -f or the LEDGER environment variable.


Features
--------

This version of hledger mimics a subset of ledger 2.6.1, and adds some
features of its own. We currently support: the balance, print, and
register commands, regular ledger entries, multiple commodities, virtual
transactions, account and description patterns, the LEDGER environment
variable, and these options::

   Basic options:
   -h, --help             display summarized help text
   -v, --version          show version information
   -f, --file FILE        read ledger data from FILE
 
   Report filtering:
   -b, --begin DATE       set report begin date
   -e, --end DATE         set report end date
   -p, --period EXPR      report using the given period
   -C, --cleared          consider only cleared transactions
   -R, --real             consider only real (non-virtual) transactions
 
   Output customization:
   -n, --collapse         balance report: no grand total
   -d, --display EXPR     display only transactions matching EXPR (limited support)
   -E, --empty            balance report: show accounts with zero balance
   -s, --subtotal         balance report: show sub-accounts
 
   Commodity reporting:
   -B, --basis, --cost    report cost basis of commodities

   Commands:
   balance  [REGEXP]...   show balance totals for matching accounts
   register [REGEXP]...   show register of matching transactions
   print    [REGEXP]...   print all matching entries

We handle (almost) the full period expression syntax, and simple display
expressions consisting of a date predicate.  Also the following
hledger-specific features are supported::

   ui                     interactive text ui
   --depth=N              balance report: maximum account depth to show
   --options-anywhere     allow options anywhere, use ^ for negative patterns

ledger features not supported
.............................

ledger features not yet supported include: modifier and periodic entries,
!include and other special directives, price history entries, parsing
gnucash files, and the following options::

   Basic options:
   -o, --output FILE      write output to FILE
   -i, --init-file FILE   initialize ledger using FILE (default: ~/.ledgerrc)
       --cache FILE       use FILE as a binary cache when --file is not used
       --no-cache         don't use a cache, even if it would be appropriate
   -a, --account NAME     use NAME for the default account (useful with QIF)
 
   Report filtering:
   -c, --current          show only current and past entries (not future)
       --period-sort EXPR sort each report period's entries by EXPR
   -U, --uncleared        consider only uncleared transactions
   -L, --actual           consider only actual (non-automated) transactions
   -r, --related          calculate report using related transactions
       --budget           generate budget entries based on periodic entries
       --add-budget       show all transactions plus the budget
       --unbudgeted       show only unbudgeted transactions
       --forecast EXPR    generate forecast entries while EXPR is true
   -l, --limit EXPR       calculate only transactions matching EXPR
   -t, --amount EXPR      use EXPR to calculate the displayed amount
   -T, --total EXPR       use EXPR to calculate the displayed total
 
   Output customization:
   -n, --collapse         register: collapse entries
   -s, --subtotal         other: show subtotals
   -P, --by-payee         show summarized totals by payee
   -x, --comm-as-payee    set commodity name as the payee, for reporting
   -W, --weekly           show weekly sub-totals
   -M, --monthly          show monthly sub-totals
   -Y, --yearly           show yearly sub-totals
       --dow              show a days-of-the-week report
   -S, --sort EXPR        sort report according to the value expression EXPR
   -w, --wide             for the default register report, use 132 columns
       --head COUNT       show only the first COUNT entries (negative inverts)
       --tail COUNT       show only the last COUNT entries (negative inverts)
       --pager PAGER      send all output through the given PAGER program
   -A, --average          report average transaction amount
   -D, --deviation        report deviation from the average
   -%, --percentage       report balance totals as a percentile of the parent
       --totals           in the "xml" report, include running total
   -j, --amount-data      print only raw amount data (useful for scripting)
   -J, --total-data       print only raw total data
   -y, --date-format STR  use STR as the date format (default: %Y/%m/%d)
   -F, --format STR       use STR as the format; for each report type, use:
       --balance-format      --register-format       --print-format
       --plot-amount-format  --plot-total-format     --equity-format
       --prices-format       --wide-register-format
 
   Commodity reporting:
       --price-db FILE    sets the price database to FILE (def: ~/.pricedb)
   -L, --price-exp MINS   download quotes only if newer than MINS (def: 1440)
   -Q, --download         download price information when needed
   -O, --quantity         report commodity totals (this is the default)
   -V, --market           report last known market value
   -g, --performance      report gain/loss for each displayed transaction
   -G, --gain             report net gain/loss
 
   Commands:
   xml      [REGEXP]...   print matching entries in XML format
   equity   [REGEXP]...   output equity entries for matching accounts
   prices   [REGEXP]...   display price history for matching commodities
   entry DATE PAYEE AMT   output a derived entry, based on the arguments

Other differences
.................

* hledger keeps differently-priced amounts of the same commodity separate at the moment
* hledger refers to the entry's and transaction's "description", ledger calls it "note"
* hledger doesn't require a space before command-line option values
* hledger provides "--cost" as a synonym for "--basis"
* hledger's "weekly" reporting intervals always start on mondays
* hledger shows start and end dates of full intervals, not just the span containing data
* hledger period expressions don't support "biweekly", "bimonthly", or "every N days/weeks/..." 
* hledger always shows timelog balances in hours
* hledger doesn't count an unfinished timelog session