# Release notes ### hledger-install The [hledger installer](download.html#b1.-with-hledger-install) is updated frequently; here are the [latest changes](https://github.com/simonmichael/hledger/commits/master/hledger-install/hledger-install.sh). ## Latest minor release ## 2018/9/30 hledger 1.11 ***Customisable account display order, support for other delimiter-separated formats (eg semicolon-separated), new files and roi commands, fixes *** [hledger](#hledger-1.11-1) | [hledger-ui](#hledger-ui-1.11) | [hledger-web](#hledger-web-1.11) | [hledger-api](#hledger-api-1.11) | [hledger-lib](#hledger-lib-1.11) | [credits](#credits-1.11) ### hledger 1.11 * The default display order of accounts is now influenced by the order of account directives. Accounts declared by account directives are displayed first (top-most), in declaration order, followed by undeclared accounts in alphabetical order. Numeric account codes are no longer used, and are ignored and considered deprecated. So if your accounts are displaying in a weird order after upgrading, and you want them alphabetical like before, just sort your account directives alphabetically. * Account sorting (by name, by declaration, by amount) is now more robust and supported consistently by all commands (accounts, balance, bs..) in all modes (tree & flat, tabular & non-tabular). * close: new --opening/--closing flags to print only the opening or closing transaction * files: a new command to list included files * prices: query arguments are now supported. Prices can be filtered by date, and postings providing transaction prices can also be filtered. * rewrite: help clarifies relation to print --auto ([#745](https://github.com/simonmichael/hledger/issues/745)) * roi: a new command to compute return on investment, based on hledger-irr * test: has more verbose output, more informative failure messages, and no longer tries to read the journal * csv: We use a more robust CSV lib (cassava) and now support non-comma separators, eg --separator ';' (experimental, this flag will probably become a CSV rule) ([#829](https://github.com/simonmichael/hledger/issues/829)) * csv: interpolated field names in values are now properly case insensitive, so this works: fields ...,Transaction_Date,... date %Transaction_Date * journal: D (default commodity) directives no longer break multiplier amounts in transaction modifiers (AKA automated postings) ([#860](https://github.com/simonmichael/hledger/issues/860)) * journal: "Automated Postings" have been renamed to "Transaction Modifiers". * journal: transaction comments in transaction modifier rules are now parsed correctly. ([#745](https://github.com/simonmichael/hledger/issues/745)) * journal: when include files form a cycle, we give an error instead of hanging. * upper-case day/month names in period expressions no longer give an error ([#847](https://github.com/simonmichael/hledger/issues/847), [#852](https://github.com/simonmichael/hledger/issues/852)) ### hledger-ui 1.11 * uses hledger-lib 1.11 ### hledger-web 1.11 * uses hledger-lib 1.11 ### hledger-api 1.11 * uses hledger-lib 1.11 ### hledger-lib 1.11 * compilation now works when locale is unset ([#849](https://github.com/simonmichael/hledger/issues/849)) * all unit tests have been converted from HUnit+test-framework to easytest * doctests now run quicker by default, by skipping reloading between tests. This can be disabled by passing --slow to the doctests test suite executable. * doctests test suite executable now supports --verbose, which shows progress output as tests are run if doctest 0.16.0+ is installed (and hopefully is harmless otherwise). * doctests now support file pattern arguments, provide more informative output. Limiting to just the file(s) you're interested can make doctest start much quicker. With one big caveat: you can limit the starting files, but it always imports and tests all other local files those import. * a bunch of custom Show instances have been replaced with defaults, for easier troubleshooting. These were sometimes obscuring important details, eg in test failure output. Our new policy is: stick with default derived Show instances as far as possible, but when necessary adjust them to valid haskell syntax so pretty-show can pretty-print them (eg when they contain Day values, cf https://github.com/haskell/time/issues/101). By convention, when fields are shown in less than full detail, and/or in double-quoted pseudo syntax, we show a double period (..) in the output. * Amount has a new Show instance. Amount's show instance hid important details by default, and showing more details required increasing the debug level, which was inconvenient. Now it has a single show instance which shows more information, is fairly compact, and is pretty-printable. ghci> usd 1 OLD: Amount {acommodity="$", aquantity=1.00, ..} NEW: Amount {acommodity = "$", aquantity = 1.00, aprice = NoPrice, astyle = AmountStyle "L False 2 Just '.' Nothing..", amultiplier = False} MixedAmount's show instance is unchanged, but showMixedAmountDebug is affected by this change: ghci> putStrLn $ showMixedAmountDebug $ Mixed [usd 1] OLD: Mixed [Amount {acommodity="$", aquantity=1.00, aprice=, astyle=AmountStyle {ascommodityside = L, ascommodityspaced = False, asprecision = 2, asdecimalpoint = Just '.', asdigitgroups = Nothing}}] NEW: Mixed [Amount {acommodity="$", aquantity=1.00, aprice=, astyle=AmountStyle "L False 2 Just '.' Nothing.."}] * Same-line & next-line comments of transactions, postings, etc. are now parsed a bit more precisely (followingcommentp). Previously, parsing no comment gave the same result as an empty comment (a single newline); now it gives an empty string. Also, and perhaps as a consequence of the above, when there's no same-line comment but there is a next-line comment, we'll insert an empty first line, since otherwise next-line comments would get moved up to the same line when rendered. * Hledger.Utils.Test exports HasCallStack * queryDateSpan, queryDateSpan' now intersect date AND'ed date spans instead of unioning them, and docs are clearer. * pushAccount -> pushDeclaredAccount * jaccounts -> jdeclaredaccounts * AutoTransaction.hs -> PeriodicTransaction.hs & TransactionModifier.hs * Hledger.Utils.Debug helpers have been renamed/cleaned up ### credits 1.11 Release contributors: Joseph Weston, Dmitry Astapov, Gaith Hallak, Jakub Zárybnický, Luca Molteni, SpicyCat. ## 2018/6/30 hledger 1.10 ***hledger-web edit/upload/download and permissions, more expressive periodic transactions, more informative parse errors, misc fixes *** ([announcement](https://groups.google.com/forum/#!msg/hledger/SWFV2n6xMQA/Ss78nil8AQAJ)) [project](#project-wide-changes-for-1.10) | [hledger-lib](#hledger-lib-1.10) | [hledger](#hledger-1.10-1) | [hledger-ui](#hledger-ui-1.10) | [hledger-web](#hledger-web-1.10) | [hledger-api](#hledger-api-1.10) | [credits](#credits-1.10) ### project-wide changes for 1.10 * build cleanly with all supported GHC versions again (7.10 to 8.4) * support latest deps * back in Stackage LTS (12.0) ### hledger-lib 1.10 * extensive refactoring and cleanup of parsers and related types and utilities * readJournalFile(s) cleanup, these now use InputOpts * doctests now run a bit faster ([#802](https://github.com/simonmichael/hledger/issues/802)) ### hledger 1.10 * journal: many parse error messages have become more informative, and some now show the source line and error location. * journal: `;tag:` is no longer parsed as a tag named ";tag" ([#655](https://github.com/simonmichael/hledger/issues/655)) * journal: transaction price amounts having their own price amounts is now a parse error * journal: amounts with space as digit group separator and trailing whitespace now parse correctly ([#780](https://github.com/simonmichael/hledger/issues/780)) * journal: in amounts containing digits and a single space, the space is now interpreted as a digit group separator, not a decimal separator ([#749](https://github.com/simonmichael/hledger/issues/749)) * journal: in commodity/format/D directives, the amount must now include a decimal separator. When more precise control is needed over number parsing, our recommended solution is commodity directives. Commodity directives that don't specify the decimal separator leave things ambiguous, increasing the chance of misparsing numbers. In some cases it could cause amounts with a decimal point to be parsed as if with a digit group separator, so 1.234 became 1234. It seems the simple and really only way to do this reliably is to require an explicit decimal point character. Most folks probably do this already. Unfortunately, it makes another potential incompatiblity with ledger and beancount journals. But the error message will be clear and easy to work around. * journal: directives currently have diverse and somewhat tricky semantics, especially with multiple files. The manual now describes their behaviour precisely. * journal: `alias` and `apply account` directives now affect `account` directives ([#825](https://github.com/simonmichael/hledger/issues/825)) * journal: periodic transactions can now have all the usual transaction fields (status mark, code, description, comment), for generating more expressive forecast transactions. * journal: forecast transactions now have the generating period expression attached as a tag named "recur". * journal: periodic transactions now start on the first instance of the recurring date, rather than the day after the last regular transaction ([#750](https://github.com/simonmichael/hledger/issues/750)) * journal: periodic transaction rules now allow period expressions relative to today's date * csv: amount-in/amount-out errors are more detailed * balance: --drop is now ignored when not in flat mode, rather than producing a corrupted report ([#754](https://github.com/simonmichael/hledger/issues/754)) * budget: --drop now preserves the top-level account in --budget reports * register: in CSV output, the code field is now included ([#746](https://github.com/simonmichael/hledger/issues/746)) * smart dates now allow the YYYYMM format, and are better documented * uses hledger-lib 1.10 ### hledger-ui 1.10 * the effect of --value, --forecast, and --anon flags is now preserved on reload ([#753](https://github.com/simonmichael/hledger/issues/753)) * edit-at-transaction-position is now also supported when $EDITOR is neovim * support/require fsnotify 0.3.0.1+ * uses hledger-lib 1.10 ### hledger-web 1.10 * view, add, edit permissions can be set at CLI or by Sandstorm HTTP header * the edit form has been revived, for whole-journal editing * the journal can now be uploaded and downloaded * the e key toggles empty accounts in the sidebar * multiple -f options, and --auto, work again * uses hledger-lib 1.10 ### hledger-api 1.10 * uses hledger-lib 1.10 ### credits 1.10 Release contributors: Alex Chen, Everett Hildenbrandt, Jakub Zárybnický, Nolan Darilek, Dmitry Astapov, Jacob Weisz, Peter Simons, Stephen Morgan, Pavlo Kerestey, Trevor Riles, Léo Gaspard, Mykola Orliuk, Wad, Nana Amfo. ## 2018/3/31 hledger 1.9 ***Report cleanups, normal-positive reports, HTML output, account sort codes, budget improvements. *** ([announcement](https://groups.google.com/forum/#!topic/hledger/DifO6UbeKnU)) Release contributors: Eli Flanagan, Peter Simons, Christoph Nicolai, agander, M Parker, Moritz Kiefer, Mykola Orliuk. [project](#project-wide-changes-for-1.9) | [hledger-lib](#hledger-lib-1.9) | [hledger](#hledger-1.9-1) | [hledger-ui](#hledger-ui-1.9) | [hledger-web](#hledger-web-1.9) | [hledger-api](#hledger-api-1.9) ### project-wide changes for 1.9 * support ghc 8.4, latest deps ### hledger-lib 1.9 * when the system text encoding is UTF-8, ignore any UTF-8 BOM prefix found when reading files. * CompoundBalanceReport amounts are now normally positive. (experimental) ### hledger 1.9 * journal: account directives can define a numeric account code to customize sorting. bal/bs/cf/is will sort accounts by account code, if any, then account name. * journal: support scientific number notation ([#704](https://github.com/simonmichael/hledger/issues/704), [#706](https://github.com/simonmichael/hledger/issues/706)) * csv: reading a CSV file containing no records is no longer an error * cli: when the system text encoding is UTF-8, ignore any UTF-8 BOM prefix found when reading files. (Paypal's new CSV has this BOM prefix, causing a confusing parse error.) * cli: tabular reports no longer have a trailing blank line added. (This allows omitting the ">=0" delimiters in our functional tests, making them easier to read and maintain.) * acc: the accounts command now has --declared and --used flags * bal: the --invert flag flips all signs * bal: --drop now works with CSV output * bal/bs/bse/cf/is: show overall report span in title * bal/bs/bse/cf/is: show short month names as headings in monthly reports * bal/bs/bse/cf/is: these commands can now generate HTML output * bal/bs/is/cf: drop short name and indent fields from multicolumn CSV * bs/bse/cf/is: these, the "financial statement" commands, now show normal income, liability and equity balances as positive numbers. Negative numbers now indicate a contra-balance (eg an overdrawn checking account), a net loss, or a negative net worth. This makes these reports more like conventional financial statements, and easier to read and share with others. (Other commands, like balance, have not changed.) (experimental) * bs/cf/is: always show a tabular report, even with no report interval. Previously you would get a simple borderless report like the original balance command. Less code, fewer bugs. * bs/bse/cf/is: in CSV output, don't repeat the headings row for each subreport * budget: warn that CSV output with bal --budget is unimplemented * budget: bal --budget shows budget goals even with no or zero actual amounts. Makes budget reports more intuitive, at the cost of a temporary hack which may misorder columns in some cases (if actual and budget activity occur in a different range of columns). * budget: --budget uses only periodic txns with the selected interval. Budgets with different interval, eg a daily and weekly budget, are independent. * budget: show mostly fixed-width columns for readability * budget: fix bug where a budget report could include budget goals ending on the day before the report start date (splitSpan issue) * close: the equity command has been renamed to close. It now ignores any begin date (it always closes historical end balances). It also ignores --date2. ### hledger-ui 1.9 * -E/--empty toggles zeroes at startup (with opposite default to cli) ### hledger-web 1.9 * -E/--empty toggles zeroes at startup (with opposite default to cli) ### hledger-api 1.9 ## 2017/12/31 hledger 1.5 *** *** ([announcement](https://groups.google.com/forum/#!topic/hledger/CyNifndzZxk)) Release contributors: Dmitry Astapov, Mykola Orliuk, Eli Flanagan, Elijah Caine, Sam Jeeves, Matthias Kauer, Hans-Peter Deifel, Mick Dekkers, Nadrieril, Alvaro Fernando García. [project](#project-wide-changes-for-1.5) | [hledger-lib](#hledger-lib-1.5) | [hledger](#hledger-1.5-1) | [hledger-ui](#hledger-ui-1.5) | [hledger-web](#hledger-web-1.5) | [hledger-api](#hledger-api-1.5) ### project-wide changes for 1.5 * remove upper bounds on all but hledger* and base (experimental) It's rare that my deps break their api or that newer versions must be avoided, and very common that they release new versions which I must tediously and promptly test and release hackage revisions for or risk falling out of stackage. Trying it this way for a bit. ### hledger-lib 1.5 * -V/--value uses today's market prices by default, not those of last transaction date. [#683](https://github.com/simonmichael/hledger/issues/683), [#648](https://github.com/simonmichael/hledger/issues/648)) * csv: allow balance assignment (balance assertion only, no amount) in csv records (Nadrieril) * journal: allow space as digit group separator character, [#330](https://github.com/simonmichael/hledger/issues/330) (Mykola Orliuk) * journal: balance assertion errors now show line of failed assertion posting, [#481](https://github.com/simonmichael/hledger/issues/481) (Sam Jeeves) * journal: better errors for directives, [#402](https://github.com/simonmichael/hledger/issues/402) (Mykola Orliuk) * journal: better errors for included files, [#660](https://github.com/simonmichael/hledger/issues/660) (Mykola Orliuk) * journal: commodity directives in parent files are inherited by included files, [#487](https://github.com/simonmichael/hledger/issues/487) (Mykola Orliuk) * journal: commodity directives limits precision even after -B, [#509](https://github.com/simonmichael/hledger/issues/509) (Mykola Orliuk) * journal: decimal point/digit group separator chars are now inferred from an applicable commodity directive or default commodity directive. [#399](https://github.com/simonmichael/hledger/issues/399), [#487](https://github.com/simonmichael/hledger/issues/487) (Mykola Orliuk) * journal: numbers are parsed more strictly (Mykola Orliuk) * journal: support Ledger-style automated postings, enabled with --auto flag (Dmitry Astapov) * journal: support Ledger-style periodic transactions, enabled with --forecast flag (Dmitry Astapov) * period expressions: fix "nth day of {week,month}", which could generate wrong intervals (Dmitry Astapov) * period expressions: month names are now case-insensitive (Dmitry Astapov) * period expressions: stricter checking for invalid expressions (Mykola Orliuk) * period expressions: support "every 11th Nov" (Dmitry Astapov) * period expressions: support "every 2nd Thursday of month" (Dmitry Astapov) * period expressions: support "every Tuesday", short for "every th day of week" (Dmitry Astapov) ### hledger 1.5 * --auto adds Ledger-style automated postings to transactions (Dmitry Astapov, Mykola Orliuk) * --forecast generates Ledger-style periodic transactions in the future (Dmitry Astapov, Mykola Orliuk) * -V/--value uses today's market prices by default, not those of last transaction date. [#683](https://github.com/simonmichael/hledger/issues/683), [#648](https://github.com/simonmichael/hledger/issues/648) * add: suggest implied (parent) and declared (by account directives) account names also * bal: --budget shows performance compared to budget goals defined with periodic transactions. Accounts with budget goals are displayed folded (depth-clipped) at a depth matching the budget specification. Unbudgeted accounts are hidden, or with --show-unbudgeted, shown at their usual depth. (Dmitry Astapov) * import: the output of --dry-run is now valid journal format * print: -B shows converted amounts again, as in 1.1, even without -x. [#551](https://github.com/simonmichael/hledger/issues/551) (Mykola Orliuk, Simon Michael) * tag: the first argument now filters tag names, additional arguments filter transactions ([#261](https://github.com/simonmichael/hledger/issues/261)) ### hledger-ui 1.5 * fix help -> view manual (on posix platforms) [#623](https://github.com/simonmichael/hledger/issues/623) * support -V/--value, --forecast, --auto ### hledger-web 1.5 * add form account fields now suggest implied and declared account names also * add form date field now uses a datepicker (Eli Flanagan) * don't write a session file at startup, don't require a writable working directory * support -V/--value, --forecast, --auto ### hledger-api 1.5 ## 2017/9/30 hledger 1.4 ***easy install script, simpler help commands, experimental addon commands now built in, new balancesheetequity/tags commands, new import command for easy CSV merging, print can detect new transactions, balance reports can sort by amount, cli conveniences *** ([announcement](https://groups.google.com/forum/#!topic/hledger/tdtkhchqg9k)) Release contributors: Simon Michael, Nicholas Niro, Hans-Peter Deifel, Jakub Zárybnický, Felix Yan, Mark Hansen, Christian G. Warden, Nissar Chababy, Peter Simons. [project](#project-wide-changes-for-1.4) | [hledger-lib](#hledger-lib-1.4) | [hledger](#hledger-1.4-1) | [hledger-ui](#hledger-ui-1.4) | [hledger-web](#hledger-web-1.4) | [hledger-api](#hledger-api-1.4) ### project-wide changes for 1.4 * update stack configs for the last three GHC versions, add "make test-stackage" for finding stackage build problems, switch to GHC 8.2.1 as default for developer builds * streamline docs page * improve changelog/release notes process * improve makefile help and speed * Added a new installer script for the hledger tools, which aims to dodge common pitfalls and just work. Based on the stack install script, this bash script is cross platform, uses cabal or stack, installs stack and GHC if needed, and installs the latest release of all major hledger packages. See http://hledger.org/download for details. ### hledger-lib 1.4 * add readJournalFile[s]WithOpts, with simpler arguments and support for detecting new transactions since the last read. * query: add payee: and note: query terms, improve description/payee/note docs (Jakub Zárybnický, Simon Michael, [#598](https://github.com/simonmichael/hledger/issues/598), [#608](https://github.com/simonmichael/hledger/issues/608)) * journal, cli: make trailing whitespace significant in regex account aliases Trailing whitespace in the replacement part of a regular expression account alias is now significant. Eg, converting a parent account to just an account name prefix: --alias '/:acct:/=:acct ' * timedot: allow a quantity of seconds, minutes, days, weeks, months or years to be logged as Ns, Nm, Nd, Nw, Nmo, Ny * csv: switch the order of generated postings, so account1 is first. This simplifies things and facilitates future improvements. * csv: show the "creating/using rules file" message only with --debug * csv: fix multiple includes in one rules file * csv: add "newest-first" rule for more robust same-day ordering * deps: allow ansi-terminal 0.7 * deps: add missing parsec lower bound, possibly related to [#596](https://github.com/simonmichael/hledger/issues/596), [fpco/stackage#2835](https://github.com/fpco/stackage/issues/2835) * deps: drop oldtime flag, require time 1.5+ * deps: remove ghc < 7.6 support, remove obsolete CPP conditionals * deps: fix test suite with ghc 8.2 * Fix a bug with -H showing nothing for empty periods ([#583](https://github.com/simonmichael/hledger/issues/583), Nicholas Niro) This patch fixes a bug that happened when using the -H option on a period without any transaction. Previously, the behavior was no output at all even though it should have shown the previous ending balances of past transactions. (This is similar to previously using -H with -E, but with the extra advantage of not showing empty accounts) * allow megaparsec 6 ([#594](https://github.com/simonmichael/hledger/issues/594)) * allow megaparsec-6.1 (Hans-Peter Deifel) * fix test suite with Cabal 2 ([#596](https://github.com/simonmichael/hledger/issues/596)) ### hledger 1.4 * cli: a @FILE argument reads flags & args from FILE, one per line * cli: reorganized commands list, added some new command aliases: accounts: a balance: b print: p, txns register: r * cli: accept -NUM as a shortcut for --depth=NUM (eg: -2) * cli: improve command-line help for --date2 ([#604](https://github.com/simonmichael/hledger/issues/604)) * cli: make --help and -h the same, drop --man and --info for now ([#579](https://github.com/simonmichael/hledger/issues/579)) * help: offers multiple formats, accepts topic substrings. The separate info/man commands have been dropped. help now chooses an appropriate documentation format as follows: - it uses info if available, - otherwise man if available, - otherwise $PAGER if defined, - otherwise less if available, - otherwise it prints on stdout - (and it always prints on stdout when piped). You can override this with the `--info`/`--man`/`--pager`/`--cat` flags. ([#579](https://github.com/simonmichael/hledger/issues/579)) * bal/bs/cf/is: --sort-amount/-S sorts by largest amount instead of account name * bs/cf/is: support --output-file and --output-format=txt|csv The CSV output should be reasonably ok for dragging into a spreadsheet and reformatting. * bal/bs/cf/is: consistent double space between columns, consistent single final blank line. Previously, amounts wider than the column headings would be separated by only a single space. * bs/is: don't let an empty subreport disable the grand totals (fixes [#588](https://github.com/simonmichael/hledger/issues/588)) * cf: exclude asset accounts with ":fixed" in their name (Christian G. Warden, Simon Michael, [#584](https://github.com/simonmichael/hledger/issues/584)) * new balancesheetequity command: like balancesheet but also shows equity accounts (Nicholas Niro) * new import command: adds new transactions seen in one or more input files to the main journal file * print: --new shows only transactions added since last time (saves state in .latest.JOURNALFILE file) * new tags command: lists tags in matched transactions * most addons formerly shipped in bin/ are now builtin commands. These include: check-dates, check-dupes, equity, prices, print-unique, register-match, rewrite. * refactor: new Commands module and subdirectory. Builtin commands are now gathered more tightly in a single module, Hledger.Cli.Commands, facilitating change. The legacy "convert" command has been dropped. * refactor: BalanceView -> CompoundBalanceCommand * deps: drop support for directory < 1.2 * deps: allow ansi-terminal 0.7 * deps: drop oldtime flag, require time 1.5+ * deps: simplify shakespeare bounds * deps: remove ghc < 7.6 support * bs/is: don't let an empty subreport disable the grand totals ([#588](https://github.com/simonmichael/hledger/issues/588)) * allow megaparsec 6 ([#594](https://github.com/simonmichael/hledger/issues/594)) * allow megaparsec-6.1 (Hans-Peter Deifel) * restore upper bounds on hledger packages ### hledger-ui 1.4 * a @FILE argument reads flags & args from FILE, one per line * enable --pivot and --anon options, like hledger CLI ([#474](https://github.com/simonmichael/hledger/issues/474)) (Jakub Zárybnický) * accept -NUM as a shortcut for --depth NUM * deps: allow ansi-terminal 0.7 * deps: drop oldtime flag, require time 1.5+ * allow megaparsec 6 ([#594](https://github.com/simonmichael/hledger/issues/594), Simon Michael, Hans-Peter Deifel) * allow megaparsec-6.1 (Hans-Peter Deifel) * allow vty 5.17 (Felix Yan) * allow brick 0.24 * restore upper bounds on hledger packages ### hledger-web 1.4 * a @FILE argument reads flags & args from FILE, one per line * enable --pivot and --anon options, like hledger CLI ([#474](https://github.com/simonmichael/hledger/issues/474)) (Jakub Zárybnický) * web: Make "Add transaction" button tabbable ([#430](https://github.com/simonmichael/hledger/issues/430)) (Jakub Zárybnický) * accept -NUM as a shortcut for --depth NUM * deps: drop oldtime flag, require time 1.5+, remove ghc < 7.6 support * remove unnecessary bound to satisfy hackage server * allow megaparsec 6 ([#594](https://github.com/simonmichael/hledger/issues/594), Simon Michael, Hans-Peter Deifel) * allow megaparsec-6.1 (Hans-Peter Deifel) * restore upper bounds on hledger packages ### hledger-api 1.4 * api: add support for swagger2 2.1.5+ (fixes [#612](https://github.com/simonmichael/hledger/issues/612)) * require servant-server 0.10+ to fix compilation warning * restore upper bounds on hledger packages ## 2017/6/30 hledger 1.3 ***terminology/UI improvements for the status field, selection/scrolling/movement improvements in hledger-ui, negative amounts shown in red, bugfixes.*** ([announcement](https://groups.google.com/d/msg/hledger/X4iR1wpaq0E/_v5BLQIXAgAJ)) Release contributors: Simon Michael, Mykola Orliuk, Christian G. Warden, Dmitry Astapov, Justin Le, Joe Horsnell, Nicolas Wavrant, afarrow, Carel Fellinger, flip111, David Reaver, Felix Yan, Nissar Chababy, Jan Zerebecki. [project](#project-wide-changes-for-1.3) | [hledger-lib](#hledger-lib-1.3) | [hledger](#hledger-1.3-1) | [hledger-ui](#hledger-ui-1.3) | [hledger-web](#hledger-web-1.3) | [hledger-api](#hledger-api-1.3) ### project-wide changes for 1.3 #### Tools make ghci-prof starts GHCI in profiling mode, enabling stack traces with traceStack make ghci-web now also creates required symlinks make site-reload opens an auto-reloading browser on the latest site html make changelog-draft shows the commits since last tag as org nodes ### hledger-lib 1.3 #### journal format The "uncleared" transaction/posting status (and associated UI flags and keys) has been renamed to "unmarked" to remove ambiguity and confusion. See the issue and linked mail list discussion for more background. ([#564](https://github.com/simonmichael/hledger/issues/564)) #### csv format In CSV conversion rules, assigning to the "balance" field name creates balance assertions ([#537](https://github.com/simonmichael/hledger/issues/537), Dmitry Astapov). Doubled minus signs are handled more robustly (fixes [#524](https://github.com/simonmichael/hledger/issues/524), Nicolas Wavrant, Simon Michael) #### Misc Multiple status: query terms are now OR'd together. ([#564](https://github.com/simonmichael/hledger/issues/564)) Deps: allow megaparsec 5.3. ### hledger 1.3 #### CLI The "uncleared" transaction/posting status, and associated UI flags and keys, have been renamed to "unmarked" to remove ambiguity and confusion. This means that we have dropped the `--uncleared` flag, and our `-U` flag now matches only unmarked things and not pending ones. See the issue and linked mail list discussion for more background. ([#564](https://github.com/simonmichael/hledger/issues/564)) Also the -P short flag has been added for --pending, and the -U/-P/-C flags can be combined. bs/is: fix "Ratio has zero denominator" error ([#535](https://github.com/simonmichael/hledger/issues/535)) bs/is/cf: fix --flat ([#552](https://github.com/simonmichael/hledger/issues/552)) (Justin Le, Simon Michael) bal/bs/is/cf: show negative amounts in red (Simon Michael, Justin Le). These commands now show negative amounts in red, when hledger detects that ANSI codes are supported, (ie when TERM is not "dumb" and stdout is not being redirected or piped). print: show pending mark on postings (fixes [#563](https://github.com/simonmichael/hledger/issues/563)). A pending mark on postings is now displayed, just like a cleared mark. Also there will now be a space between the mark and account name. print: amounts are now better aligned, eg when there are posting status marks or virtual postings. #### Addons prices: add --inverted-costs flag, sort output, increase precision (Mykola Orliuk) rewrite: add support for rewriting multipler postings into different commodities. For example, postings in hours can be used to generate postings in USD. ([#557](https://github.com/simonmichael/hledger/issues/557)) (Christian G. Warden) `make addons` compiles the experimental add-ons. ### hledger-ui 1.3 The register screen now shows transaction status marks. The "uncleared" status, and associated UI flags and keys, have been renamed to "unmarked" to remove ambiguity and confusion. This means that we have dropped the `--uncleared` flag, and our `-U` flag now matches only unmarked things and not pending ones. See the issue and linked mail list discussion for more background. ([#564](https://github.com/simonmichael/hledger/issues/564)) The P key toggles pending mode, consistent with U (unmarked) and C (cleared). There is also a temporary --status-toggles flag for testing other toggle styles; see `hledger-ui -h`. ([#564](https://github.com/simonmichael/hledger/issues/564)) There is now less "warping" of selection when lists change: - When the selected account disappears, eg when toggling zero accounts, the selection moves to the alphabetically preceding item, instead of the first one. - When the selected transaction disappears, eg when toggling status filters, the selection moves to the nearest transaction by date (and if several have the same date, by journal order), instead of the last one. In the accounts and register screens, you can now scroll down further so that the last item need not always be shown at the bottom of the screen. And we now try to show the selected item centered in the following situations: - after moving to the end with Page down/End - after toggling filters/display modes (status, real, historical..) - on pressing the control-l key (this forces a screen redraw, also) - on entering the register screen from the accounts screen (except the first time, a known problem). Items near the top won't be centered because we don't scroll above the top of the list. Emacs movement keys are now supported, as well as VI keys. `CTRL-b/CTRL-f/CTRL-n/CTRL-p` and `hjkl` should work wherever unmodified arrow keys work. In the transaction screen, amounts are now better aligned, eg when there are posting status marks or virtual postings. Deps: allow brick 0.19 ([#575](https://github.com/simonmichael/hledger/issues/575), Felix Yan, Simon Michael) ### hledger-web 1.3 Depends on hledger 1.3. ### hledger-api 1.3 Depends on hledger 1.3. ## 2017/3/31 hledger 1.2 ***new commands list, more powerful balancesheet/incomestatement/cashflow commands, more parseable print output, better --pivot, basic automated postings and periodic transactions support, more and easier addons, bugfixes *** Release contributors: Simon Michael, Mykola Orliuk, Justin Le, Peter Simons, Stefano Rodighiero, Moritz Kiefer, Pia Mancini, Bryan Richter, Steven R. Baker, Hans-Peter Deifel, Joshua Chia, Joshua Kehn, Michael Walker. [project](#project-wide-changes-for-1.2) | [hledger-lib](#hledger-lib-1.2) | [hledger](#hledger-1.2-1) | [hledger-ui](#hledger-ui-1.2) | [hledger-web](#hledger-web-1.2) | [hledger-api](#hledger-api-1.2) ### project-wide changes for 1.2 #### Packaging bump stack config to latest lts, bump brick to 0.15.2 to allow hledger-iadd install in hledger dir, update cabal files to latest hpack 0.17.0/stack 1.4 format ([#512](https://github.com/simonmichael/hledger/issues/512)), use more accurate license tag in Cabal file (Peter Simons). #### Finance set up a hledger open collective (http://opencollective.com/hledger), more devguide links to issues with bounties, codefund link, start tracking and publishing project finances (dogfooding!). #### Documentation and website docs page & manual cleanups, begin organising a cookbook, update addons list, move detailed addon docs out of hledger manual, document addons installation, explain print's CSV output, note an issue with balance assertions & multiple -f options, clarify tags, add github stars widget to home and devguide, improve market price docs, ui & web screenshots layout fixes, fix extra whitespace after synopsis in hledger-web text manuals, update accounts directive/budget/rewrite/read-related mockups, drop old org notes. #### Examples consolidate extra/ and data/ in examples/, tarsnap csv rules & reporting example, xpensetracker csv rules. #### Tools Travis CI now checks functional tests/build warnings/addons, temporary workaround for Appveyor CI failures, remove accidentally committed pandoc executables, some pandoc filter fixes, mailmap file to clean up git log authors, bench.hs cleanup, fix gitignore of generated manuals, avoid excessive rebuilding with make [func]test, run functional tests more verbosely, add alex/happy update step to cabal-install.sh. ### hledger-lib 1.2 #### journal format A pipe character can optionally be used to delimit payee names in transaction descriptions, for more accurate querying and pivoting by payee. Eg, for a description like `payee name | additional notes`, the two parts will be accessible as pseudo-fields/tags named `payee` and `note`. Some journal parse errors now show the range of lines involved, not just the first. #### ledger format The experimental `ledger:` reader based on the WIP ledger4 project has been disabled, reducing build dependencies. #### Misc Fix a bug when tying the knot between postings and their parent transaction, reducing memory usage by about 10% ([#483](https://github.com/simonmichael/hledger/issues/483)) (Mykola Orliuk) Fix a few spaceleaks ([#413](https://github.com/simonmichael/hledger/issues/413)) (Moritz Kiefer) Add Ledger.Parse.Text to package.yaml, fixing a potential build failure. Allow megaparsec 5.2 ([#503](https://github.com/simonmichael/hledger/issues/503)) Rename optserror -> usageError, consolidate with other error functions ### hledger 1.2 #### CLI "hledger" and "hledger -h" now print a better organised commands list and general usage message respectively ([#297](https://github.com/simonmichael/hledger/issues/297)). The common reporting flags can now be used anywhere on the command line. Fixed deduplication of addons in commands list. Fixed ugly stack traces in command line parse error messages. The -V/--value flag is now a global report flag, so it works with balance, print, register, balancesheet, incomestatement, cashflow, etc. (Justin Le) The `--pivot` global reporting option replaces all account names with the value of some other field or tag. It has been improved, eg: - we don't add the field/tag name name as a prefix - when pivoting on a tag, if the tag is missing we show a blank (rather than showing mixed tag values and account names) - a pipe character delimiter may be used in descriptions to get a more accurate and useful payee report (`hledger balance --pivot payee`) options cleanups #### Addons Easier installation: move add-ons and example scripts to bin/, convert to stack scripts, add a build script to install all deps, add some functional tests, test add-ons with Travis CI, add installation docs to download page. Improved docs: all addons now contain their own documentation. Most of them (all but hledger-budget) use a new reduced-boilerplate declaration format and can show short (-h) and long (--help) command line help. (Long help is declared with pre and postambles to the generated options help, short help is that truncated at the start of the hledger common flags.) `hledger` now shows a cleaner list of addon commands, showing only the compiled version of an addon when both source and compiled versions are in $PATH. (Addons with .exe extension or no extension are considered compiled. Modification time is not checked, ie, an old compiled addon will override a newer source version. If there are three or more versions of an addon, all are shown. ) New addons added/included: - autosync - example symlink to ledger-autosync - budget - experimental budget reporting command supporting Ledger-like periodic transactions and automated transactions (Mykola Orliuk) - chart - pie-chart-generating prototype, a repackaging of the old hledger-chart tool - check - more powerful balance assertions (Michael Walker) - check-dupes - find accounts sharing the same leaf name (Stefano Rodighiero) - prices - show all market price records (Mykola Orliuk) - register-match - a helper for ledger-autosync's deduplication, finds best match for a transaction description The equity command now always generates a valid journal transaction, handles prices better, and adds balance assertions (Mykola Orliuk). The rewrite command is more robust and powerful (Mykola Orliuk): - in addition to command-line rewrite options, it understands rewrite rules defined in the journal, similar to Ledger's automated transactions ([#99](https://github.com/simonmichael/hledger/issues/99)). Eg: ```journal = ^income (liabilities:tax) *.33 = expenses:gifts budget:gifts *-1 assets:budget *1 ``` - it can generate diff output, allowing easier review of the proposed changes, and safe modification of original journal files (preserving file-level comments and directives). Eg: ``` hledger-rewrite --diff Agency --add-posting 'Expenses:Taxes *0.17' | patch ``` - rewrites can affect multiple postings in a transaction, not just one. - posting-specific dates are handled better #### balance A new --pretty-tables option uses unicode characters for rendering table borders in multicolumn reports ([#522](https://github.com/simonmichael/hledger/issues/522)) (Moritz Kiefer) #### balancesheet/cashflow/incomestatement These commands are now more powerful, able to show multicolumn reports and generally having the same features as the balance command. (Justin Le) balancesheet has always ignored a begin date specified with a `-b` or `-p` option; now it also ignores a begin date specified with a `date:` query. (Related discussion at [#531](https://github.com/simonmichael/hledger/issues/531)) #### print The output of print is now always a valid journal (fixes [#465](https://github.com/simonmichael/hledger/issues/465)) (Mykola Orliuk). print now tries to preserves the format of implicit/explicit balancing amounts and prices, by default. To print with all amounts explicit, use the new `--explicit/-x` flag (fixes [#442](https://github.com/simonmichael/hledger/issues/442)). (Mykola Orliuk) Don't lose the commodity of zero amounts/zero balance assertions (fixes [#475](https://github.com/simonmichael/hledger/issues/475)) (Mykola Orliuk) #### Misc Fix a regression in the readability of option parsing errors ([#478](https://github.com/simonmichael/hledger/issues/478)) (Hans-Peter Deifel) Fix an example in Cli/Main.hs (Steven R. Baker) Allow megaparsec 5.2 ([#503](https://github.com/simonmichael/hledger/issues/503)) ### hledger-ui 1.2 Fix a pattern match failure when pressing E on the transaction screen (fixes [#508](https://github.com/simonmichael/hledger/issues/508)) Accounts with ? in name had empty registers (fixes [#498](https://github.com/simonmichael/hledger/issues/498)) (Bryan Richter) Allow brick 0.16 (Joshua Chia) and brick 0.17/vty 0.15 (Peter Simons) Allow megaparsec 5.2 (fixes [#503](https://github.com/simonmichael/hledger/issues/503)) Allow text-zipper 0.10 ### hledger-web 1.2 Accounts with ? in name had empty registers (fixes [#498](https://github.com/simonmichael/hledger/issues/498)) (Bryan Richter) Allow megaparsec 5.2 (fixes [#503](https://github.com/simonmichael/hledger/issues/503)) ## 2016/12/31 hledger 1.1 ***more robust file format detection, integration of WIP ledger4 parser, balance assignments, hledger-ui --watch, hledger-iadd integration, bugfixes *** Release contributors: Simon Michael, Johannes Gerer, Mykola Orliuk, Shubham Lagwankar. [project-wide](#project-wide-changes-for-1.1) | [hledger-lib](#hledger-lib-1.1) | [hledger](#hledger-1.1-1) | [hledger-ui](#hledger-ui-1.1) | [hledger-web](#hledger-web-1.1) | [hledger-api](#hledger-api-1.1) ### project-wide changes for 1.1 #### misc - don't show stack trace details in errors - more predictable [file format detection](/hledger.html#input-files) When we don't recognise a file's extension, instead of choosing a subset of readers to try based on content sniffing, now we just try them all. Also, this can be overridden by prepending the reader name and a colon to the file path (eg timedot:file.dat, csv:-). - avoid creating junk CSV rules files when trying alternate readers. We now create it only after successfully reading a file as CSV. - improvements to [-B](/journal.html#transaction-prices) and [-V](/hledger.html#market-value) docs: clearer descriptions, more linkage ([#403](http://bugs.hledger.org/403)) ### hledger-lib 1.1 #### journal format - [balance assignments](/journal.html#balance-assignments) are now supported ([#438](http://bugs.hledger.org/438), [#129](http://bugs.hledger.org/129), [#157](http://bugs.hledger.org/157), [#288](http://bugs.hledger.org/288)) This feature also brings a slight performance drop (~5%); optimisations welcome. - also recognise `*.hledger` files as hledger journal format #### ledger format - use ledger-parse from the ledger4 project as an alternate reader for C++ Ledger journals The idea is that some day we might get better compatibility with Ledger files this way. Right now this reader is not very useful and will be used only if you explicitly select it with a `ledger:` prefix. It parses transaction dates, descriptions, accounts and amounts, and ignores everything else. Amount parsing is delegated to hledger's journal parser, and malformed amounts might be silently ignored. This adds at least some of the following as new dependencies for hledger-lib: parsers, parsec, attoparsec, trifecta. #### misc - update base lower bound to enforce GHC 7.10+ hledger-lib had a valid install plan with GHC 7.8, but currently requires GHC 7.10 to compile. Now we require base 4.8+ everywhere to ensure the right GHC version at the start. - Hledger.Read api cleanups - rename dbgIO to dbg0IO, consistent with dbg0, and document a bug in dbg*IO - make readJournalFiles [f] equivalent to readJournalFile f ([#437](http://bugs.hledger.org/437)) - more general parser types enabling reuse outside of IO ([#439](http://bugs.hledger.org/439)) ### hledger 1.1 #### balance - with -V, don't ignore market prices in the future ([#453](http://bugs.hledger.org/453), [#403](http://bugs.hledger.org/403)) - with -V and multiple same-date market prices, use the last parsed not the highest price ([#403](http://bugs.hledger.org/403)) #### misc - fix non-existent "oldtime" dependency ([#431](http://bugs.hledger.org/431)) - [hledger-equity.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-equity.hs) now generates valid journal format when there are multiple commodities ### hledger-ui 1.1 - with [--watch](/hledger-ui.html#options), the display updates automatically to show file or date changes hledger-ui --watch will reload data when the journal file (or any included file) changes. Also, when viewing a current standard period (ie this day/week/month/quarter/year), the period will move as needed to track the current system date. - the [--change](/hledger-ui.html#options) flag shows period changes at startup instead of historical ending balances - the A key runs the hledger-iadd tool, if installed - always reload when g is pressed Previously it would check the modification time and reload only if it looked newer than the last reload. - mark hledger-ui as "stable" - allow brick 0.15, vty 5.14, text-zipper 0.9 ### hledger-web 1.1 - add [--host](/hledger-web.html#options) option ([#429](http://bugs.hledger.org/429)) This came up in the context of Docker, but it seems it wasn't possible for hledger-web to serve remote clients directly (without a proxy) because of 127.0.0.1 being hardcoded. That can now be changed with --host=IPADDR. Also, the default base url uses this address rather than a hard-coded "localhost". - rename --server to --serve The --server flag sounded too close in meaning to --host so I've renamed it to --serve. The old spelling is still accepted, but deprecated and will be removed in the next release. ### hledger-api 1.1 - serves on 127.0.0.1 by default, [--host](/hledger-api.html#options) option added ([#432](http://bugs.hledger.org/432)) Consistent with hledger-web: serves only local requests by default, use --host=IPADDR to change this. - fixed the version string in command-line help and swagger info ## 2016/10/26 hledger 1.0 ***More hledger-ui features, better hledger-web layout, new hledger-api server, new timedot format, --pivot & --anon, reorganized multi-format docs, built-in help. *** ([announcement](https://groups.google.com/d/topic/hledger/WgdTy3-a6sc/discussion)) Release contributors: Simon Michael, Dominik Süß, Thomas R. Koll, Moritz Kiefer, jungle-boogie, Sergei Trofimovich, Malte Brandy, Sam Doshi, Mitchell Rosen, Hans-Peter Deifel, Brian Scott, and Andrew Jones. [project-wide](#project-wide-changes-for-1.0) | [hledger-lib](#hledger-lib-1.0) | [hledger](#hledger-1.0-1) | [hledger-ui](#hledger-ui-1.0) | [hledger-web](#hledger-web-1.0) | [hledger-api](#hledger-api-1.0) ### project-wide changes for 1.0 #### misc - added GHC 8 support, dropped GHC 7.6 and 7.8 support. GHC 7.8 support could be restored with small code changes and a maintainer. - a cabal.project file has been added (Moritz Kiefer) - use hpack for maintaining cabal files ([#371](http://bugs.hledger.org/371)). Instead of editing cabal files directly, we now edit the less verbose and less redundant package.yaml files and let stack (or hpack) update the cabal files. We commit both the .yaml and .cabal files. - clean up some old cabal flags - tools/simplebench has been spun off as the [quickbench](http://hackage.haskell.org/package/quickbench) package. - add Appveyor CI builds, provide more up-to-date Windows binaries - extra: add a bunch of CSV rules examples #### docs - the website is simpler, clearer, and more mobile-friendly. Docs are now collected on a single page and organised by type: getting started, reference, more. - reference docs have been split into one manual for each executable and file format. This helps with maintenance and packaging and also should make it easier to see what's available and to read just what you need. - manuals are now provided in html, plain text, man and info formats generated from the same source by a new Shake-based docs build system. ([#292](http://bugs.hledger.org/292)) - versioned manuals are provided on the website, covering recent releases and the latest dev version ([#385](http://bugs.hledger.org/385), [#387](http://bugs.hledger.org/387)) - manuals are built in to the hledger executables, allowing easy offline reading on all platforms. PROG -h shows PROG's command-line usage PROG --help shows PROG's manual (fixed width) PROG --man shows PROG's manual with man (formatted/paged) PROG --info shows PROG's manual with info (hypertext) hledger help [TOPIC] shows any manual hledger man [TOPIC] shows any manual with man hledger info [TOPIC] shows any manual with info - the general and reporting options are now listed in all executable manuals. We assume any of them which are unsupported are harmlessly ignored. - demo.hledger.org is using beancount's example journal. This is the somewhat realistic example journal from the beancount project, tweaked for hledger. - minor copyedits (jungle-boogie) #### cli - parsing multiple input files is now robust. When multiple -f options are provided, we now parse each file individually rather than just concatenating them, so they can have different formats ([#320](http://bugs.hledger.org/320)). Note this also means that directives (like \`Y\` or \`alias\`) no longer carry over from one file to the next. - I has been added as the short flag for --ignore-assertions (this is different from Ledger's CLI, but useful for hledger-ui). - parsing an argument-less --debug option is more robust ### hledger-lib 1.0 #### timedot format - new "timedot" format for retroactive/approximate time logging. Timedot is a plain text format for logging dated, categorised quantities (eg time), supported by hledger. It is convenient for approximate and retroactive time logging, eg when the real-time clock-in/out required with a timeclock file is too precise or too interruptive. It can be formatted like a bar chart, making clear at a glance where time was spent. #### timeclock format - renamed "timelog" format to "timeclock", matching the emacs package - sessions can no longer span file boundaries (unclocked-out sessions will be auto-closed at the end of the file). - transaction ids now count up rather than down ([#394](http://bugs.hledger.org/394)) - timeclock files no longer support default year directives - removed old code for appending timeclock transactions to journal transactions. A holdover from the days when both were allowed in one file. #### csv format - fix empty field assignment parsing, rule parse errors after megaparsec port ([#407](http://bugs.hledger.org/407)) (Hans-Peter Deifel) #### journal format - journal files can now include timeclock or timedot files ([#320](http://bugs.hledger.org/320)) (but not yet CSV files). - fixed an issue with ordering of same-date transactions included from other files - the "commodity" directive and "format" subdirective are now supported, allowing full control of commodity style ([#295](http://bugs.hledger.org/295)) The commodity directive's format subdirective can now be used to override the inferred style for a commodity, eg to increase or decrease the precision. This is at least a good workaround for [#295](http://bugs.hledger.org/295). - Ledger-style "apply account"/"end apply account" directives are now used to set a default parent account. - the Ledger-style "account" directive is now accepted (and ignored). - bracketed posting dates are more robust ([#304](http://bugs.hledger.org/304)) Bracketed posting dates were fragile; they worked only if you wrote full 10-character dates. Also some semantics were a bit unclear. Now they should be robust, and have been documented more clearly. This is a legacy undocumented Ledger syntax, but it improves compatibility and might be preferable to the more verbose "date:" tags if you write posting dates often (as I do). Internally, bracketed posting dates are no longer considered to be tags. Journal comment, tag, and posting date parsers have been reworked, all with doctests. - balance assertion failure messages are clearer - with --debug=2, more detail about balance assertions is shown. #### misc - file parsers have been ported from Parsec to Megaparsec \o/ ([#289](http://bugs.hledger.org/289), [#366](http://bugs.hledger.org/366)) (Alexey Shmalko, Moritz Kiefer) - most hledger types have been converted from String to Text, reducing memory usage by 30%+ on large files - file parsers have been simplified for easier troubleshooting ([#275](http://bugs.hledger.org/275)). The journal/timeclock/timedot parsers, instead of constructing opaque journal update functions which are later applied to build the journal, now construct the journal directly by modifying the parser state. This is easier to understand and debug. It also rules out the possibility of journal updates being a space leak. (They weren't, in fact this change increased memory usage slightly, but that has been addressed in other ways). The ParsedJournal type alias has been added to distinguish "being-parsed" journals and "finalised" journals. - file format detection is more robust. The Journal, Timelog and Timedot readers' detectors now check each line in the sample data, not just the first one. I think the sample data is only about 30 chars right now, but even so this fixed a format detection issue I was seeing. Also, we now always try parsing stdin as journal format (not just sometimes). - all file formats now produce transaction ids, not just journal ([#394](http://bugs.hledger.org/394)) - git clone of the hledger repo on windows now works ([#345](http://bugs.hledger.org/345)) - added missing benchmark file ([#342](http://bugs.hledger.org/342)) - our stack.yaml files are more compatible across stack versions ([#300](http://bugs.hledger.org/300)) - use [newer file-embed](https://github.com/snoyberg/file-embed/issues/18) to fix ghci working directory dependence - report more accurate dates in account transaction report when postings have their own dates (affects hledger-ui and hledger-web registers). The newly-named "transaction register date" is the date to be displayed for that transaction in a transaction register, for some current account and filter query. It is either the transaction date from the journal ("transaction general date"), or if postings to the current account and matched by the register's filter query have their own dates, the earliest of those posting dates. - simplify account transactions report's running total. The account transactions report used for hledger-ui and -web registers now gives either the "period total" or "historical total", depending strictly on the --historical flag. It doesn't try to indicate whether the historical total is the accurate historical balance (which depends on the user's report query). - reloading a file now preserves the effect of options, query arguments etc. - reloading a journal should now reload all included files as well. - the Hledger.Read.\* modules have been reorganised for better reuse. Hledger.Read.Utils has been renamed Hledger.Read.Common and holds low-level parsers & utilities; high-level read utilities are now in Hledger.Read. - clarify amount display style canonicalisation code and terminology a bit. Individual amounts still have styles; from these we derive the standard "commodity styles". In user docs, we might call these "commodity formats" since they can be controlled by the "format" subdirective in journal files. - Journal is now a monoid - expandPath now throws a proper IO error - more unit tests, start using doctest ### hledger 1.0 #### add - suggest only one commodity at a time as default amount ([#383](http://bugs.hledger.org/383)) (since we currently can't input more than one at a time) #### balance - added --change flag for consistency - H/--historical now also affects single-column balance reports with a start date ([#392](http://bugs.hledger.org/392)). This has the same effect as just omitting the start date, but adds consistency. - in CSV output, render amounts in one-line format ([#336](http://bugs.hledger.org/336)) #### balancesheet - fix an infinite loop ([#393](http://bugs.hledger.org/393)) #### print - in CSV output, fix and rename the transaction id field #### register - fix a sorting regression with --date2 ([#326](http://bugs.hledger.org/326)) - --average/-A is now affected by --historical/-H - added --cumulative flag for consistency - in CSV output, include the transaction id and rename the total field ([#391](http://bugs.hledger.org/391)) #### stats - fixed an issue with ordering of include files #### misc - --pivot option added, groups postings by tag instead of account ([#323](http://bugs.hledger.org/323)) (Malte Brandy) - --anon option added, obfuscates account names and descriptions ([#265](http://bugs.hledger.org/265)) (Brian Scott) (Only affects the hledger tool, for now.) - try to clarify balance/register's various report modes, kinds of "balance" displayed, and related options and language. - with multiple --change/--cumulative/--historical flags, use the last one instead of complaining - don't add the "d" suffix when displaying day periods - stack-ify extra/hledger-rewrite.hs ### hledger-ui 1.0 #### accounts screen - at depth 0, show accounts on one "All" line and show all transactions in the register - 0 now sets depth limit to 0 instead of clearing it - always use --no-elide for a more regular accounts tree #### register screen - registers can now include/exclude subaccount transactions. The register screen now includes subaccounts' transactions if the accounts screen was in tree mode, or when showing an account which was at the depth limit. Ie, it always shows the transactions contributing to the balance displayed on the accounts screen. As on the accounts screen, F toggles between tree mode/subaccount txns included by default and flat mode/subaccount txns excluded by default. (At least, it does when it would make a difference.) - register transactions are filtered by realness and status ([#354](http://bugs.hledger.org/354)). Two fixes for the account transactions report when --real/--cleared/real:/status: are in effect, affecting hledger-ui and hledger-web: 1. exclude transactions which affect the current account via an excluded posting type. Eg when --real is in effect, a transaction posting to the current account with only virtual postings will not appear in the report. 2. when showing historical balances, don't count excluded posting types in the starting balance. Eg with --real, the starting balance will be the sum of only the non-virtual prior postings. This is complicated and there might be some ways to confuse it still, causing wrongly included/excluded transactions or wrong historical balances/running totals (transactions with both real and virtual postings to the current account, perhaps ?) - show more accurate dates when postings have their own dates. If postings to the register account matched by the register's filter query have their own dates, we show the earliest of these as the transaction date. #### misc - H toggles between showing "historical" or "period" balances ([#392](http://bugs.hledger.org/392)). By default hledger-ui now shows historical balances, which include transactions before the report start date (like hledger balance --historical). Use the H key to toggle to "period" mode, where balances start from 0 on the report start date. - shift arrow keys allow quick period browsing - shift-down narrows to the next smaller standard period (year/quarter/month/week/day), shift-up does the reverse - when narrowed to a standard period, shift-right/left moves to the next/previous period - \`t\` sets the period to today. - a runs the add command - E runs $HLEDGERUIEDITOR or $EDITOR or a default editor (vi) on the journal file. When using emacs or vi, if a transaction is selected the cursor will be positioned at its journal entry. - / key sets the filter query; BACKSPACE/DELETE clears it - Z toggles display of zero items (like --empty), and they are shown by default. -E/--empty is now the default for hledger-ui, so accounts with 0 balance and transactions posting 0 change are shown by default. The Z key toggles this, entering "nonzero" mode which hides zero items. - R toggles inclusion of only real (non-virtual) postings - U toggles inclusion of only uncleared transactions/postings - I toggles balance assertions checking, useful for troubleshooting - vi-style movement keys are now supported (for help, you must now use ? not h) ([#357](http://bugs.hledger.org/357)) - ESC cancels minibuffer/help or clears the filter query and jumps to top screen - ENTER has been reserved for later use - reloading now preserves any options and modes in effect - reloading on the error screen now updates the message rather than entering a new error screen - the help dialog is more detailed, includes the hledger-ui manual, and uses the full terminal width if needed - the header/footer content is more efficient; historical/period and tree/flat modes are now indicated in the footer - date: query args on the command line now affect the report period. A date2: arg or --date2 flag might also affect it (untested). - hledger-ui now uses the quicker-building microlens ### hledger-web 1.0 #### ui - use full width on large screens, hide sidebar on small screens, more standard bootstrap styling ([#418](http://bugs.hledger.org/418), [#422](http://bugs.hledger.org/422)) (Dominik Süß) - show the sidebar by default ([#310](http://bugs.hledger.org/310)) - fix the add link's tooltip - when the add form opens, focus the first field ([#338](http://bugs.hledger.org/338)) - leave the add form's date field blank, avoiding a problem with tab clearing it ([#322](http://bugs.hledger.org/322)) - use transaction id instead of date in transaction urls ([#308](http://bugs.hledger.org/308)) (Thomas R. Koll) - after following a link to a transaction, highlight it (Thomas R. Koll) - misc. HTML/CSS/file cleanups/fixes (Thomas R. Koll) #### misc - startup is more robust ([#226](http://bugs.hledger.org/226)). Now we exit if something is already using the specified port, and we don't open a browser page before the app is ready. - termination is more robust, avoiding stray background threads. We terminate the server thread more carefully on exit, eg on control-C in GHCI. - more robust register dates and filtering in some situations (see hledger-ui notes) - reloading the journal preserves options, arguments in effect ([#314](http://bugs.hledger.org/314)). The initial query specified by command line arguments is now preserved when the journal is reloaded. This does not appear in the web UI, it's like an invisible extra filter. - show a proper not found page on 404 - document the special \`inacct:\` query ([#390](http://bugs.hledger.org/390)) ### hledger-api 1.0 #### misc - new hledger-api tool: a simple web API server with example clients ([#316](http://bugs.hledger.org/316)) - start an Angular-based API example client ([#316](http://bugs.hledger.org/316)) (Thomas R. Koll) ## 2015/10/30 hledger 0.27 ***New curses-style interface, market value reporting, wide characters, fast regex aliases, man pages*** ([announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/1267)) Release contributors: Simon Michael, Carlos Lopez-Camey. **hledger 0.27:** Account aliases: - Regular expression account aliases are now fast enough that you can use lots of them without slowing things down. They now take O(aliases x accounts) time, instead of O(aliases x transactions); also, regular expressions are no longer recompiled unnecessarily. Documentation: - The hledger packages now have man pages, based on the current user manual, thanks to the mighty pandoc ([#282](http://bugs.hledger.org/282)). Journal format: - Dates must now begin with a digit (not /, eg). - The comment directive longer requires an end comment, and will extend to the end of the file(s) without it. Command-line interface: - Output (balance reports, register reports, print output etc.) containing wide characters, eg chinese/japanese/korean characters, should now align correctly, when viewed in apps and fonts that show wide characters as double width ([#242](http://bugs.hledger.org/242)). - The argument for --depth or depth: must now be positive. add: - Journal entries are now saved with all amounts explicit, to avoid losing price info ([#283](http://bugs.hledger.org/283)). - Fixed a bug which sometimes (when the same letter pair was repeated) caused it not to pick the most similar past transaction for defaults. balance: - There is now a -V/--value flag to report current market value (as in Ledger). It converts all reported amounts using their "default market price". "Market price" is the new name for "historical prices", defined with the P directive. The default market price for a commodity is the most recent one found in the journal on or before the report end date. Unlike Ledger, hledger's -V uses only the market prices recorded with P directives; it does not use the transaction prices recorded as part of posting amounts. Using both -B and -V at the same time is possible. - Fixed a bug in amount normalization which caused amount styles (commodity symbol placement, decimal point character, etc.) to be lost in certain cases ([#230](http://bugs.hledger.org/230), [#276](http://bugs.hledger.org/276)). - The balance command's --format option can now adjust the rendering style of multi-commodity amounts, if you begin the format string with one of: %_ - renders amounts on multiple lines, bottom-aligned (the default) %^ - renders amounts on multiple lines, top-aligned %, - renders amounts on one line, comma-separated - The balance report's final total (and the line above it) now adapt themselves to a custom --format. print: - The --match option prints the journal entry that best matches a description (ie whose description field is most similar to the value given, and if there are several equally similar, the most recent). This was originally an add-on I used to guess account names for ledger-autosync. It's nice for quickly looking up a recent transaction from a guessed or partial description. - print now always right-aligns the amounts in an entry, even when they are wider than 12 characters. (If there is a price, it's considered part of the amount for right-alignment.) register: - Amount columns now resize automatically, using more space if it's needed and available. **hledger-ui 0.27:** - [hledger-ui](manual#ui) is a new curses-style UI, intended to be a standard part of the hledger toolset for all users (except on native MS Windows, where the vty lib is not [yet](https://github.com/coreyoconnor/vty/pull/1) supported). The UI is quite simple, allowing just browsing of accounts and transactions, but it has a number of improvements over the old hledger-vty, which it replaces: - adapts to screen size - handles wide characters - shows multi-commodity amounts on one line - manages cursor and scroll position better - allows depth adjustment - allows --flat toggle - allows --cleared toggle - allows journal reloading - shows a more useful transaction register, like hledger-web - offers multiple color themes - includes some built-in help hledger-ui is built with brick, a new higher-level UI library based on vty, making it relatively easy to grow and maintain. **hledger-web 0.27:** - Fix keyboard shortcut for adding a transaction (Carlos Lopez-Camey) - Clear the form when clicking 'Add a transaction' (just like the shortcut) (Carlos Lopez-Camey) - Disallow -f- (reading from standard input) which currently doesn't work ([#202](http://bugs.hledger.org/202)) - Fix broken links when using --base-url ([#235](http://bugs.hledger.org/235)) - Fix the --file-url option ([#285](http://bugs.hledger.org/285)) - Show fewer "other accounts" in the account register: to reduce clutter in the "other accounts" field, if there are both real and virtual postings to other accounts, show only the accounts posted to by real postings. ## 2015/7/12 hledger 0.26 ***Website & doc updates, account aliases, misc. bugfixes & cleanups, performance.*** Release contributors: Simon Michael, Imuli, Carlos Lopez-Camey, Kyle Marek-Spartz, Rick Lupton, Simon Hengel. **Changes to hledger.org & docs:** - examples everywhere, screenshots, content & style updates - manual: reorganise topics, add some undocumented things, clarify some things - dev guide: more links, put how-tos first, copy diagram from old wiki, update the setup docs **User-visible changes in hledger since 0.25.1:** Account aliases: - Account aliases are once again non-regular-expression-based, by default. (#252) The regex account aliases added in 0.24 tend to trip up people switching between hledger and Ledger. (Also they are currently slow). We now use the old non-regular-expression aliases again, by default; these are unsurprising, useful, and pretty close in functionality to Ledger's aliases. The new regex aliases are still available, but they must now be enclosed in forward slashes. (Ledger effectively ignores these.) Journal format: - We now parse, and also print, journal entries with no postings, as proposed on the mail lists. These are not well-formed General Journal entries/transactions, but on the other hand: Ledger and beancount parse them; if they are parsed, they should be printed; they provide a convenient way to record (and report) non-transaction events; and they permit more gradual introduction and learning of the concepts (so eg a beginner can keep a simple journal before learning about accounts and postings). - Trailing whitespace after a `comment` directive is now ignored. Command-line interface: - The -f/file option may now be used multiple times. This is equivalent to concatenating the input files before running hledger. The add command adds entries to the first file specified. Queries: - real: (no argument) is now a synonym for real:1 - tag: now matches tag names with a regular expression, like most other queries - empty: is no longer supported, as it overlaps a bit confusingly with amt:0. The --empty flag is still available. - You can now match on pending status (#250) A transaction/posting status of ! (pending) was effectively equivalent to * (cleared). Now it's a separate state, not matched by --cleared. The new Ledger-compatible --pending flag matches it, and so does --uncleared. The relevant search query terms are now status:*, status:! and status: (the old status:1 and status:0 spellings are deprecated). Since we interpret --uncleared and status: as "any state except cleared", it's not currently possible to match things which are neither cleared nor pending. activity: - activity no longer excludes 0-amount postings by default. add: - Don't show quotes around the journal file path in the "Creating..." message, for consistency with the subsequent "Adding..." message. balancesheet: - Accounts beginning with "debt" or now also recognised as liabilities. print: - We now limit the display precision of inferred prices. (#262) When a transaction posts to two commodities without specifying the conversion price, we generate a price which makes it balance (cf http://hledger.org/manual.html#prices). The print command showed this with full precision (so that manual calculations with the displayed numbers would look right), but this sometimes meant we showed 255 digits (when there are multiple postings in the commodity being priced, and the averaged unit price is an irrational number). In this case we now set the price's display precision to the sum of the (max) display precisions of the commodities involved. An example: ``` hledger -f- print <<< 1/1 c C 10.00 c C 11.00 d D -320.00 >>> 2015/01/01 c C 10.00 @ D 15.2381 c C 11.00 @ D 15.2381 d D -320.00 >>>=0 ``` There might still be cases where this will show more price decimal places than necessary. - We now show inferred unit prices with at least 2 decimal places. When inferring prices, if the commodities involved have low display precisions, we don't do a good job of rendering accurate-looking unit prices. Eg if the journal doesn't use any decimal places, any inferred unit prices are also displayed with no decimal places, which makes them look wrong to the user. Now, we always give inferred unit prices a minimum display precision of 2, which helps a bit. register: - Postings with no amounts could give a runtime error in some obscure case, now fixed. stats: - stats now supports -o/--outputfile, like register/balance/print. - An O(n^2) performance slowdown has been fixed, it's now much faster on large journals. ``` +--------------------------------------++--------+--------+ | || 0.25 | 0.26 | +======================================++========+========+ | -f data/100x100x10.journal stats || 0.10 | 0.16 | | -f data/1000x1000x10.journal stats || 0.45 | 0.21 | | -f data/10000x1000x10.journal stats || 58.92 | 2.16 | +--------------------------------------++--------+--------+ ``` Miscellaneous: - The June 30 day span was not being rendered correctly; fixed. (#272) - The deprecated shakespeare-text dependency has been removed more thoroughly. - The bench script invoked by "cabal bench" or "stack bench" now runs some simple benchmarks. You can get more accurate benchmark times by running with --criterion. This will usually give much the same numbers and takes much longer. Or with --simplebench, it benchmarks whatever commands are configured in bench/default.bench. This mode uses the first "hledger" executable in $PATH. **User-visible changes in hledger-web since 0.25.1:** - make the j keybinding respect --base-url (fixes #271) - respect command line options (fixes #225) - include the unminified jquery source again (#161) - fix build breakage from #165 (fixes #268) - fix a js error breaking add form in browsers other than firefox (fixes #251) - drop deprecated network-conduit dependency #### 2015/4/29 hledger-web 0.25.1 - support/require base-compat >0.8 (#245) #### 2015/4/29 hledger 0.25.1 - timelog: support the description field (#247) #### 2015/4/29 hledger-lib 0.25.1 - support/require base-compat >0.8 (#245) ## 2015/4/7 hledger 0.25 [announcement](https://groups.google.com/forum/#!topic/hledger/k2Y_NYZGGJw) ***GHC 7.10 compatibility, terminal width awareness, useful averages and totals columns, and a more robust hledger-web add form.*** Release contributors: Simon Michael, Julien Moutinho. **User-visible changes in hledger since 0.24.1:** - GHC 7.10 compatibility ([#239](http://bugs.hledger.org/239)) - On POSIX systems, the register command now uses the full terminal width by default. Specifically, the output width is set from: 1. a --width option 2. or a COLUMNS environment variable (NB: not the same as a bash shell var) 3. or on POSIX (non-windows) systems, the current terminal width 4. or the default, 80 characters. This feature requires the C curses dev libraries, making installation slightly harder. If that's a problem you can disable curses support with a cabal flag: `cabal install -f-curses ...`. - register's --width option now accepts an optional description column width following the overall width (`--width WIDTH[,DESCWIDTH]`). This also sets the account column width, since the available space (WIDTH-41) is divided up between these two columns. Here's a diagram:
``` <--------------------------------- width (W) ----------------------------------> date (10) description (D) account (W-41-D) amount (12) balance (12) DDDDDDDDDD dddddddddddddddddddd aaaaaaaaaaaaaaaaaaa AAAAAAAAAAAA AAAAAAAAAAAA ``` Examples: ``` $ hledger reg # use terminal width on posix $ hledger reg -w 100 # width 100, equal description/account widths $ hledger reg -w 100,40 # width 100, wider description $ hledger reg -w $COLUMNS,100 # terminal width and set description width ``` - balance: new -T/--row-total and -A/--average options In multicolumn balance reports, -T/--row-total now shows a totals column and -A/--average shows an averages column. This helps eg to see monthly average expenses (hledger bal ^expenses -MA). NB our use of -T deviates from Ledger's UI, where -T sets a custom final total expression. - balance: -N is now short for --no-total - balance: fix partially-visible totals row with --no-total A periodic (not using --cumulative or --historical) balance report with --no-total now hides the totals row properly. - journal, csv: comment lines can also start with * As in Ledger. This means you can embed emacs org/outline-mode nodes in your journal file and manipulate it like an outline. **User-visible changes in hledger-web since 0.24.1:** - GHC 7.10 compatibility ([#239](http://bugs.hledger.org/239)) - fix the add form when there are included files ([#234](http://bugs.hledger.org/234)) NB to make this work, the add form now shows the full file path of the main and included journal files. - improve add form validation ([#223](http://bugs.hledger.org/223), [#234](http://bugs.hledger.org/234)) All add form errors are displayed as form errors, not internal server errors, and when there are errors the add form is redisplayed (form inputs are not preserved, currently). - keep the add button right-aligned when pressing ctrl - on the add form #### 2015/3/15 hledger 0.24.1 - timelog: show hours with 2 decimal places, not 1 ([#237](http://bugs.hledger.org/237)) - fix balance accumulation through assertions in several commodities ([#195](http://bugs.hledger.org/195)) - fix rendering of week 52 heading in weekly reports - allow utf8-string-1 ([fpco/stackage/#426](https://github.com/fpco/stackage/issues/426)) #### 2015/3/15 hledger-lib 0.24.1 - fix JournalReader "ctx" compilation warning - add some type signatures in Utils to help make ghci-web #### 2015/1/10 hledger-web 0.24.1 - add missing modules to fix cabal tests ([#232](http://bugs.hledger.org/232)) ## 2014/12/25 hledger 0.24 Release contributors: Simon Michael, Julien Moutinho, Ryan Desfosses, Gergely Risko, Gwern Branwen. ***CSV export, a non-floating point number representation, more powerful account aliases, speedups, and a streamlined web UI.*** **User-visible changes in hledger since 0.23.3:** General: - fix redundant compilation when cabal installing the hledger packages - switch to Decimal for representing amounts ([#118](http://bugs.hledger.org/118)) - report interval headings (eg in balance, register reports) are shown compactly when possible - general speedups. ``` +--------------------------------------------++----------------+--------------+--------+ | || hledger-0.23.3 | hledger-0.24 | ledger | +============================================++================+==============+========+ | -f data/100x100x10.journal balance || 0.05 | 0.03 | 0.01 | | -f data/1000x1000x10.journal balance || 0.34 | 0.21 | 0.04 | | -f data/10000x1000x10.journal balance || 2.72 | 1.48 | 0.19 | | -f data/10000x1000x10.journal balance aa || 3.16 | 1.55 | 0.14 | | -f data/100x100x10.journal register || 0.09 | 0.05 | 0.04 | | -f data/1000x1000x10.journal register || 0.66 | 0.32 | 0.30 | | -f data/10000x1000x10.journal register || 6.27 | 2.77 | 2.80 | | -f data/10000x1000x10.journal register aa || 3.30 | 1.62 | 0.21 | | -f data/100x100x10.journal print || 0.06 | 0.05 | 0.01 | | -f data/1000x1000x10.journal print || 0.42 | 0.25 | 0.04 | | -f data/10000x1000x10.journal print || 3.95 | 2.57 | 0.38 | | -f data/10000x1000x10.journal print aa || 3.23 | 1.56 | 0.14 | | -f data/100x100x10.journal stat || 0.04 | 0.03 | 0.01 | | -f data/1000x1000x10.journal stat || 0.35 | 0.24 | 0.03 | | -f data/10000x1000x10.journal stat || 14.84 | 13.29 | 0.20 | | -f data/10000x1000x10.journal stat aa || 12.08 | 10.16 | 0.17 | +--------------------------------------------++----------------+--------------+--------+ ``` Journal format: - detect decimal point and digit groups more robustly ([#196](http://bugs.hledger.org/196)) - check that transaction dates are followed by whitespace or newline - check that dates use a consistent separator character - balance assertions now are specific to a single commodity, like Ledger ([#195](http://bugs.hledger.org/195)) - support multi-line comments using "comment", "end comment" directives, like Ledger CSV format: - fix: reading CSV data from stdin now works better - the original order of same-day transactions is now usually preserved (if the records appear to be in reverse date order, we reverse them before finally sorting by transaction date) - the rules file include directive is now relative to the current file's directory ([#198](http://bugs.hledger.org/198)) - CSV output is now built in to the balance, print, and register commands, controlled by -O/--output-format (and -o/--output-file, see below). This means that hledger data can be easily exported, eg for spreadsheet reporting or to migrate to a different tool. CLI: - the --width and --debug options now require their argument ([#149](http://bugs.hledger.org/149)) - when an option is repeated, the last value takes precedence ([#219](http://bugs.hledger.org/219)). This is helpful eg for customising your reporting command aliases on the fly. - smart dates (used in -p/-b/-e/date:/date2:) now must use a consistent separator character, and must be parseable to the end - output destination and format selection is now built in to the balance, print and register commands, controlled by -o/--output-file and -O/--output-format options. Notes: -o - means stdout. An output file name suffix matching a supported format will also set the output format, unless overridden by --output-format. Commands' supported output formats are listed in their command-line help. Two formats are currently available: txt (the default) and csv. - balance assertions can be disabled with --ignore-assertions Account aliases: - all matching account aliases are now applied, not just one directive and one option - account aliases now match by case insensitive regular expressions matching anywhere in the account name - account aliases can replace multiple occurrences of the pattern within an account name - an account alias replacement pattern can reference matched groups with \\N Queries: - date:/date2: with a malformed date now reports an error instead of being ignored - amt: now supports >= or <= - clarify status: docs and behaviour; "*" is no longer a synonym for "1" (fixes [#227](http://bugs.hledger.org/227)) balance: - fix: in tree mode, --drop is ignored instead of showing empty account names - a depth limit of 0 now shows summary items with account name "...", instead of an empty report ([#206](http://bugs.hledger.org/206)) - in multicolumn balance reports, -E now also shows posting-less accounts with a non-zero balance during the period (in addition to showing leading & trailing empty columns) - in multicolumn reports, multi-commodity amounts are rendered on one line for better layout ([#186](http://bugs.hledger.org/186)) - multicolumn reports' title now includes the report span register: - runs faster with large output - supports date2:, and date:/date2: combined with --date2, better (fixes [#201](http://bugs.hledger.org/201), [#221](http://bugs.hledger.org/221), [#222](http://bugs.hledger.org/222)) - a depth limit of 0 now shows summary items (see balance) - -A/--average now implies -E/--empty - postings with multi-commodity amounts are now top-aligned, like Ledger **User-visible changes in hledger-web since 0.23.3:** General: - fix: add missing hs/js files to package - the web UI has been streamlined, dropping the raw and entries views and the edit form - the help dialog has been improved - keyboard shortcuts are now available - the sidebar can be toggled open or closed (press s) Journal view: - layout tweaks for less truncation of descriptions and account names Register view: - fix: don't show all zero amounts when searching by account within an account register view - chart improvements: show zero balances with correct commodity; show accurate balance at all dates; show transaction events & tooltips; show zero/today lines & background colors Add form: - parses data more strictly and gives better errors (eg [#194](http://bugs.hledger.org/194)) - allows any number of postings, not just two - after adding a transaction, goes back to the journal - keyboard shortcut (a) allows quick access Dependencies: - allow warp 3\*, wai-handler-launch 3\* - require yesod 1.4* (fixes [#212](http://bugs.hledger.org/212)) - js updated (jquery, bootstrap, flot), added (typeahead, cookie, hotkeys), removed (select2) **API-ish changes in hledger-lib since 0.23.3:** - fix combineJournalUpdates folding order - fix a regexReplaceCI bug - fix a splitAtElement bug with adjacent separators - mostly replace slow regexpr with regex-tdfa (fixes [#189](http://bugs.hledger.org/189)) - use the modern Text.Parsec API - allow transformers 0.4* - regexReplace now supports backreferences - Transactions now remember their parse location in the journal file - export Regexp types, disambiguate CsvReader's similarly-named type - export failIfInvalidMonth/Day (closes [#216](http://bugs.hledger.org/216)) - track the commodity of zero amounts when possible (useful eg for hledger-web's multi-commodity charts) - show posting dates in debug output - more debug helpers #### 2014/9/12 hledger-web 0.23.3 - remove warp, wai-handler-launch upper bounds (fixes [#205](http://bugs.hledger.org/205)) #### 2014/9/12 hledger 0.23.3 - allow text 1.2+ (fixes [#207](http://bugs.hledger.org/207)) #### 2014/5/8 hledger 0.23.2 - register: also fix date sorting of postings ([#184](http://bugs.hledger.org/184)) #### 2014/5/7 hledger 0.23.1 - register: fix a refactoring-related regression that the tests missed: if transactions were not ordered by date in the journal, register could include postings before the report start date in the output. ([#184](http://bugs.hledger.org/184)) - add: don't apply a default commodity to amounts on entry ([#138](http://bugs.hledger.org/138)) - cli: options before the add-on command name are now also passed to it ([#182](http://bugs.hledger.org/182)) - csv: allow the first name in a fields list to be empty ([#178](http://bugs.hledger.org/178)) - csv: don't validate fields count in skipped lines ([#177](http://bugs.hledger.org/177)) ## 2014/5/1 hledger 0.23 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/1028) ***command-line fixes and polish, a new accounts command, and a number of changes to the balance command relating to --depth, --flat, and multicolumn mode, which I find has made it much more useful.*** Changes since 0.22.2: Journal format: - A # (hash) in column 0 is now also supported for starting a top-level journal comment, like Ledger. - The "too many missing amounts" error now reminds about the 2-space rule. - Fix: . (period) is no longer parsed as a valid amount. - Fix: default commodity directives no longer limit the maximum display precision ([#169](http://bugs.hledger.org/169)). - Fix: + before an amount is no longer parsed as part of the commodity ([#181](http://bugs.hledger.org/181)). CLI: - Command-line help cleanups, layout improvements. - Descriptions are shown for known add-ons in the command list. - Command aliases have been simplified. - Add-ons can now have any of these file extensions: none, hs, lhs, pl, py, rb, rkt, sh, bat, com, exe. - Add-ons are displayed without their file extensions when possible. - Add-ons with the same name as a built-in command or alias are ignored. - Fix: add-on detection and invocation now works on windows. - Fix: add-ons with digits in the name are now found. - Fix: add-on arguments containing a single quote now work. - Fix: when -- is used to hide add-on options from the main program, it is no longer passed through as an add-on argument. accounts: - An accounts command has been added, similar to Ledger's, for listing account names in flat or hierarchical mode. add: - Tab completion now works at all prompts, and will insert the default if the input area is empty. - Account and amount defaults are more robust and useful. - Transactions may also be completed by the enter key, when there are no more default postings. - Input prompts are displayed in a different colour when supported. balance: - Balance reports in flat mode now always show exclusive (subaccount-excluding) balances. - Balance reports in flat mode with --depth now aggregate deeper accounts at the depth limit instead of excluding them. - Multicolumn reports in flat mode now support --drop. - Multicolumn balance reports can now show the account hierarchy with --tree. - Multicolumn report start/end dates are adjusted to encompass the displayed report periods, so the first and last periods are "full" and comparable to the others. - Fix: zero-balance leaf accounts below a non-zero-balance parent are no longer always shown ([#170](http://bugs.hledger.org/170)). - Fix: multicolumn reports now support --date2 (cf [#174](http://bugs.hledger.org/174)). balancesheet, cashflow, incomestatement: - These commands now support --flat and --drop. print: - Tag queries (tag:) will now match a transaction if any of its postings match. register: - The --display option has been dropped. To see an accurate running total which includes the prior starting balance, use --historical/-H (like balance). - With a report interval, report start/end dates are adjusted to encompass the displayed periods, so the first and last periods are "full" and comparable to the others. - Fix: --date2 now works with report intervals (fixes [#174](http://bugs.hledger.org/174)). Queries: - The currency/commodity query prefix (sym:) has been renamed to cur:. - Currency/commodity queries are applied more strongly in register and balance reports, filtering out unwanted currencies entirely. Eg hledger balance cur:'\$' now reports only the dollar amounts even if there are multi-currency transactions or postings. - Amount queries like amt:N, amt:N, where N is not 0, now do an unsigned comparison of the amount and N. That is, they compare the absolute magnitude. To do a signed comparison instead, write N with its sign (eg amt:+N, amt:<+N, amt:>-N). - Fix: amount queries no longer give false positives on multi-commodity amounts. Miscellaneous: - Default report dates now derive from the secondary dates when --date2 is in effect. - Default report dates now notice any posting dates outside the transaction dates' span. - Debug output improvements. - New add-on example: extra/hledger-rewrite.hs, adds postings to matched entries. - Compatible with GHC 7.2 ([#155](http://bugs.hledger.org/155)) - GHC 7.8, shakespeare 2 ## 2014/5/1 hledger-web 0.23 Changes since 0.22.8: - The --static-root flag has been renamed to --file-url. - hledger-web now builds with Cabal's default -O, not -O2, so may be a little quicker/less memory-hungry to install. #### 2014/4/29 hledger-web 0.22.8 - allow shakespeare 2.* ([#179](http://bugs.hledger.org/179)) #### 2014/4/17 hledger-web 0.22.7 - add Peter Simons' patch fixing Data.Conduit.Network HostIPv4 error ([#171](http://bugs.hledger.org/171)) #### 2014/4/16 hledger-web 0.22.6 - depend on hledger[-lib] 0.22.2 #### 2014/4/16 hledger 0.22.2 - display years before 1000 with four digits, not three - avoid pretty-show to build with GHC < 7.4 - allow text 1.1, drop data-pprint to build with GHC 7.8.x #### 2014/4/15 hledger-web 0.22.5 - allow http-client 0.3.*, fixing cabal install again with GHC <= 7.6 (not yet 7.8) - use pretty-show only with GHC 7.4+, fixing GHC 7.2 (fixes [#155](http://bugs.hledger.org/155)) - allow warp 2.1, fixing cabal install #### 2014/2/10 hledger-web 0.22.4 * web: include the right unminified version of jquery.url.js (1.1) to avoid js breakage #### 2014/2/10 hledger-web 0.22.3 * web: fix version number reported by --version #### 2014/2/10 hledger-web 0.22.2 New: * web: new option `--static-root` to set the base url for static files Improved: * web: include unminified source of all javascript to help packagers (fixes [#161](http://bugs.hledger.org/161)) * web: work around clang-related build failures with OS X mavericks/XCode 5 * web: allow blaze-html 0.7 (closes [#159](http://bugs.hledger.org/159)) #### 2014/1/6 hledger 0.22.1 - require the latest pretty-show so hledger installation no longer needs an upgraded version of happy, and the docs build on hackage - require regex-tdfa directly instead of regex-compat-tdfa, simplifying Debian packaging ## 2013/12/13 hledger 0.22 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/5333) New: - balance: with a reporting interval (monthly, yearly etc.), the [balance command](manual.html#balance) will now show a multi-column report, showing either the per-period changes in balance (by default), the period ending balances starting from zero (`--cumulative`), or the actual period ending balances (`--historical`). A more detailed specification of the balance command's behaviour has been added to [Hledger.Cli.Balance](http://hackage.haskell.org/package/hledger/docs/Hledger-Cli-Balance.html). - csv: rules files can now include other rules files, useful for factoring out common rules - queries: `sym:REGEXP` matches commodity symbols - register: `--average/-A` shows a running average, like ledger - in period expressions, `-` (hyphen) can be used as a more compact synonym for `from` and `to`. Eg: `-p 2012/12/1-2013/2/1` or `date:aug-`. - the add-on script examples in extra/ have been updated; get the hledger source and add .../hledger/extra/ to your PATH to make them available. They include: - `hledger-accountnames.hs` - print account names - `hledger-balance-csv.hs` - print a balance report as CSV - `hledger-equity.hs` - print an entry matching all account balances (like ledger) - `hledger-print-unique.hs` - print only journal entries unique descriptions - `hledger-register-csv.hs` - print a register report as CSV Improved: - balancesheet: now shows just assets and liabilities, not equity - print: comment positions (same line or next line) are now preserved - queries: `amt` now uses the = operator by default, eg `amt:50` is equivalent to `amt:=50` - command line processing has been overhauled and made more consistent, and now has tests and debug output. More flags now work both before and after COMMAND: `-f`, `--rule-file`, `--alias`, `--help`, `--debug`, `--version`. Command line help, command aliases, API docs and code have been improved. - `--debug` now takes an optional numeric argument to set the debug level higher than 1, for more verbose debug output in a few cases. Fixed: - csv: CSV data containing non-ascii characters is now supported - build with latest versions of dependencies (text, warp, http-conduit etc.) Release contributors: Marko Kocić, Max Bolingbroke, and a big welcome to first-time committer John Wiegley! :) #### 2013/7/10 hledger-web 0.21.3 - drop yesod-platform dependency, it is not worthwhile. The other yesod dependencies are currently without version ranges, so cabal install might require --constraint to restrict them in some cases. #### 2013/6/23 hledger 0.21.3 - csv: fix wrong application of multiple assignments in a conditional block #### 2013/6/4 hledger 0.21.2 - web: fix a build failure #### 2013/6/3 hledger 0.21.1 - web: show proper Y-values in register chart (fixes [#122](http://bugs.hledger.org/122)) - web: avoid trailing commas in register chart values, in case of trouble with IE ## 2013/6/1 hledger 0.21 Bugs fixed: - parsing: don't fail when a csv amount has trailing whitespace (fixes [#113](http://bugs.hledger.org/113)) - web: don't show prices in the accounts sidebar (fixes [#114](http://bugs.hledger.org/114)) - web: show one line per commodity in charts. Needs more polish, but fixes [#109](http://bugs.hledger.org/109). - web: bump yesod-platform dependency to avoid a cabal install failure Journal reading: - balance assertions are now checked after reading a journal web command: - web: support/require yesod 1.2 - web: show zero-balance accounts in the sidebar (fixes [#106](http://bugs.hledger.org/106)) - web: use nicer select2 autocomplete widgets in the add form Documentation and infrastructure: - add basic cabal test suites for hledger-lib and hledger #### 2013/5/4 hledger 0.20.0.1 * web: require at least version 1.1.7 of yesod-core to avoid a potential build error * Update the bug tracker and source repository links on hackage ## 2013/5/1 hledger 0.20 Bugs fixed: * balance: a 0.19 regression which showed wrong total balance with `--flat` has been fixed ([#94](http://bugs.hledger.org/94)) * register: when `--date2` is used, the register is now sorted by the secondary date * web: some missing static & template files have been added to the package, fixing cabal-dev and hackage builds ([#97](http://bugs.hledger.org/97), [#98](http://bugs.hledger.org/98)) * web: some hardcoded static urls have been fixed * Dependencies and code have been updated to support the latest libraries and GHC versions. For now, hledger requires GHC 7.2+ and hledger-web requires GHC 7.4+. Journal reading: - DOS-style line-endings are now also supported in journal and rules files. - `!` is now accepted in the status field as well as `*`, like ledger - The *actual date* and *effective date* terminology has changed to *primary date* and *secondary date*. Use `--date2` to select the secondary date for reports. (`--aux-date` or `--effective` are also accepted for ledger and backwards compatibility). - Per-posting dates are supported, using hledger tags or ledger's posting date syntax - Comment and tag handling has been improved CSV reading: - CSV conversion rules have a simpler, more flexible [syntax](manual.html#csv). Existing rules files will need to be updated manually: - the filename is now `FILE.csv.rules` instead of `FILE.rules` - `FIELD-field N` is now `FIELD %N+1` (or set them all at once with a `fields` rule) - `base-currency` is now `currency` - `base-account` is now `account1` - account-assigning rules: add `if` before the list of regexps, add indented `account2 ` before the account name - parenthesised amounts are parsed as negative Querying: - Use `code:` to match the transaction code (check number) field - Use `amt:` followed by `<`, `=` or `>` and a number N to match amounts by magnitude. Eg `amt:<0` or `amt:=100`. This works only with single-commodity amounts (multi-commodity amounts are always matched). - `tag:` can now match (exact, case sensitive) tag values. Eg `tag:TAG=REGEXP`. add comand: - Transaction codes and comments (which may contain tags) can now be entered, following a date or amount respectively. ([#45](http://bugs.hledger.org/45)) - The current entry may be restarted by entering `<` at any prompt. ([#47](http://bugs.hledger.org/47)) - Entries are displayed and confirmed before they are written to the journal. - Default values may be specified for the first entry by providing them as command line arguments. - Miscellaneous UI cleanups register command: - The `--related`/`-r` flag shows the other postings in each transaction, like ledger. - The `--width`/`-w` option increases or sets the output width. web command: - The web command now also starts a browser, and auto-exits when unused, by default ("local ui mode"). With `--server`, it keeps running and logs requests to the console ("server mode"). - Bootstrap is now used for styling and layout - A favicon is served - The search field is wider - yesod devel is now supported; it uses `$LEDGER_FILE` or `~/.hledger.journal` - the `blaze_html_0_5` build flag has been reversed and renamed to `blaze_html_0_4` Add-ons: - The hledger-interest and hledger-irr commands have been released/updated. - hledger-chart and hledger-vty remain unmaintained and deprecated. Documentation and infrastructure: - The hledger docs and website have been reorganised and updated - Manuals for past releases are provided as well as the latest dev version - hledger has moved from darcs and darcs hub to git and github (!) - The bug tracker has moved from google code to github - Feature requests and project planning are now managed on trello - A build bot builds against multiple GHC versions on each commit Release contributors: - Sascha Welter commissioned register enhancements (--related and --width) - David Patrick contributed a bounty for add enhancements - Joachim Breitner added support for ! in status field - Xinruo Sun provided hledger-web build fixes - Peter Simons provided hledger-web build fixes, and a build bot - Marko Kocić provided hledger-web fixes #### 2012/11/24 hledger-web 0.19.3 * web: fix "Prelude.read: no parse" errors with GHC >= 7.6 * web & lib refactoring ## 2012/11/16 hledger-web 0.19 * builds with yesod 1.1.3 * obeys command-line query options at startup again * the autogenerated session file is now a dot file (.hledger-web_client_session.aes) #### 2012/11/16 hledger 0.19.1 * [87](http://bugs.hledger.org/87): fix an arithmetic and transaction balancing bug with multiple total-priced amounts ( @@ PRICE ) * parsing: ignore ledger-style balance assertions ( = BAL ) and fixed lot price declarations ( {= PRICE} ) ## 2012/10/21 hledger 0.19 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/4190) ***a much faster balance command, and support for the latest GHC and libs.*** * hledger, hledger-lib: support GHC 7.6 and latest cmdargs, haskeline, split * balance report no longer has an O(n^2) slowdown with large numbers of accounts, and is generally more speedy. Benchmark on a 2010 macbook: ``` +-------------------------------------------++--------------+--------------+--------+ | || hledger-0.18 | hledger-0.19 | ledger | +===========================================++==============+==============+========+ | -f data/100x100x10.journal balance || 0.21 | 0.07 | 0.09 | | -f data/1000x1000x10.journal balance || 10.13 | 0.47 | 0.62 | | -f data/1000x10000x10.journal balance || 40.67 | 0.67 | 1.01 | | -f data/10000x1000x10.journal balance || 15.01 | 3.22 | 2.36 | | -f data/10000x1000x10.journal balance aa || 4.77 | 4.40 | 2.33 | +-------------------------------------------++--------------+--------------+--------+ ``` * build version is set with CPP instead of cabal-file-th #### 2012/7/7 hledger 0.18.2 * web: fix compilation error with -fblaze_html_0_5 flag * bump base lower bound to 4.3 to enforce GHC 7 requirement #### 2012/6/29 hledger 0.18.1 * register, print: fix reverse ordering of same-day transactions * balance: respect all query terms, not just acct * combine command-line flags like --depth properly with non-flag query patterns * web: don't auto-create a missing journal file at startup * stats: list included journal files * support tilde (~) in journal and rules file paths * expose more utilities from CsvReader * remove ensureRulesFile debug trace ## 2012/5/29 hledger 0.18 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/3736) * web: hledger-web is now based on yesod 1.0 * web: fix js error breaking second use of add form ([#72](http://bugs.hledger.org/72)) * web: make `yesod devel` work * the command-line now supports a more powerful [query language](manual.html#queries), consistent with the web UI * hledger now fully supports [tags](manual.html#tags) (aka metadata) on both transactions and postings, and querying by tag or tag value * new [commands](manual.html#incomestatement) `incomestatement`, `balancesheet`, and `cashflow` provide basic financial statements under certain conditions * format conversion is now done on demand, and the convert command has been dropped. So instead of `hledger convert FILE.csv` just do `hledger -f FILE.csv print` or any other command. You can also pipe any supported format into `hledger -f- CMD` and hledger will try to do the right thing. * support for GHC 6.12 has been dropped; this release has been tested with GHC 7.0.4, 7.2.2, and 7.4.1 * unicode is now handled properly on all supported GHC versions * API and internal cleanups #### 2012/3/3 hledger-web 0.17.1 * set more upper bounds to fix cabal install issues with latest packages ## 2012/2/1 hledger 0.17 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/3149) ***fixes bugs and updates dependencies*** * support HP 2011.4.0.0 * support and require cmdargs 0.9 * allow non-threaded builds, supporting more debian architectures * parsing: give a clearer error when journal file path contains ~ * parsing: -B/--cost now ignores P historical prices, like ledger * parsing: inferred amounts now use the cost commodity if known, like ledger ([#69](http://bugs.hledger.org/69)) * balance: report differently-priced lots in an account as a single amount, like ledger * web: support and require yesod >= 0.9.4 * web: use the main aeson package again * web: fix a regression with dollar signs in hamlet templates * web: add form allowed blank account names ([#81](http://bugs.hledger.org/81)) * chart, vty: hledger-chart and hledger-vty demoted to non-maintained extras for now #### 2011/10/26 hledger-web 0.16.5 * web: fix a ghc 6.12 incompatibility in Settings.hs #### 2011/10/24 hledger-web 0.16.4 * web: yet another cabal install fix, fix AppConfig name clash #### 2011/10/4 hledger-web 0.16.3 * web: another cabal install fix, disable favicon.ico since it's not easily embeddable #### 2011/10/4 hledger-web 0.16.2 * web: more cabal install fixes (remove bad path, add routes and models) ([#63](http://bugs.hledger.org/63)) #### 2011/10/4 hledger 0.16.1 * parsing: show correct line number for posting parse errors ([#67](http://bugs.hledger.org/67)) * web: declare static files as extra-source-files to fix cabal install ([#63](http://bugs.hledger.org/63)) * web: add a threaded flag for debian ([#68](http://bugs.hledger.org/68)) * web: fewer build warnings by default ## 2011/10/1 hledger 0.16 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/521) ***a stability/bugfix/polish release (which may become the pattern for even-numbered releases in future.)*** * cli: strip the -- when calling add-on commands, so their options work ([#64](http://bugs.hledger.org/64)) * cli: hledger ADDON --version now shows add-on command's version * cli: only the add and web commands auto-create the journal file * cli: give a non-confusing error if LEDGER_FILE contains a literal tilde * add: clearer prompts, more validation, use . to end also * add: use unix line endings consistently, avoiding parse error on windows ([#51](http://bugs.hledger.org/51)) * add: avoid excess whitespace between transactions ([#46](http://bugs.hledger.org/46)) * balance: ledger compatibility fix: don't elide parent accounts with multiple displayed subaccounts * convert: always order converted transactions by date * convert: rename currency -> base-currency, in-field, out-field -> amount-in-field, amount-out-field * convert: give an error, not a zero when date or amount-in-field/amount-out-field parsing fails * register: show more useful range of intervals with --empty and a query pattern * print, web: always show both dates, ignoring --effective ([#42](http://bugs.hledger.org/42)) * web: production builds (the default with cabal) have all web content embedded (dev builds use ./static/) ([#63](http://bugs.hledger.org/63)) * web: update to yesod 0.9 * web: obey at least some of the general reporting options, like --cost * web: adjust the default base url when a custom port is specified * web: prevent an infinite redirect when custom base url has a trailing slash * web: fix "not:'multi word'" patterns * web: hide old title and search form when adding/editing * web: adjust --help to indicate command-line arguments are not expected * web: don't bother running cli unit tests at startup #### 2011/9/12 hledger 0.15.2, hledger-web 0.15.3 * handle multiple filter patterns on the command-line again * don't pass an add-on command's name to it as an extra argument * don't give a confusing error with -f and no command * fix a regression balancing a transaction containing different prices * web: fix journal edit form * web: fix wrong transaction amount in account register with virtual postings * web: fix some invalid html #### 2011/9/2 hledger 0.15.1, hledger-web 0.15.2 * fix a parsec 2 incompatibility * web: add missing Hledger.Web.Options to cabal file * web: tighten up dependencies to reduce build problems ## 2011/9/1 hledger 0.15 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/2748) * hledger's options are now modal, providing better help (using cmdargs) * hledger now lists and runs any hledger-* add-ons found in the user's path * case insensitivity of filter patterns has been fixed * parsing: `alias`/`end aliases` directives, for renaming accounts, are supported, like ledger's but a bit more powerful; also an `--alias` option for renaming on the fly * parsing: the `account` directive now preserves posting type (normal/virtual/balanced virtual) * parsing: the `pop` directive is supported as an alias for `end tag`, like ledger * parsing: `P` (historical price) directives can contain a (ignored) numeric time zone, like ledger * parsing: the leading `!` in directives is now optional and deprecated, like ledger * parsing: entries with a negative amount in the first posting now infer the correct balancing amount * parsing: bad date checking is more accurate * balance: collapsing of boring accounts to one line can be disabled with `--no-elide` * balance: fix a wrong precision regression from last release * convert: standard input can be converted * convert: an alternate rules file can be specified with `--rules` * convert: `account2-field` can be used when the CSV file specifies both accounts * convert: `description-field` can have a custom format and combine multiple CSV fields * convert: `in-field` and `out-field` support CSV files that use two amount columns * convert: don't fail when there's no default journal file * web: the web interface has been overhauled/cleaned up * web: account register views are now transaction-based, like gnucash etc., and show accurate historical balances when possible * web: simple balance charts are displayed (using flot) * web: more expressive and consistent search patterns, using a new matching engine * web: add form uses currently focussed account as default, redirects to itself, formats status messages better * web: sidebar now shows empty/boring accounts too * web: now uses warp and a newer yesod * api simplifications * importable Hledger, Hledger.Web, Hledger.Vty and Hledger.Chart modules * the basic reports are now provided by hledger-lib for easier reuse * new api use examples: `equity.hs`, `uniquify.hs` * some old base 3 support has been dropped * the old -s flag has been dropped ## 2011/4/22 hledger 0.14 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/383) * remove the specific process dependency that caused too many cabal install problems * treat arguments as possibly-encoded platform strings, do not assume UTF-8 * hledger now always reads and writes data as UTF-8, ignoring the system locale ([#34](http://bugs.hledger.org/34)) * look at the LEDGER_FILE env var for the journal path, otherwise LEDGER, like ledger * handle a blank LEDGER_FILE or LEDGER value more gracefully (use the default file path) * the default journal file path is now ~/.hledger.journal, to avoid breaking mac filevault ([#41](http://bugs.hledger.org/41)) * amounts with different prices are now aggregated, like ledger * zero amounts now have no sign or commodity, like ledger * parsing: assume current year when transaction dates have no year and there is no default year * parsing: more careful validation of eg leap years in transaction dates * parsing: better international number format support, allowing comma as decimal point and flexible digit groups ([#32](http://bugs.hledger.org/32)) * parsing: support @@ syntax specifying total price * parsing: infer the conversion price in transactions involving two unpriced commodities * parsing: support per-posting cleared status * parsing: more reporting interval syntax: biweekly, bimonthly, every N days/weeks/months/quarters/years, every Nst/nd/rd/th day of month/week * add: avoid offering account names for completion in inappropriate contexts * add: remember default account even if user submits a different amount. * convert: account-field directive specifies a field containing the base account name * convert: effective-date-field directive specifies a field containing the effective date * convert: date-format directive specifies custom date formats * convert: allow amount fields containing "AMT @@ PRICE" * histogram: honour the specified start or end dates * print: don't show a trailing space when description is blank * web: allow filter patterns with spaces if quoted, like command line * web: make edit form more cross-browser compatible, fixing it in firefox ([#38](http://bugs.hledger.org/38)) * web: move hidden add/edit/import forms below main content to help text-mode browsers a bit ([#33](http://bugs.hledger.org/33)) Release contributors: Simon Michael, Dmitry Astapov, Eric Kow, Max Bolingbroke, Omari Norman. Stats: 137 days, 113 commits, 11 end-user features and 15 end-user bugfixes since last release. 189 unit & functional tests and 59% unit test coverage (hledger, hledger-lib packages). 5540 lines of code (all packages). ## 2010/12/6 hledger 0.13 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/296) ***readline editing and tab completion from Judah Jacobson, more ledger compatibility, a more robust and installable web interface, bugfixes, and a much-deliberated package split.*** * move web, vty, chart commands into separate hledger-web, hledger-vty, hledger-chart packages. This both simplifies (no more build flags) and complicates (more room for dependency hassles), but I hope overall it will be easier and more scalable. * all packages but chart are now marked "beta", ie "not finished but suitable for everyday use" * parsing: ledger compatibility: support D default commodity directive * parsing: ledger compatibility: ignore metadata tags on transactions and postings * parsing: ledger compatibility: ignore cleared flags at the start of postings * parsing: ledger compatibility: ignore C commodity conversion directives * parsing: price precisions no longer affect commodities' display precisions * add: readline-style editing * add: tab-completion for account names * add: add the default commodity, if any, to commodity-less amounts ([#26](http://bugs.hledger.org/26)) * add: misc. commodity/precision/defaults-related bugfixes * chart: give a meaningful error message for empty journals * chart: update for current Chart lib (0.14) * web: support files now live in ./.hledger/web/ and will be auto-created at startup * web: page layout is more robust with wide content * web: allow editing of included files * web: handle multiple filter patterns correctly * web: allow single- or double-quoted filter patterns containing spaces * web: update for current yesod lib (0.6.*) * transaction balancing is now based on display precision ([#23](http://bugs.hledger.org/23)) * briefer, more informative usage error messages #### 2010/9/6 hledger 0.12.1 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/272) * web: fix account filtering breakage * installing: tighten up utf8-string dependency ## 2010/9/5 hledger 0.12 * web: new, better web ui; accounts are now a permanent sidebar; add form uses auto-completing combo fields * installing: fix a build error with parsec 3 ([#22](http://bugs.hledger.org/22)) * installing: require exactly matching hledger-lib version for more robust builds * installing: explicit data-object dependency to ensure hledger and hledger-lib use the same time version * installing: explicit hamlet dependency for more robust building * installing: build threaded and with warnings * installing: drop -fweb610 flag * installing: add gtk2hs-buildtools dependency needed to build with -fchart * installing: require cabal 1.6 or greater * add -D/--daily flag * register: with --depth, clip account names or aggregate postings rather than excluding them * fix !include with deeply nested directories ([#21](http://bugs.hledger.org/21)) * fix obscured date parse errors with parsec 3 * handle unicode better in errors * fix a ghc 6.12.3 error when running interpreted Stats: 50 days and 90 commits since last release, now at 5741 lines of code with 136 tests and 41% unit test coverage. #### 2010/07/17 hledger 0.11.1 * fix --version output ## 2010/07/17 hledger 0.11 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/253) * split --help, adding --help-options and --help-all/-H, and make it the default command * use "journal" instead of "ledger file"; default suffix is .journal, default file is \~/.journal * auto-create missing journal files rather than giving an error * new format-detecting file reader (mixed journal transactions and timelog entries are no longer supported) * work around for first real-world rounding issue (test zero to 8 decimal places instead of 10) * when reporting a balancing error, convert the error amount to cost * parsing: support double-quoted commodity symbols, containing anything but a newline or double quote * parsing: allow minus sign before commodity symbol as well as after (also fixes a convert bug) * parsing: fix wrong parse error locations within postings * parsing: don't let trailing whitespace in a timelog description mess up account names * add: allow blank descriptions * balance: --flat provides a simple non-hierarchical format * balance: --drop removes leading account name components from a --flat report * print, register, balance: fix layout issues with mixed-commodity amounts * print: display non-simple commodity names with double-quotes * stats: layout tweaks, add payee/description count * stats: don't break on an empty file * stats: -p/--period support; a reporting interval generates multiple reports * test: drop verbose test runner and testpack dependency * web: a new web ui based on yesod, requires ghc 6.12; old ghc 6.10-compatible version remains as -fweb610 * web: allow wiki-like journal editing * web: warn and keep running if reloading the journal gives an error * web: --port and --base-url options set the webserver's tcp port and base url * web: slightly better browser opening on microsoft windows, should find a standard firefox install now * web: in a web-enabled build on microsoft windows, run the web ui by default Stats: 55 days and 136 commits since last release. Now at 5552 lines of code with 132 tests and 54% unit test coverage. ## 2010/05/23 hledger 0.10 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/242) ***installation and bug fixes and api improvements*** * fix too-loose testpack dependency, missing safe dependency * fix ghc 6.12 compatibility with -fweb * fix handling of non-ascii arguments with ghc 6.12 * fix "0.8" in --version output * fix an occasional stack overflow error due to infinite recursion in Posting/Transaction equality tests * the -fwebhappstack build flag is gone for now, to avoid a cabal problem * parsing: if there is no description, don't require a space after the transaction date * parsing: balance balanced-virtual postings separately, allow them to have an implicit amount * parsing: timelog entries now generate balanced transactions, using virtual postings * parsing: simpler high-level parse error message * parsing: clearer bad date errors * add: fix wrongful program exit on bad dates * print: negative account patterns now exclude transactions containing any posting to a matched account * vty: rename the ui command to vty for consistency * vty: fix restricted account scope when backing up to top level * web: fix non-ascii handling with ghc 6.12 * web: fix a bug possibly affecting reload-on-change * consolidate module namespace under Hledger, api cleanups Stats: 44 days, 81 commits since last release. Now at 4904 lines of code including tests, 144 tests, 53% coverage. ## 2010/04/10 hledger 0.9 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/239) ***many bugfixes and small improvements, GHC 6.12 support, and a separate library package to make building (h)ledger-compatible tools easier.*** * ghc 6.12 support * split off hledger-lib package, containing core types & utils * parsing: ignore D, C, N, tag, end tag directives; we should now accept any ledger 2.6 file * parsing: allow numbers in commodities if double-quoted, like ledger * parsing: allow transactions with empty descriptions * parsing: show a better error for illegal month/day numbers in dates * parsing: don't ignore trailing junk in a smart date, eg in web add form * parsing: don't ignore unparsed text following an amount * parsing: @ was being treated as a currency symbol * add: fix precision handling in default amounts ([#19](http://bugs.hledger.org/19)) * add: elide last amount in added transactions * convert: keep original description by default, allow backreferences in replace pattern * convert: basic csv file checking, warn instead of dying when it looks wrong * convert: allow blank/comment lines at end of rules file * print: always show zero amounts as 0, hiding any commodity/decimal places/price, like ledger * register: fix bad layout with years < 1000 * register: fix a Prelude.head error with reporting interval, --empty, and --depth * register: fix a regression, register should not show posting comments * register: with --empty, intervals should continue to ends of the specified period * stats: better output when last transaction is in the future * stats: show commodity symbols, account tree depth, reorder slightly * web: -fweb now builds with simpleserver; to get happstack, use -fwebhappstack instead * web: pre-fill the add form with today's date * web: help links, better search form wording * web: show a proper error for a bad date in add form ([#17](http://bugs.hledger.org/17)) * web: fix for unicode search form values * web: fix stack overflow caused by regexpr, and handle requests faster ([#14](http://bugs.hledger.org/14)) * web: look for more-generic browser executables * web: more robust browser starting ([#6](http://bugs.hledger.org/6)) * error message cleanups * more tests, refactoring, docs Stats: 58 days, 2 contributors, 102 commits since last release. Now at 3983 lines of non-test code, 139 tests, 53% coverage. ## 2010/02/11 hledger 0.8 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/210) ***Bug fixes, refactoring and Hi-Res Graphical Charts.*** * parsing: in date=date2, use first date's year as a default for the second * add: ctrl-d doesn't work on windows, suggest ctrl-c instead * add: --no-new-accounts option disallows new accounts (Roman Cheplyaka) * add: re-use the previous transaction's date as default (Roman Cheplyaka) * add: a command-line argument now filters by account during history matching (Roman Cheplyaka) * chart: new command, generates balances pie chart (requires -fchart flag, gtk2hs) (Roman Cheplyaka, Simon Michael) * register: make reporting intervals honour a display expression ([#18](http://bugs.hledger.org/18)) * web: fix help link * web: use today as default when adding with a blank date * web: re-enable account/period fields, they seem to be fixed, along with file re-reading ([#16](http://bugs.hledger.org/16)) * web: get static files from the cabal data dir, or the current dir when using make ([#13](http://bugs.hledger.org/13)) * web: preserve encoding during add, assuming it's utf-8 ([#15](http://bugs.hledger.org/15)) * fix some non-utf8-aware file handling ([#15](http://bugs.hledger.org/15)) * filter ledger again for each command, not just once at program start * refactoring, clearer data types Stats: 62 days, 2 contributors, 76 commits since last release. Now at 3464 lines of non-test code, 97 tests, 53% test coverage. ## 2009/12/11 hledger 0.7 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/193) * price history support (first cut): P directives now work, though differently from ledger. Each posting amount takes its fixed unit price from the price history (or @) when available. This is simple and useful for things like foreign currency expenses (but not investment tracking). Like ledger, balance and register don't show amount prices any more, and don't separate differently-priced amounts. Unlike ledger, print shows all amount prices, and supports -B. * --effective option, will use transactions' effective dates if any * convert: new rules file format, find/create rules file automatically, more robust parsing, more useful --debug output * print: always sort by date, fix long account name truncation, align amounts, show end of line comments, show all amounts for clarity (don't elide the final balancing amount) * ui: use vty 4, fixes non-ascii and gnome terminal problems (issues [#3](http://bugs.hledger.org/3), [#4](http://bugs.hledger.org/4)) * web: allow data entry, react to data file changes, better layout, help links, remove histogram command and filter fields for now, fix bad localhost redirect, filter form did not work in eg firefox (issue [#7](http://bugs.hledger.org/7)), reset link did not work in all browsers * parsing: require whitespace between date and status code, allow (and ignore) a time in price records, better error messages, non-zero exit code on parse failure * display non-ascii error messages properly (issue [#5](http://bugs.hledger.org/5)) * fix an arithmetic bug that occasionally rejected valid transactions * fix a regex bug in showtree * don't break if HOME is undefined * --debug now implies --verbose * add functional tests like ledger's, use test-framework for speedy running, release shelltestrunner as a separate package * many hlint cleanups (Marko Kocić) * many site and documentation updates Stats: 60 days, 1 contributor, 50 commits since last release. Now at 3377 lines of non-test code, 97 tests, 53% test coverage. #### 2009/06/22 hledger 0.6.1 * avoid use of exitSuccess which was breaking ghc 6.8/base 3 compatibility (issue [#2](http://bugs.hledger.org/2)) ## 2009/06/13 hledger 0.6 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/1215) ***Some pre-built binaries are now available. cabal install works on gnu/linux, mac and windows. Hurrah!*** * now cabal-installable on unix, mac, and windows, with Haskell Platform * provide experimental platform binaries * parsing: fix a silly failure to open ledger file paths containing \~ * parsing: show better errors for unbalanced transaction and missing default year * parsing: allow parentheses and brackets inside account names, as ledger does * parsing: fail on empty account name components, don't just ignore * add: description passed as arguments now affects first transaction only * add: better handling of virtual postings and default amounts * print, register: show virtual accounts bracketed/parenthesised * web: improved web ui supporting full patterns & period expressions * new "stats" command reports some ledger statistics * many dev/doc/deployment infrastructure improvements * move website into darcs repo, update home page * move issue tracker to google code Release stats: * Contributors: Simon Michael * Days since last release: 21 * Commits: 94 * Lines of non-test code: 2865 * Tests: 82 * Test coverage: 53% expressions * Known errors: 3 (inconsistent eliding, vty-related failures) * Performance: similar (http://hledger.org/profs/200906131120.bench) #### 2009/05/23 hledger 0.5.1 * two fixes: really disable vty flag by default, and include ConvertCommand in cabal file ## 2009/05/23 hledger 0.5 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/1181) * the vty flag is disabled by default again, to ease installation on windows * use ledger 3 terminology: a ledger contains transactions which contain postings * new "add" command prompts for transactions interactively and adds them to the ledger * new "convert" command transforms bank CSV exports to ledger format, with rule-based cleanup * new "histogram" command shows transaction counts per day or other reporting interval * most commands now work properly with UTF8-encoded text (Sergey Astanin) * invoking as "hours" is now less different: it just uses your timelog, not your ledger * ..quarterly/-Q option summarises by quarter * ..uncleared/-U option looks only at uncleared transactions * be more accurate about checking balanced amounts, don't rely on display precision * enforce balancing for bracketed virtual postings * fix bug in eliding of posting amounts * don't show trailing spaces on amountless postings * parse null input as an empty ledger * don't treat comments as part of transaction descriptions * require some postings in ledger transactions * require a non-empty description in ledger transactions * don't fail when matching an empty pattern, as in "not:" * make the web server handle the null path * code, api and documentation updates * add a contributor agreement/list Release stats: * Contributors: Simon Michael, Sergey Astanin * Days since last release: 51 * Commits: 101 * Lines of non-test code: 2795 * Tests: 76 * Known errors: 0 ## 2009/04/03 hledger 0.4 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/1097) ***There is also a new website at hledger.org, with screenshots (textual!), a demo (will it survive!?), and docs (not too many!) ... I wrote it because I did not want to hack on c++ and because haskell seemed a good fit ... new happstack-based web interface.*** * new "web" command serves reports in a web browser (install with -f happs to build this) * make the vty-based curses ui a cabal build option, which will be ignored on MS windows * drop the ..options-anywhere flag, that is now the default * patterns now use not: and desc: prefixes instead of \^ and \^\^ * patterns are now case-insensitive, like ledger * !include directives are now relative to the including file (Tim Docker) * "Y2009" default year directives are now supported, allowing m/d dates in ledger * individual transactions now have a cleared status * unbalanced entries now cause a proper warning * balance report now passes all ledger compatibility tests * balance report now shows subtotals by default, like ledger 3 * balance report shows the final zero total when -E is used * balance report hides the final total when ..no-total is used * ..depth affects print and register reports (aggregating with a reporting interval, filtering otherwise) * register report sorts transactions by date * register report shows zero-amount transactions when -E is used * provide more convenient timelog querying when invoked as "hours" * multi-day timelog sessions are split at midnight * unterminated timelog sessions are now counted. Accurate time reports at last! * the test command gives better ..verbose output * ..version gives more detailed version numbers including patchlevel for dev builds * new make targets include: ghci, haddocktest, doctest, unittest, view-api-docs * a doctest-style framework for functional/shell tests has been added Release stats: * Contributors: Simon Michael, Tim Docker; thanks to the HAppS, happstack and testpack developers * Days since release: 76 * Commits: 144 * Lines of non-test code: 2367 * Tests: 56 * Known errors: 0 ## 2009/01/17 hledger 0.3 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/67) * count timelog sessions on the day they end, like ledger, for now * when options are repeated, use the last instead of the first * builds with ghc 6.10 as well as 6.8 * a simple ui for interactive report browsing: hledger ui * accept smart dates everywhere (YYYYMMDD, Y/M/D, Y, M/D, D, jan, today, last week etc.) * ..period/-p flag accepting period expressions like "in 2008", "weekly from last month".. * -W/-M/-Y convenience flags to summarise register weekly, monthly, yearly * ..depth and -E flags also affect summarised register reports (including depth=0) * ..display/-d flag supporting date predicates (like "d<[DATE]", "d\>=[DATE]") * !include directive to include additional ledger files * !account directive to set a default parent account * Added support for reading historical prices from files * timelog and ledger entries can be intermixed in one file * modifier and periodic entries can appear anywhere (but are still ignored) * help and readme improvements * runs much faster than 0.2 Release stats: * Contributors: Simon Michael, Nick Ingolia, Tim Docker; thanks to Corey O'Connor & the vty team * Lines of non-test code: 2123 * Tests: 58 * Known errors: 1 ## 2008/11/23 hledger 0.2 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/826) * fix balance report totals when filtering by account * fix balance report selection of accounts when filtering by account * fix a bug with account name eliding in balance report * if we happen to be showing a not-yet-auto-balanced entry, hide the AUTO marker * fix print command filtering by account * omit transactions with zero amount from register report * Fix bug in parsing of timelogs * rename ..showsubs to ..subtotal, like ledger * drop ..usage flag * don't require quickcheck * priced amounts (eg "10h @ $50") and ..basis/..cost/-B flag to show them with cost basis * easy ..depth option, equivalent to ledger's -d 'l<=N' * smarter y/m/d date parsing for -b and -e (any number of digits, month and day default to 1, separator can be / - or .) * -n flag for balance command * ..empty/-E flag * build a library, as well as the exe * new home page url (http://joyful.com/hledger) * publish html and pdf versions of README * detect display preferences for each commodity like ledger * support amounts with multiple currencies/commodities * support ..real/-R flag * support -C/..cleared flag to filter by entry status (not transaction status) * support virtual and balanced virtual transactions * parse comment lines beginning with a space, as from M-; in emacs ledger-mode * allow any non-whitespace in account names, perhaps avoiding misleading missing amounts errors * clearer error message when we can't balance an entry * when we fail because of more than one missing amount in an entry, show the full entry * document the built-in test runner in ..help * add a ..verbose/-v flag, use it to show more test-running detail Release stats: * Contributors: Simon Michael, Tim Docker * Lines of non-test code: 1350 * Tests: 43 * Known errors: 0 ## 2008/10/15 hledger 0.1 [announcement](http://thread.gmane.org/gmane.comp.finance.ledger.general/775) ***I'm pleased to announce the first release of hledger, a command-line accounting tool similar to John Wiegley's c++ ledger. hledger generates simple ledger-compatible transaction & account balance reports from a plain text ledger file. It's simple to use, at least for techies. This has been my "learning Haskell" project, but I think it's also useful. It is much less featureful than ledger, and not quite as fast, but it has the virtue of being fun for haskellers to hack on. I am documenting the code, the app is simple, and I'm not too far up the haskell learning curve, so I think other people learning haskell might enjoy a look. It is currently ~1100 lines of haskell excluding tests. My thanks to John Wiegley for help with compatibility and for his very useful ledger tool. I use it (and now, both of them) daily to track time and money. This is of course a hot topic around our planet. I hope you find it useful or intriguing.*** Release stats: * Contributors: Simon Michael