site: contributing: organise by role, begin cleanup
This commit is contained in:
		
							parent
							
								
									69cada2d86
								
							
						
					
					
						commit
						4b6159ddf2
					
				@ -1,5 +1,3 @@
 | 
				
			|||||||
<!-- hledger repo and http://hledger.org versions of this document are periodically bidirectionally synced -->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<style>
 | 
					<style>
 | 
				
			||||||
#toc > ol > li > a { display:none; }
 | 
					#toc > ol > li > a { display:none; }
 | 
				
			||||||
#toc > ol > li > ol > li { padding-left:0; }
 | 
					#toc > ol > li > ol > li { padding-left:0; }
 | 
				
			||||||
@ -8,100 +6,47 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Contributor guide
 | 
					# Contributor guide
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Contributors of all levels are most welcome in the hledger project.
 | 
					New contributors are always welcome. Jump in! Or [ask us](/docs.html#getting-help) to help you find a task.
 | 
				
			||||||
This guide is action-oriented: below you'll find useful links, then procedures, then general info.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Quick links
 | 
					## Get started as a...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style>
 | 
					### Funder
 | 
				
			||||||
tr {
 | 
					 | 
				
			||||||
    border-top:thin solid #bbb;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
<!-- | hledger.org   | [combined release notes](release notes), [pre-compiled binaries](download) | -->
 | 
					 | 
				
			||||||
<!-- [web ui demo](http://demo.hledger.org/register?q=inacct%3Aassets%3Abank%3Achecking+sym%3A\%24) -->
 | 
					 | 
				
			||||||
<!-- [](https://travis-ci.org/simonmichael/hledger) -->
 | 
					 | 
				
			||||||
<!-- [](http://packdeps.haskellers.com/feed?needle=hledger) -->
 | 
					 | 
				
			||||||
<!-- [](http://bugs.hledger.org) -->
 | 
					 | 
				
			||||||
<!-- [](https://github.com/simonmichael/hledger/issues?q=label:bounty) -->
 | 
					 | 
				
			||||||
|
 | 
					 | 
				
			||||||
|-------------------------|----------------------------------------------------------------------------|
 | 
					 | 
				
			||||||
| IRC                     | Join [#hledger](http://irc.hledger.org) ([chat log](http://ircbrowse.net/browse/hledger); see also [#ledger](http://webchat.freenode.net?channels=ledger&randomnick=1)) |
 | 
					 | 
				
			||||||
| Mail list               | [list.hledger.org](http://list.hledger.org) ([Gmane](http://dir.gmane.org/gmane.comp.finance.ledger.hledger)) |
 | 
					 | 
				
			||||||
| Twitter                 | [#hledger](https://twitter.com/search?q=%23hledger&src=typd&f=realtime), see also [#ledgercli](https://twitter.com/search?q=%23ledgercli&src=typd&f=realtime), [#plaintextaccounting](https://twitter.com/search?q=%23plaintextaccounting&src=typd&f=realtime), <a href="https://twitter.com/ledgertips">@LedgerTips</a> |
 | 
					 | 
				
			||||||
| hledger-web demo          | [demo.hledger.org](http://demo.hledger.org) |
 | 
					 | 
				
			||||||
| hledger-api demo        | [demo.hledger.org/api](http://demo.hledger.org/api/swagger.json), [in swagger editor](http://editor.swagger.io/#/?import=demo.hledger.org/api/swagger.json&no-proxy)
 | 
					 | 
				
			||||||
| Trello                  | [old backlog/wishlist planning board](http://trello.hledger.org) |
 | 
					 | 
				
			||||||
| Github                  | [simonmichael/hledger](http://github.com/simonmichael/hledger) (alias: code.hledger.org), [forks](http://forked.yannick.io/simonmichael/hledger) <br> [commits](http://github.com/simonmichael/hledger/commits), <!-- [unreleased commits](https://github.com/simonmichael/hledger/compare/0.23...master), [release branch commits](https://github.com/simonmichael/hledger/compare/master...0.23), --> [COMMITS!](http://starlogs.net/#simonmichael/hledger) <br> [open bugs](http://bugs.hledger.org), [open wishes](http://wishes.hledger.org), [open pull requests](http://prs.hledger.org), [all issues](https://github.com/simonmichael/hledger/issues?q=) <br> [issues with bounty tag](https://github.com/simonmichael/hledger/issues?q=label:bounty), [bountysource bounties](https://github.com/simonmichael/hledger/issues?q=%22Add%20to%20the%20bounty%20at%20Bountysource%22%20OR%20%22claim%20the%20bounty%20on%20Bountysource%22%20OR%20%22bounty%20on%20this%20issue%20has%20been%20claimed%20at%20Bountysource%22%20), [codemill bounties](https://github.com/simonmichael/hledger/issues?q=codemill), [codefund bounties](https://github.com/simonmichael/hledger/issues?utf8=✓&q=codefund) <br> stars:  <a class="github-button" href="https://github.com/simonmichael/hledger" data-icon="octicon-star" data-count-href="/simonmichael/hledger/stargazers" data-count-api="/repos/simonmichael/hledger#stargazers_count" data-count-aria-label="# stargazers on GitHub" aria-label="Star simonmichael/hledger on GitHub"></a> (#99 of ~30k [starred haskell projects](https://github.com/search?o=desc&q=language%3AHaskell+stars%3A%3E370&ref=searchresults&s=stars&type=Repositories) in 2016/04, #71 in 2016/12, #65 in 2017/3) <br> [{width=520 height=170}](https://waffle.io/simonmichael/hledger/metrics) |
 | 
					 | 
				
			||||||
| Travis CI               | [{height=20}](https://travis-ci.org/simonmichael/hledger)
 | 
					 | 
				
			||||||
| Appveyor CI             | [disabled](https://github.com/simonmichael/hledger/issues/424) <!-- [{height=20}](https://ci.appveyor.com/project/simonmichael/hledger) latest binaries: [hledger.exe](https://ci.appveyor.com/api/projects/simonmichael/hledger/artifacts/hledger.exe?branch=master), [hledger-web.exe](https://ci.appveyor.com/api/projects/simonmichael/hledger/artifacts/hledger-web.exe?branch=master) -->
 | 
					 | 
				
			||||||
| Hackage                 | packages: [hledger-lib](http://hackage.haskell.org/package/hledger-lib), [hledger](http://hackage.haskell.org/package/hledger), [hledger-ui](http://hackage.haskell.org/package/hledger-ui), [hledger-web](http://hackage.haskell.org/package/hledger-web), [hledger-api](http://hackage.haskell.org/package/hledger-api), [hledger-diff](http://hackage.haskell.org/package/hledger-diff), [hledger-interest](http://hackage.haskell.org/package/hledger-interest), [hledger-irr](http://hackage.haskell.org/package/hledger-irr), [\*hledger\*](http://hackage.haskell.org/packages/search?terms=hledger) <!-- [](http://hackage.haskell.org/package/hledger) --> <!-- 2017/4 not updating  <br> GHC compatibility: [hledger-lib](http://matrix.hackage.haskell.org/package/hledger-lib), [hledger](http://matrix.hackage.haskell.org/package/hledger), [hledger-ui](http://matrix.hackage.haskell.org/package/hledger-ui), [hledger-web](http://matrix.hackage.haskell.org/package/hledger-web), [hledger-api](http://matrix.hackage.haskell.org/package/hledger-api) --> <br> reverse deps: [hledger-lib](http://packdeps.haskellers.com/reverse/hledger-lib), [hledger](http://packdeps.haskellers.com/reverse/hledger), [hledger-ui](http://packdeps.haskellers.com/reverse/hledger-ui), [hledger-web](http://packdeps.haskellers.com/reverse/hledger-web), [hledger-api](http://packdeps.haskellers.com/reverse/hledger-api) <br> [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger-lib) [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger) [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger-ui) [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger-web) [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger-api) |
 | 
					 | 
				
			||||||
| Stackage                | [build-constraints.yaml](https://github.com/fpco/stackage/blob/master/build-constraints.yaml), [open hledger-related issues](https://github.com/fpco/stackage/search?q=hledger+is%3Aopen&type=Issues) |
 | 
					 | 
				
			||||||
| Debian                  | source packages: [haskell-hledger-lib](http://tracker.debian.org/pkg/haskell-hledger-lib), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger-lib), [haskell-hledger](http://tracker.debian.org/pkg/haskell-hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger), [haskell-hledger-ui](http://tracker.debian.org/pkg/haskell-hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger-ui), [haskell-hledger-web](http://tracker.debian.org/pkg/haskell-hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger-web) <br> binary packages: <br> stable [hledger](https://packages.debian.org/stable/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=stable), <!-- [hledger-ui](https://packages.debian.org/stable/hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-ui;dist=stable), --> [hledger-web](https://packages.debian.org/stable/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=stable) <br> testing [hledger](https://packages.debian.org/testing/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=testing), <!-- [hledger-ui](https://packages.debian.org/testing/hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-ui;dist=testing), --> [hledger-web](https://packages.debian.org/testing/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=testing) <br> unstable [hledger](https://packages.debian.org/unstable/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=unstable), [hledger-ui](https://packages.debian.org/unstable/hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-ui;dist=unstable), [hledger-web](https://packages.debian.org/unstable/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=unstable) <br> experimental [hledger](https://packages.debian.org/experimental/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=experimental), [hledger-ui](https://packages.debian.org/experimental/hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-ui;dist=experimental), [hledger-web](https://packages.debian.org/experimental/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=experimental) <br> all [\*hledger\*](https://packages.debian.org/search?searchon=names&keywords=hledger) <br> popularity stats: [hledger](https://qa.debian.org/popcon.php?package=haskell-hledger), [hledger-ui](https://qa.debian.org/popcon.php?package=haskell-hledger-ui), [hledger-web](https://qa.debian.org/popcon.php?package=haskell-hledger-web) <br> [PTS help](https://www.debian.org/doc/manuals/developers-reference/resources.html#pkg-tracking-system) |
 | 
					 | 
				
			||||||
| Ubuntu                  | source packages: [haskell-hledger-lib](https://launchpad.net/ubuntu/+source/haskell-hledger-lib), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger-lib), [haskell-hledger](https://launchpad.net/ubuntu/+source/haskell-hledger), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger), [haskell-hledger-ui](https://launchpad.net/ubuntu/+source/haskell-hledger-ui), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger-ui), [haskell-hledger-web](https://launchpad.net/ubuntu/+source/haskell-hledger-web), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger-web) <br> binary packages: [\*hledger\*](http://packages.ubuntu.com/search?suite=all&searchon=names&keywords=hledger) |
 | 
					 | 
				
			||||||
| Gentoo                  | [hledger](http://gpo.zugaina.org/dev-haskell/hledger), [hledger-web](http://gpo.zugaina.org/dev-haskell/hledger-web), [\*hledger\*](http://gpo.zugaina.org/Search?search=hledger) |
 | 
					 | 
				
			||||||
| Fedora                  | [hledger](https://apps.fedoraproject.org/packages/hledger), [\*hledger\*](https://apps.fedoraproject.org/packages/s/hledger), [hledger (package db)](https://admin.fedoraproject.org/pkgdb/package/hledger/), [Haskell SIG](http://fedoraproject.org/wiki/Haskell_SIG) |
 | 
					 | 
				
			||||||
| Void Linux              | [hledger\*](https://github.com/voidlinux/void-packages/search?utf8=✓&q=hledger) |
 | 
					 | 
				
			||||||
| Nix                     | [\*hledger\*](http://hydra.nixos.org/search?query=hledger) |
 | 
					 | 
				
			||||||
| Homebrew                | [hledger](https://github.com/Homebrew/homebrew-core/blob/master/Formula/hledger.rb) |
 | 
					 | 
				
			||||||
| Sandstorm               | [hledger web app & reviews](https://apps.sandstorm.io/app/8x12h6p0x0nrzk73hfq6zh2jxtgyzzcty7qsatkg7jfg2mzw5n90), [issues](https://github.com/simonmichael/hledger/issues?utf8=✓&q=label%3A%22platform%3A%20sandstorm%22%20)
 | 
					 | 
				
			||||||
| Reference               | [GHC Can I Use](http://damianfral.github.io/ghcaniuse/) |
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
<!-- list the debian packages for clarity:
 | 
					Become a financial backer to
 | 
				
			||||||
3 source:
 | 
					help sustain the project,
 | 
				
			||||||
haskell-hledger-lib
 | 
					influence issues you care about,
 | 
				
			||||||
haskell-hledger
 | 
					express gratitude, 
 | 
				
			||||||
haskell-hledger-web
 | 
					build your prosperity consciousness!
 | 
				
			||||||
8 binary:
 | 
					 | 
				
			||||||
hledger
 | 
					 | 
				
			||||||
hledger-web
 | 
					 | 
				
			||||||
libghc-hledger-dev
 | 
					 | 
				
			||||||
libghc-hledger-doc
 | 
					 | 
				
			||||||
libghc-hledger-prof
 | 
					 | 
				
			||||||
libghc-hledger-lib-dev
 | 
					 | 
				
			||||||
libghc-hledger-lib-doc
 | 
					 | 
				
			||||||
libghc-hledger-lib-prof
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
<!-- old/future links -->
 | 
					- Use the donate links on the home page
 | 
				
			||||||
<!-- [haddock coverage](http://hledger.org/profs/haddock-coverage), -->
 | 
					- Configure a recurring donation
 | 
				
			||||||
<!-- [unit test coverage](http://hledger.org/profs/coverage/hpc_index_fun.html), -->
 | 
					- Contribute or pledge bounties on issues
 | 
				
			||||||
<!-- [benchmark](http://hledger.org/profs/latest.bench) -->
 | 
					- Ask your organization to contribute
 | 
				
			||||||
<!-- [profile](http://hledger.org/profs/latest.prof), -->
 | 
					- Work on project sustainability and accountability
 | 
				
			||||||
<!-- [heap](http://hledger.org/profs/latest.ps) -->
 | 
					 | 
				
			||||||
<!-- [developer notes](http://github.com/simonmichael/hledger/NOTES.org)\ -->
 | 
					 | 
				
			||||||
<!-- [browse dev API docs](http://hledger.org/api/frames.html) -->
 | 
					 | 
				
			||||||
<!-- [How to clone it](contributing#set-up-for-development) -->
 | 
					 | 
				
			||||||
<!-- [hledger-web dev demo](http://demo.hledger.org:5001) -->
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
<!-- hoogle search form
 | 
					### Tester
 | 
				
			||||||
<script type="text/javascript" src="http://haskell.org/hoogle/datadir/resources/jquery-1.4.2.js"></script>
 | 
					 | 
				
			||||||
<script type="text/javascript" src="http://haskell.org/hoogle/datadir/resources/hoogle.js"></script>
 | 
					 | 
				
			||||||
<form action="http://haskell.org/hoogle/" method="get" style="display:inline; margin:0; padding:0;">
 | 
					 | 
				
			||||||
<input type="hidden" name="prefix" value="+hledger +hledger-lib +hledger-web +hledger-vty +hledger-chart" />
 | 
					 | 
				
			||||||
<span style="white-space:nowrap;"
 | 
					 | 
				
			||||||
><input type="text" name="hoogle" id="hoogle" accesskey="1" size="30"
 | 
					 | 
				
			||||||
/><input type="submit" value="search API with hoogle"
 | 
					 | 
				
			||||||
/></span>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Test installation on platforms you have access to
 | 
				
			||||||
 | 
					- Run the latest release or developer build
 | 
				
			||||||
 | 
					- Report packaging, documentation, UX, functional bugs
 | 
				
			||||||
 | 
					- Report and help analyse problems via irc/mail list/bug tracker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## How to..
 | 
					#### Report bugs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Get help
 | 
					If you found a similar bug report already in the tracker, add any new information there.
 | 
				
			||||||
 | 
					Otherwise, open a new bug by clicking "New issue", or <http://bugs.hledger.org/new>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For quick help or support, ask on the [#hledger](http://irc.hledger.org) (irc.hledger.org) IRC channel.
 | 
					#### Suggest enhancements
 | 
				
			||||||
If you don't get an answer quickly (depends on time of day), you can leave the window open and check back later, type "sm:" to alert me, and/or leave your email address.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
For slightly less quick help, but more eyeballs, ask on the [mail list](http://list.hledger.org) (list.hledger.org).
 | 
					Some enhancement requests land in the bug tracker; these will get the WISH tag to avoid obscuring bugs. 
 | 
				
			||||||
 | 
					But for general brainstorming and idea capture, consider using
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Also, always search the issue tracker<!--](#search-the-issue-tracker)-->.
 | 
					- The [#hledger](http://irc.hledger.org) (irc.hledger.org) IRC channel on freenode
 | 
				
			||||||
You may find an explanation or workaround, or when the fix will be released.
 | 
					  and the [mail list](http://list.hledger.org) (list.hledger.org) are excellent places for discussing and refining ideas.
 | 
				
			||||||
 | 
					  Both are archived and linkable, so the idea won't be lost. The IRC channel is quick, the mail list has more readers.
 | 
				
			||||||
 | 
					- The [trello board](http://trello.hledger.org) (trello.hledger.org) is a categorised collection of wishlist items.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<!-- - test and share problem journal snippets at paste . hledger.org -->
 | 
					#### Search the issue tracker
 | 
				
			||||||
 | 
					 | 
				
			||||||
### Search the issue tracker
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
The hledger project's issue tracker is on github. It contains:
 | 
					The hledger project's issue tracker is on github. It contains:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -147,234 +92,7 @@ Estimates are always for the total time cost (not time remaining).
 | 
				
			|||||||
Estimates are not usually changed, a new estimate is added instead.
 | 
					Estimates are not usually changed, a new estimate is added instead.
 | 
				
			||||||
Numbers are very approximate, but better than nothing.
 | 
					Numbers are very approximate, but better than nothing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Report bugs
 | 
					#### Run benchmarks
 | 
				
			||||||
 | 
					 | 
				
			||||||
If you found a similar bug report already in the tracker, add any new information there.
 | 
					 | 
				
			||||||
Otherwise, open a new bug by clicking "New issue", or <http://bugs.hledger.org/new>.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Suggest enhancements
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Some enhancement requests land in the bug tracker; these will get the WISH tag to avoid obscuring bugs. 
 | 
					 | 
				
			||||||
But for general brainstorming and idea capture, consider using
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- The [#hledger](http://irc.hledger.org) (irc.hledger.org) IRC channel on freenode
 | 
					 | 
				
			||||||
  and the [mail list](http://list.hledger.org) (list.hledger.org) are excellent places for discussing and refining ideas.
 | 
					 | 
				
			||||||
  Both are archived and linkable, so the idea won't be lost. The IRC channel is quick, the mail list has more readers.
 | 
					 | 
				
			||||||
- The [trello board](http://trello.hledger.org) (trello.hledger.org) is a categorised collection of wishlist items.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Do user testing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- review and critique our documentation and web presence
 | 
					 | 
				
			||||||
- test the procedures on [download](download) and on this page
 | 
					 | 
				
			||||||
- check that the hledger binaries run your platform, and `hledger test` reports no failures
 | 
					 | 
				
			||||||
- test the hledger tools' functionality, usability, browser compatibility, ui layout etc.
 | 
					 | 
				
			||||||
- discuss/report problems via irc/mail list/bug tracker
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Install stack and git
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[stack](https://github.com/commercialhaskell/stack/wiki/Downloads) is
 | 
					 | 
				
			||||||
the recommended tool for building hledger from source.
 | 
					 | 
				
			||||||
It builds haskell projects, installing required haskell libraries as needed.
 | 
					 | 
				
			||||||
It can also install GHC (the compiler) and (on windows) git, if needed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You don't need to use stack, if you are already expert with the older
 | 
					 | 
				
			||||||
cabal tool, or even just GHC, but I won't attempt to document those
 | 
					 | 
				
			||||||
procedures; these docs assume you have downloaded and installed stack.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
On Windows, you should choose the 64-bit stack download if you will be
 | 
					 | 
				
			||||||
processing >50,000 transactions at a time with hledger
 | 
					 | 
				
			||||||
([#275](https://github.com/simonmichael/hledger/issues/275)).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[git](http://git-scm.com) is the revision control tool you'll need to
 | 
					 | 
				
			||||||
fetch the latest hledger source and submit changes. On windows, stack
 | 
					 | 
				
			||||||
can install it for you. These docs assume you have installed git and
 | 
					 | 
				
			||||||
know a little about how to use it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Install other optional tools
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Up-to-date `alex`, `happy`, and `haddock` tools are required, but `stack` should install those for you.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Here are some optional extra tools:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- `shelltestrunner` is useful for running functional tests.
 | 
					 | 
				
			||||||
- `hasktags` is an easy way to generate editor tag files for quick source code navigation.
 | 
					 | 
				
			||||||
- `profiteur` is for reporting stack profiles.
 | 
					 | 
				
			||||||
- `hpack` regenerates cabal files when package.yaml files have been updated.
 | 
					 | 
				
			||||||
- `hoogle` is for searching source code.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can install them all with:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```shell
 | 
					 | 
				
			||||||
$ stack install shelltestrunner hasktags profiteur hpack hoogle
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Get the latest hledger source
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```shell
 | 
					 | 
				
			||||||
$ git clone code.hledger.org hledger    # aka github.com/simonmichael/hledger.git
 | 
					 | 
				
			||||||
$ cd hledger
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
Old instructions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Get [GHC](https://www.haskell.org/ghc/) and [cabal-install](http://hackage.haskell.org/package/cabal-install) installed.
 | 
					 | 
				
			||||||
   I recommend the [stackage.org install guide](http://www.stackage.org/install).
 | 
					 | 
				
			||||||
   You can see which GHC versions are officially supported in the `tested-with` field in
 | 
					 | 
				
			||||||
   [hledger.cabal](http://hackage.haskell.org/package/hledger/hledger.cabal),
 | 
					 | 
				
			||||||
   [hledger-ui.cabal](http://hackage.haskell.org/package/hledger-ui/hledger-ui.cabal),
 | 
					 | 
				
			||||||
   [hledger-web.cabal](http://hackage.haskell.org/package/hledger-web/hledger-web.cabal).
 | 
					 | 
				
			||||||
   Older versions may also work.
 | 
					 | 
				
			||||||
2. Get [git](http://git-scm.com) installed.
 | 
					 | 
				
			||||||
3. Get [GNU Make](http://www.gnu.org/software/make) installed (unless you don't care about the Makefile's conveniences).
 | 
					 | 
				
			||||||
   On some platforms the command will be eg `gmake` instead of `make`.
 | 
					 | 
				
			||||||
4. Get the hledger repo:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ```shell
 | 
					 | 
				
			||||||
    $ git clone https://github.com/simonmichael/hledger.git
 | 
					 | 
				
			||||||
    ```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
5. You might want to install or upgrade some of these haskell developer tools.
 | 
					 | 
				
			||||||
   If you're not sure, skip this step and return to it as needed.
 | 
					 | 
				
			||||||
   Be sure the cabal bin directory where these are installed (eg ~/.cabal/bin) is in your PATH.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ```shell
 | 
					 | 
				
			||||||
    $ cabal update
 | 
					 | 
				
			||||||
    $ cabal install alex happy       # if you get alex/happy-related errors when building hledger
 | 
					 | 
				
			||||||
    $ cabal install haddock          # needed to build hledger API docs
 | 
					 | 
				
			||||||
    $ cabal install shelltestrunner  # needed to run hledger functional tests (may need latest git version)
 | 
					 | 
				
			||||||
    $ cabal install hoogle hlint     # maybe useful for searching API docs and checking code
 | 
					 | 
				
			||||||
    ```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    You'll also want a comfortable code editor, preferably with Haskell support.
 | 
					 | 
				
			||||||
    (I use emacs + [haskell-mode](https://github.com/haskell/haskell-mode),
 | 
					 | 
				
			||||||
    or occasionally [IntelliJ IDEA](https://www.jetbrains.com/idea/download) + one of the [plugins](https://www.google.com/search?hl=en&q=intellij+plugins+haskell)).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
6. Install haskell libs required by hledger:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ```shell
 | 
					 | 
				
			||||||
    $ cd hledger
 | 
					 | 
				
			||||||
    $ cabal sandbox init   # optional
 | 
					 | 
				
			||||||
    $ make installdeps     # or cabal install --only-dep ./hledger-lib ./hledger [./hledger-web]
 | 
					 | 
				
			||||||
    ```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    This will install the required dependencies from Hackage.
 | 
					 | 
				
			||||||
    If you're new to cabal, you can expect problems at this stage.
 | 
					 | 
				
			||||||
    The usual remedy is to ensure you start with a clean package db, eg by doing `cabal sandbox init`.
 | 
					 | 
				
			||||||
    You can simplify and speed up this step a lot by commenting out
 | 
					 | 
				
			||||||
    hledger-web in the `PACKAGES` list in the [Makefile](https://github.com/simonmichael/hledger/blob/master/Makefile#L41).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
7. Build with cabal:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ```shell
 | 
					 | 
				
			||||||
    $ make cabalbuild
 | 
					 | 
				
			||||||
    ```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    (Tip: `make cabalCMD` runs `cabal CMD` in each of the hledger packages).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
8. Build with GHC:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ```shell
 | 
					 | 
				
			||||||
    $ make bin/hledgerdev
 | 
					 | 
				
			||||||
    ```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    This builds hledger (and hledger-lib) with GHC directly, without using cabal,
 | 
					 | 
				
			||||||
    and as quickly as possible, without optimizations (the "dev" suffix is a reminder of this).
 | 
					 | 
				
			||||||
    I use and recommend this method for development, as it crosses package boundaries and ensures you are building the latest code.
 | 
					 | 
				
			||||||
    However it needs some files generated by cabal build, which is why we did that first.
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Use the Makefile
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
A Makefile is provided to make common developer tasks easy to remember,
 | 
					 | 
				
			||||||
and to insulate us a little from the ever-evolving Haskell tools ecosystem.
 | 
					 | 
				
			||||||
Using it is entirely optional, but recommended.
 | 
					 | 
				
			||||||
You'll need [GNU Make](http://www.gnu.org/software/make) installed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The Makefile is self-documenting. Run `make` to see a list of the main make rules:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```shell
 | 
					 | 
				
			||||||
$ make
 | 
					 | 
				
			||||||
Makefile:37: -------------------- hledger make rules --------------------
 | 
					 | 
				
			||||||
Makefile:39: make [help] -- list documented rules in this makefile. make -n RULE shows more detail.
 | 
					 | 
				
			||||||
Makefile:204: (INSTALLING:)
 | 
					 | 
				
			||||||
Makefile:206: make install -- download dependencies and install hledger executables to ~/.local/bin or equivalent (with stack)
 | 
					 | 
				
			||||||
Makefile:231: (BUILDING:)
 | 
					 | 
				
			||||||
Makefile:235: make build -- download dependencies and build hledger executables (with stack)
 | 
					 | 
				
			||||||
Makefile:304: make hledgerdev -- quickly build the hledger executable (with ghc and -DDEVELOPMENT)
 | 
					 | 
				
			||||||
...
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
To see what a make rule will do without actually doing it, use the `-n` flag:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```shell
 | 
					 | 
				
			||||||
$ make build -n
 | 
					 | 
				
			||||||
stack build
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
```shell
 | 
					 | 
				
			||||||
$ make test -n
 | 
					 | 
				
			||||||
(stack test \
 | 
					 | 
				
			||||||
		&& echo pkgtest PASSED) || echo pkgtest FAILED
 | 
					 | 
				
			||||||
(stack exec hledger test \
 | 
					 | 
				
			||||||
		&& echo builtintest PASSED) || echo builtintest FAILED
 | 
					 | 
				
			||||||
(COLUMNS=80 PATH=`pwd`/bin:/home/simon/src/hledger/bin:/home/simon/.local/bin:/home/simon/.cabal/bin:/opt/ghc/7.10.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/var/lib/gems/1.9.1/bin stack exec -- shelltest --execdir -- -j16 --hide-successes tests \
 | 
					 | 
				
			||||||
		&& echo functest PASSED) || echo functest FAILED
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Build or install hledger
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Run `make` to see a list of build rules. You probably want `build` or `install`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
`make build` runs stack build, which downloads required haskell
 | 
					 | 
				
			||||||
dependencies and builds all hledger packages.
 | 
					 | 
				
			||||||
The resulting executables will be somewhere under .stack-work, eg in
 | 
					 | 
				
			||||||
`.stack-work/install/i386-linux/lts-3.0/7.10.2/bin/`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```shell
 | 
					 | 
				
			||||||
$ make build
 | 
					 | 
				
			||||||
stack build
 | 
					 | 
				
			||||||
hledger-lib-0.27: configure
 | 
					 | 
				
			||||||
hledger-lib-0.27: build
 | 
					 | 
				
			||||||
hledger-lib-0.27: install
 | 
					 | 
				
			||||||
hledger-0.27: configure
 | 
					 | 
				
			||||||
hledger-0.27: build
 | 
					 | 
				
			||||||
Progress: 1/4
 | 
					 | 
				
			||||||
...
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Note stack will install required haskell libraries, but not C
 | 
					 | 
				
			||||||
libraries such as curses or terminfo. If you get a build error, it is
 | 
					 | 
				
			||||||
likely because one of these is missing, in which case you must
 | 
					 | 
				
			||||||
identify and install it yourself using your system's package
 | 
					 | 
				
			||||||
manager. This is usually a bit harder on Windows.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
`make install` runs stack install, which does everything stack build does and also
 | 
					 | 
				
			||||||
copies the executables to `~/.local/bin` or the Windows equivalent.
 | 
					 | 
				
			||||||
You should make sure this directory is in your `$PATH`, so that you can just type
 | 
					 | 
				
			||||||
`hledger` to run the latest.
 | 
					 | 
				
			||||||
```shell
 | 
					 | 
				
			||||||
$ make install
 | 
					 | 
				
			||||||
stack install
 | 
					 | 
				
			||||||
NOTE: the install command is functionally equivalent to 'build --copy-bins'
 | 
					 | 
				
			||||||
hledger-0.27: build
 | 
					 | 
				
			||||||
...
 | 
					 | 
				
			||||||
Copied executables to /Users/simon/.local/bin/:
 | 
					 | 
				
			||||||
- hledger-web
 | 
					 | 
				
			||||||
- hledger-ui
 | 
					 | 
				
			||||||
- hledger
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can save time and effort by building just the package(s) you're interested in.
 | 
					 | 
				
			||||||
To install just the hledger command-line tool, but not hledger-ui or (especially costly)
 | 
					 | 
				
			||||||
hledger-web, do:
 | 
					 | 
				
			||||||
```shell
 | 
					 | 
				
			||||||
$ stack install hledger
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(This looks like the [download page](download) command for installing the latest hledger release from Stackage.
 | 
					 | 
				
			||||||
The difference is, here we are running it inside the hledger source tree, so the source version will be installed.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Run benchmarks
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Benchmarks are standard performance measurements,
 | 
					Benchmarks are standard performance measurements,
 | 
				
			||||||
which we define using `bench` declarations in cabal files.
 | 
					which we define using `bench` declarations in cabal files.
 | 
				
			||||||
@ -524,7 +242,7 @@ Summary (best iteration):
 | 
				
			|||||||
Finally, for quick, fine-grained performance measurements when troubleshooting or optimising, I use
 | 
					Finally, for quick, fine-grained performance measurements when troubleshooting or optimising, I use
 | 
				
			||||||
[dev.hs](https://github.com/simonmichael/hledger/blob/master/dev.hs).
 | 
					[dev.hs](https://github.com/simonmichael/hledger/blob/master/dev.hs).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Generate sample journal files
 | 
					#### Generate sample journal files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Synthetic data files like `examples/100x100x10.journal` are useful for benchmarks and testing.
 | 
					Synthetic data files like `examples/100x100x10.journal` are useful for benchmarks and testing.
 | 
				
			||||||
The numbers describe the number of transactions, number of accounts, and maximum account depth respectively.
 | 
					The numbers describe the number of transactions, number of accounts, and maximum account depth respectively.
 | 
				
			||||||
@ -547,7 +265,7 @@ tools/generatejournal 3 5 5 --chinese >examples/chinese.journal
 | 
				
			|||||||
tools/generatejournal 3 5 5 --mixed >examples/mixed.journal
 | 
					tools/generatejournal 3 5 5 --mixed >examples/mixed.journal
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Run tests
 | 
					#### Run tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This command will install haskell dependencies (you might need to
 | 
					This command will install haskell dependencies (you might need to
 | 
				
			||||||
install additional system dependencies yourself) and run the package
 | 
					install additional system dependencies yourself) and run the package
 | 
				
			||||||
@ -579,7 +297,221 @@ Test haddock doc generation:
 | 
				
			|||||||
$ make haddocktest
 | 
					$ make haddocktest
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Add a test
 | 
					
 | 
				
			||||||
 | 
					### Developer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Do code review
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- review and discuss new pull requests and commits on github
 | 
				
			||||||
 | 
					- set up for development and test the latest changes in your own repo
 | 
				
			||||||
 | 
					- read the existing [code docs and source](#quick-links)
 | 
				
			||||||
 | 
					- send feedback or discuss via irc or list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Install stack and git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[stack](https://github.com/commercialhaskell/stack/wiki/Downloads) is
 | 
				
			||||||
 | 
					the recommended tool for building hledger from source.
 | 
				
			||||||
 | 
					It builds haskell projects, installing required haskell libraries as needed.
 | 
				
			||||||
 | 
					It can also install GHC (the compiler) and (on windows) git, if needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You don't need to use stack, if you are already expert with the older
 | 
				
			||||||
 | 
					cabal tool, or even just GHC, but I won't attempt to document those
 | 
				
			||||||
 | 
					procedures; these docs assume you have downloaded and installed stack.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					On Windows, you should choose the 64-bit stack download if you will be
 | 
				
			||||||
 | 
					processing >50,000 transactions at a time with hledger
 | 
				
			||||||
 | 
					([#275](https://github.com/simonmichael/hledger/issues/275)).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[git](http://git-scm.com) is the revision control tool you'll need to
 | 
				
			||||||
 | 
					fetch the latest hledger source and submit changes. On windows, stack
 | 
				
			||||||
 | 
					can install it for you. These docs assume you have installed git and
 | 
				
			||||||
 | 
					know a little about how to use it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Install other optional tools
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Up-to-date `alex`, `happy`, and `haddock` tools are required, but `stack` should install those for you.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here are some optional extra tools:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- `shelltestrunner` is useful for running functional tests.
 | 
				
			||||||
 | 
					- `hasktags` is an easy way to generate editor tag files for quick source code navigation.
 | 
				
			||||||
 | 
					- `profiteur` is for reporting stack profiles.
 | 
				
			||||||
 | 
					- `hpack` regenerates cabal files when package.yaml files have been updated.
 | 
				
			||||||
 | 
					- `hoogle` is for searching source code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can install them all with:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					$ stack install shelltestrunner hasktags profiteur hpack hoogle
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Get the latest hledger source
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					$ git clone code.hledger.org hledger    # aka github.com/simonmichael/hledger.git
 | 
				
			||||||
 | 
					$ cd hledger
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					Old instructions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Get [GHC](https://www.haskell.org/ghc/) and [cabal-install](http://hackage.haskell.org/package/cabal-install) installed.
 | 
				
			||||||
 | 
					   I recommend the [stackage.org install guide](http://www.stackage.org/install).
 | 
				
			||||||
 | 
					   You can see which GHC versions are officially supported in the `tested-with` field in
 | 
				
			||||||
 | 
					   [hledger.cabal](http://hackage.haskell.org/package/hledger/hledger.cabal),
 | 
				
			||||||
 | 
					   [hledger-ui.cabal](http://hackage.haskell.org/package/hledger-ui/hledger-ui.cabal),
 | 
				
			||||||
 | 
					   [hledger-web.cabal](http://hackage.haskell.org/package/hledger-web/hledger-web.cabal).
 | 
				
			||||||
 | 
					   Older versions may also work.
 | 
				
			||||||
 | 
					2. Get [git](http://git-scm.com) installed.
 | 
				
			||||||
 | 
					3. Get [GNU Make](http://www.gnu.org/software/make) installed (unless you don't care about the Makefile's conveniences).
 | 
				
			||||||
 | 
					   On some platforms the command will be eg `gmake` instead of `make`.
 | 
				
			||||||
 | 
					4. Get the hledger repo:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```shell
 | 
				
			||||||
 | 
					    $ git clone https://github.com/simonmichael/hledger.git
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					5. You might want to install or upgrade some of these haskell developer tools.
 | 
				
			||||||
 | 
					   If you're not sure, skip this step and return to it as needed.
 | 
				
			||||||
 | 
					   Be sure the cabal bin directory where these are installed (eg ~/.cabal/bin) is in your PATH.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```shell
 | 
				
			||||||
 | 
					    $ cabal update
 | 
				
			||||||
 | 
					    $ cabal install alex happy       # if you get alex/happy-related errors when building hledger
 | 
				
			||||||
 | 
					    $ cabal install haddock          # needed to build hledger API docs
 | 
				
			||||||
 | 
					    $ cabal install shelltestrunner  # needed to run hledger functional tests (may need latest git version)
 | 
				
			||||||
 | 
					    $ cabal install hoogle hlint     # maybe useful for searching API docs and checking code
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    You'll also want a comfortable code editor, preferably with Haskell support.
 | 
				
			||||||
 | 
					    (I use emacs + [haskell-mode](https://github.com/haskell/haskell-mode),
 | 
				
			||||||
 | 
					    or occasionally [IntelliJ IDEA](https://www.jetbrains.com/idea/download) + one of the [plugins](https://www.google.com/search?hl=en&q=intellij+plugins+haskell)).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					6. Install haskell libs required by hledger:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```shell
 | 
				
			||||||
 | 
					    $ cd hledger
 | 
				
			||||||
 | 
					    $ cabal sandbox init   # optional
 | 
				
			||||||
 | 
					    $ make installdeps     # or cabal install --only-dep ./hledger-lib ./hledger [./hledger-web]
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This will install the required dependencies from Hackage.
 | 
				
			||||||
 | 
					    If you're new to cabal, you can expect problems at this stage.
 | 
				
			||||||
 | 
					    The usual remedy is to ensure you start with a clean package db, eg by doing `cabal sandbox init`.
 | 
				
			||||||
 | 
					    You can simplify and speed up this step a lot by commenting out
 | 
				
			||||||
 | 
					    hledger-web in the `PACKAGES` list in the [Makefile](https://github.com/simonmichael/hledger/blob/master/Makefile#L41).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					7. Build with cabal:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```shell
 | 
				
			||||||
 | 
					    $ make cabalbuild
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (Tip: `make cabalCMD` runs `cabal CMD` in each of the hledger packages).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					8. Build with GHC:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```shell
 | 
				
			||||||
 | 
					    $ make bin/hledgerdev
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This builds hledger (and hledger-lib) with GHC directly, without using cabal,
 | 
				
			||||||
 | 
					    and as quickly as possible, without optimizations (the "dev" suffix is a reminder of this).
 | 
				
			||||||
 | 
					    I use and recommend this method for development, as it crosses package boundaries and ensures you are building the latest code.
 | 
				
			||||||
 | 
					    However it needs some files generated by cabal build, which is why we did that first.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Use the Makefile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A Makefile is provided to make common developer tasks easy to remember,
 | 
				
			||||||
 | 
					and to insulate us a little from the ever-evolving Haskell tools ecosystem.
 | 
				
			||||||
 | 
					Using it is entirely optional, but recommended.
 | 
				
			||||||
 | 
					You'll need [GNU Make](http://www.gnu.org/software/make) installed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The Makefile is self-documenting. Run `make` to see a list of the main make rules:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					$ make
 | 
				
			||||||
 | 
					Makefile:37: -------------------- hledger make rules --------------------
 | 
				
			||||||
 | 
					Makefile:39: make [help] -- list documented rules in this makefile. make -n RULE shows more detail.
 | 
				
			||||||
 | 
					Makefile:204: (INSTALLING:)
 | 
				
			||||||
 | 
					Makefile:206: make install -- download dependencies and install hledger executables to ~/.local/bin or equivalent (with stack)
 | 
				
			||||||
 | 
					Makefile:231: (BUILDING:)
 | 
				
			||||||
 | 
					Makefile:235: make build -- download dependencies and build hledger executables (with stack)
 | 
				
			||||||
 | 
					Makefile:304: make hledgerdev -- quickly build the hledger executable (with ghc and -DDEVELOPMENT)
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To see what a make rule will do without actually doing it, use the `-n` flag:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					$ make build -n
 | 
				
			||||||
 | 
					stack build
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					$ make test -n
 | 
				
			||||||
 | 
					(stack test \
 | 
				
			||||||
 | 
							&& echo pkgtest PASSED) || echo pkgtest FAILED
 | 
				
			||||||
 | 
					(stack exec hledger test \
 | 
				
			||||||
 | 
							&& echo builtintest PASSED) || echo builtintest FAILED
 | 
				
			||||||
 | 
					(COLUMNS=80 PATH=`pwd`/bin:/home/simon/src/hledger/bin:/home/simon/.local/bin:/home/simon/.cabal/bin:/opt/ghc/7.10.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/var/lib/gems/1.9.1/bin stack exec -- shelltest --execdir -- -j16 --hide-successes tests \
 | 
				
			||||||
 | 
							&& echo functest PASSED) || echo functest FAILED
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Build or install hledger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Run `make` to see a list of build rules. You probably want `build` or `install`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`make build` runs stack build, which downloads required haskell
 | 
				
			||||||
 | 
					dependencies and builds all hledger packages.
 | 
				
			||||||
 | 
					The resulting executables will be somewhere under .stack-work, eg in
 | 
				
			||||||
 | 
					`.stack-work/install/i386-linux/lts-3.0/7.10.2/bin/`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					$ make build
 | 
				
			||||||
 | 
					stack build
 | 
				
			||||||
 | 
					hledger-lib-0.27: configure
 | 
				
			||||||
 | 
					hledger-lib-0.27: build
 | 
				
			||||||
 | 
					hledger-lib-0.27: install
 | 
				
			||||||
 | 
					hledger-0.27: configure
 | 
				
			||||||
 | 
					hledger-0.27: build
 | 
				
			||||||
 | 
					Progress: 1/4
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note stack will install required haskell libraries, but not C
 | 
				
			||||||
 | 
					libraries such as curses or terminfo. If you get a build error, it is
 | 
				
			||||||
 | 
					likely because one of these is missing, in which case you must
 | 
				
			||||||
 | 
					identify and install it yourself using your system's package
 | 
				
			||||||
 | 
					manager. This is usually a bit harder on Windows.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`make install` runs stack install, which does everything stack build does and also
 | 
				
			||||||
 | 
					copies the executables to `~/.local/bin` or the Windows equivalent.
 | 
				
			||||||
 | 
					You should make sure this directory is in your `$PATH`, so that you can just type
 | 
				
			||||||
 | 
					`hledger` to run the latest.
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					$ make install
 | 
				
			||||||
 | 
					stack install
 | 
				
			||||||
 | 
					NOTE: the install command is functionally equivalent to 'build --copy-bins'
 | 
				
			||||||
 | 
					hledger-0.27: build
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					Copied executables to /Users/simon/.local/bin/:
 | 
				
			||||||
 | 
					- hledger-web
 | 
				
			||||||
 | 
					- hledger-ui
 | 
				
			||||||
 | 
					- hledger
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can save time and effort by building just the package(s) you're interested in.
 | 
				
			||||||
 | 
					To install just the hledger command-line tool, but not hledger-ui or (especially costly)
 | 
				
			||||||
 | 
					hledger-web, do:
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					$ stack install hledger
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(This looks like the [download page](download) command for installing the latest hledger release from Stackage.
 | 
				
			||||||
 | 
					The difference is, here we are running it inside the hledger source tree, so the source version will be installed.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Add a test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- identify what to test
 | 
					- identify what to test
 | 
				
			||||||
- choose the test type: unit ? functional ? benchmark ?
 | 
					- choose the test type: unit ? functional ? benchmark ?
 | 
				
			||||||
@ -588,7 +520,7 @@ $ make haddocktest
 | 
				
			|||||||
- write test, verify expected result
 | 
					- write test, verify expected result
 | 
				
			||||||
- get it committed
 | 
					- get it committed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Use the REPL (GHCI)
 | 
					#### Use the REPL (GHCI)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These all work from the main hledger source directory (at least).
 | 
					These all work from the main hledger source directory (at least).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -641,14 +573,7 @@ $ make ghci-dev
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Improve the documentation
 | 
					#### Fix a bug or add a feature
 | 
				
			||||||
 | 
					 | 
				
			||||||
- get familiar with the website and documentation online, review and test
 | 
					 | 
				
			||||||
- get familiar with the site/doc source files (see Makefile)
 | 
					 | 
				
			||||||
- get the latest hledger source
 | 
					 | 
				
			||||||
- send patches with names prefixed with "doc: " (or "site: ")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Fix a bug or add a feature
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
- research, discuss, validate the issue/feature on irc/list/bug tracker
 | 
					- research, discuss, validate the issue/feature on irc/list/bug tracker
 | 
				
			||||||
- look for related tests, run the tests and check they are passing
 | 
					- look for related tests, run the tests and check they are passing
 | 
				
			||||||
@ -657,7 +582,7 @@ $ make ghci-dev
 | 
				
			|||||||
- include any related issue numbers in the patch name, eg: "fix for blah blah (#NNN)"
 | 
					- include any related issue numbers in the patch name, eg: "fix for blah blah (#NNN)"
 | 
				
			||||||
- get it committed
 | 
					- get it committed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Get your changes accepted
 | 
					#### Get your changes accepted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Follow the usual github workflow:
 | 
					Follow the usual github workflow:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -670,25 +595,50 @@ Follow the usual github workflow:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
If you're new to this process, [help.github.com](http://help.github.com) may be useful.
 | 
					If you're new to this process, [help.github.com](http://help.github.com) may be useful.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Become a contributor
 | 
					#### Join the contributors list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- after getting one or more patches committed, read and sign the [contributor list & agreement](contributors.html)
 | 
					- after getting one or more patches committed, read and sign the [contributor list & agreement](contributors.html)
 | 
				
			||||||
- or, [ask](#how-to-get-help) to be added
 | 
					- or, [ask](#how-to-get-help) to be added
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Do code review
 | 
					### Technical Writer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- review and discuss new pull requests and commits on github
 | 
					- get familiar with the website and documentation online, review and test
 | 
				
			||||||
- set up for development and test the latest changes in your own repo
 | 
					- get familiar with the site/doc source files (see Makefile)
 | 
				
			||||||
- read the existing [code docs and source](#quick-links)
 | 
					- get the latest hledger source
 | 
				
			||||||
- send feedback or discuss via irc or list
 | 
					- send patches with names prefixed with "doc: " (or "site: ")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Help with packaging
 | 
					### Graphics Designer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- more/better logos & graphics
 | 
				
			||||||
 | 
					- illustrations and diagrams
 | 
				
			||||||
 | 
					- web design mockups for home page, site, hledger-web UI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Communicator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Marketing and market understanding is vital.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- clarify project goals, value proposition, brand, mission, story
 | 
				
			||||||
 | 
					- monitor product-market fit
 | 
				
			||||||
 | 
					- identify new opportunities
 | 
				
			||||||
 | 
					- influence developer priorities
 | 
				
			||||||
 | 
					- spread the word!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Maintainer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Help with issue management
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- watch tracker activity, report status
 | 
				
			||||||
 | 
					- apply/update labels where needed
 | 
				
			||||||
 | 
					- follow up on dormant issues
 | 
				
			||||||
 | 
					- facilitate a consistently good bug-reporting & PR-contributing experience
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Help with packaging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- package hledger for linux distros, macports, etc.
 | 
					- package hledger for linux distros, macports, etc.
 | 
				
			||||||
- develop mac/windows installers
 | 
					- develop mac/windows installers
 | 
				
			||||||
- find and assist distro packagers/installer developers
 | 
					- find and assist distro packagers/installer developers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Help with project management
 | 
					#### Help with project management
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- clarify/update goals and principles
 | 
					- clarify/update goals and principles
 | 
				
			||||||
- monitor, report on project progress and performance
 | 
					- monitor, report on project progress and performance
 | 
				
			||||||
@ -697,7 +647,7 @@ If you're new to this process, [help.github.com](http://help.github.com) may be
 | 
				
			|||||||
- marketing, communication, outreach
 | 
					- marketing, communication, outreach
 | 
				
			||||||
- release management, roadmap planning
 | 
					- release management, roadmap planning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Do a major release
 | 
					#### Do a major release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- review the release how-to in the developer guide
 | 
					- review the release how-to in the developer guide
 | 
				
			||||||
    - and update as needed
 | 
					    - and update as needed
 | 
				
			||||||
@ -795,7 +745,7 @@ If you're new to this process, [help.github.com](http://help.github.com) may be
 | 
				
			|||||||
    - handle problem reports, support requests
 | 
					    - handle problem reports, support requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Do a minor release
 | 
					#### Do a minor release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Differences from a major release:
 | 
					Differences from a major release:
 | 
				
			||||||
work in a release branch,
 | 
					work in a release branch,
 | 
				
			||||||
@ -921,7 +871,7 @@ Dev sprint/party #2 was on 2015/10/10.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Implementation notes
 | 
					## Code architecture
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### hledger
 | 
					### hledger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1067,3 +1017,79 @@ makefile for instructions). This rebuilds automatically when haskell
 | 
				
			|||||||
files change in any of the hledger{-lib,,-web} packages.
 | 
					files change in any of the hledger{-lib,,-web} packages.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script async defer src="https://buttons.github.io/buttons.js"></script>
 | 
					<script async defer src="https://buttons.github.io/buttons.js"></script>
 | 
				
			||||||
 | 
					## Quick links
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					tr {
 | 
				
			||||||
 | 
					    border-top:thin solid #bbb;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					<!-- | hledger.org   | [combined release notes](release notes), [pre-compiled binaries](download) | -->
 | 
				
			||||||
 | 
					<!-- [web ui demo](http://demo.hledger.org/register?q=inacct%3Aassets%3Abank%3Achecking+sym%3A\%24) -->
 | 
				
			||||||
 | 
					<!-- [](https://travis-ci.org/simonmichael/hledger) -->
 | 
				
			||||||
 | 
					<!-- [](http://packdeps.haskellers.com/feed?needle=hledger) -->
 | 
				
			||||||
 | 
					<!-- [](http://bugs.hledger.org) -->
 | 
				
			||||||
 | 
					<!-- [](https://github.com/simonmichael/hledger/issues?q=label:bounty) -->
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					|-------------------------|----------------------------------------------------------------------------|
 | 
				
			||||||
 | 
					| IRC                     | Join [#hledger](http://irc.hledger.org) ([chat log](http://ircbrowse.net/browse/hledger); see also [#ledger](http://webchat.freenode.net?channels=ledger&randomnick=1)) |
 | 
				
			||||||
 | 
					| Mail list               | [list.hledger.org](http://list.hledger.org) ([Gmane](http://dir.gmane.org/gmane.comp.finance.ledger.hledger)) |
 | 
				
			||||||
 | 
					| Twitter                 | [#hledger](https://twitter.com/search?q=%23hledger&src=typd&f=realtime), see also [#ledgercli](https://twitter.com/search?q=%23ledgercli&src=typd&f=realtime), [#plaintextaccounting](https://twitter.com/search?q=%23plaintextaccounting&src=typd&f=realtime), <a href="https://twitter.com/ledgertips">@LedgerTips</a> |
 | 
				
			||||||
 | 
					| hledger-web demo          | [demo.hledger.org](http://demo.hledger.org) |
 | 
				
			||||||
 | 
					| hledger-api demo        | [demo.hledger.org/api](http://demo.hledger.org/api/swagger.json), [in swagger editor](http://editor.swagger.io/#/?import=demo.hledger.org/api/swagger.json&no-proxy)
 | 
				
			||||||
 | 
					| Trello                  | [old backlog/wishlist planning board](http://trello.hledger.org) |
 | 
				
			||||||
 | 
					| Github                  | [simonmichael/hledger](http://github.com/simonmichael/hledger) (alias: code.hledger.org), [forks](http://forked.yannick.io/simonmichael/hledger) <br> [commits](http://github.com/simonmichael/hledger/commits), <!-- [unreleased commits](https://github.com/simonmichael/hledger/compare/0.23...master), [release branch commits](https://github.com/simonmichael/hledger/compare/master...0.23), --> [COMMITS!](http://starlogs.net/#simonmichael/hledger) <br> [open bugs](http://bugs.hledger.org), [open wishes](http://wishes.hledger.org), [open pull requests](http://prs.hledger.org), [all issues](https://github.com/simonmichael/hledger/issues?q=) <br> [issues with bounty tag](https://github.com/simonmichael/hledger/issues?q=label:bounty), [bountysource bounties](https://github.com/simonmichael/hledger/issues?q=%22Add%20to%20the%20bounty%20at%20Bountysource%22%20OR%20%22claim%20the%20bounty%20on%20Bountysource%22%20OR%20%22bounty%20on%20this%20issue%20has%20been%20claimed%20at%20Bountysource%22%20), [codemill bounties](https://github.com/simonmichael/hledger/issues?q=codemill), [codefund bounties](https://github.com/simonmichael/hledger/issues?utf8=✓&q=codefund) <br> stars:  <a class="github-button" href="https://github.com/simonmichael/hledger" data-icon="octicon-star" data-count-href="/simonmichael/hledger/stargazers" data-count-api="/repos/simonmichael/hledger#stargazers_count" data-count-aria-label="# stargazers on GitHub" aria-label="Star simonmichael/hledger on GitHub"></a> (#99 of ~30k [starred haskell projects](https://github.com/search?o=desc&q=language%3AHaskell+stars%3A%3E370&ref=searchresults&s=stars&type=Repositories) in 2016/04, #71 in 2016/12, #65 in 2017/3) <br> [{width=520 height=170}](https://waffle.io/simonmichael/hledger/metrics) |
 | 
				
			||||||
 | 
					| Travis CI               | [{height=20}](https://travis-ci.org/simonmichael/hledger)
 | 
				
			||||||
 | 
					| Appveyor CI             | [disabled](https://github.com/simonmichael/hledger/issues/424) <!-- [{height=20}](https://ci.appveyor.com/project/simonmichael/hledger) latest binaries: [hledger.exe](https://ci.appveyor.com/api/projects/simonmichael/hledger/artifacts/hledger.exe?branch=master), [hledger-web.exe](https://ci.appveyor.com/api/projects/simonmichael/hledger/artifacts/hledger-web.exe?branch=master) -->
 | 
				
			||||||
 | 
					| Hackage                 | packages: [hledger-lib](http://hackage.haskell.org/package/hledger-lib), [hledger](http://hackage.haskell.org/package/hledger), [hledger-ui](http://hackage.haskell.org/package/hledger-ui), [hledger-web](http://hackage.haskell.org/package/hledger-web), [hledger-api](http://hackage.haskell.org/package/hledger-api), [hledger-diff](http://hackage.haskell.org/package/hledger-diff), [hledger-interest](http://hackage.haskell.org/package/hledger-interest), [hledger-irr](http://hackage.haskell.org/package/hledger-irr), [\*hledger\*](http://hackage.haskell.org/packages/search?terms=hledger) <!-- [](http://hackage.haskell.org/package/hledger) --> <!-- 2017/4 not updating  <br> GHC compatibility: [hledger-lib](http://matrix.hackage.haskell.org/package/hledger-lib), [hledger](http://matrix.hackage.haskell.org/package/hledger), [hledger-ui](http://matrix.hackage.haskell.org/package/hledger-ui), [hledger-web](http://matrix.hackage.haskell.org/package/hledger-web), [hledger-api](http://matrix.hackage.haskell.org/package/hledger-api) --> <br> reverse deps: [hledger-lib](http://packdeps.haskellers.com/reverse/hledger-lib), [hledger](http://packdeps.haskellers.com/reverse/hledger), [hledger-ui](http://packdeps.haskellers.com/reverse/hledger-ui), [hledger-web](http://packdeps.haskellers.com/reverse/hledger-web), [hledger-api](http://packdeps.haskellers.com/reverse/hledger-api) <br> [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger-lib) [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger) [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger-ui) [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger-web) [{height=20}](http://packdeps.haskellers.com/feed?needle=hledger-api) |
 | 
				
			||||||
 | 
					| Stackage                | [build-constraints.yaml](https://github.com/fpco/stackage/blob/master/build-constraints.yaml), [open hledger-related issues](https://github.com/fpco/stackage/search?q=hledger+is%3Aopen&type=Issues) |
 | 
				
			||||||
 | 
					| Debian                  | source packages: [haskell-hledger-lib](http://tracker.debian.org/pkg/haskell-hledger-lib), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger-lib), [haskell-hledger](http://tracker.debian.org/pkg/haskell-hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger), [haskell-hledger-ui](http://tracker.debian.org/pkg/haskell-hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger-ui), [haskell-hledger-web](http://tracker.debian.org/pkg/haskell-hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger-web) <br> binary packages: <br> stable [hledger](https://packages.debian.org/stable/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=stable), <!-- [hledger-ui](https://packages.debian.org/stable/hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-ui;dist=stable), --> [hledger-web](https://packages.debian.org/stable/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=stable) <br> testing [hledger](https://packages.debian.org/testing/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=testing), <!-- [hledger-ui](https://packages.debian.org/testing/hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-ui;dist=testing), --> [hledger-web](https://packages.debian.org/testing/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=testing) <br> unstable [hledger](https://packages.debian.org/unstable/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=unstable), [hledger-ui](https://packages.debian.org/unstable/hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-ui;dist=unstable), [hledger-web](https://packages.debian.org/unstable/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=unstable) <br> experimental [hledger](https://packages.debian.org/experimental/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=experimental), [hledger-ui](https://packages.debian.org/experimental/hledger-ui), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-ui;dist=experimental), [hledger-web](https://packages.debian.org/experimental/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=experimental) <br> all [\*hledger\*](https://packages.debian.org/search?searchon=names&keywords=hledger) <br> popularity stats: [hledger](https://qa.debian.org/popcon.php?package=haskell-hledger), [hledger-ui](https://qa.debian.org/popcon.php?package=haskell-hledger-ui), [hledger-web](https://qa.debian.org/popcon.php?package=haskell-hledger-web) <br> [PTS help](https://www.debian.org/doc/manuals/developers-reference/resources.html#pkg-tracking-system) |
 | 
				
			||||||
 | 
					| Ubuntu                  | source packages: [haskell-hledger-lib](https://launchpad.net/ubuntu/+source/haskell-hledger-lib), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger-lib), [haskell-hledger](https://launchpad.net/ubuntu/+source/haskell-hledger), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger), [haskell-hledger-ui](https://launchpad.net/ubuntu/+source/haskell-hledger-ui), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger-ui), [haskell-hledger-web](https://launchpad.net/ubuntu/+source/haskell-hledger-web), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger-web) <br> binary packages: [\*hledger\*](http://packages.ubuntu.com/search?suite=all&searchon=names&keywords=hledger) |
 | 
				
			||||||
 | 
					| Gentoo                  | [hledger](http://gpo.zugaina.org/dev-haskell/hledger), [hledger-web](http://gpo.zugaina.org/dev-haskell/hledger-web), [\*hledger\*](http://gpo.zugaina.org/Search?search=hledger) |
 | 
				
			||||||
 | 
					| Fedora                  | [hledger](https://apps.fedoraproject.org/packages/hledger), [\*hledger\*](https://apps.fedoraproject.org/packages/s/hledger), [hledger (package db)](https://admin.fedoraproject.org/pkgdb/package/hledger/), [Haskell SIG](http://fedoraproject.org/wiki/Haskell_SIG) |
 | 
				
			||||||
 | 
					| Void Linux              | [hledger\*](https://github.com/voidlinux/void-packages/search?utf8=✓&q=hledger) |
 | 
				
			||||||
 | 
					| Nix                     | [\*hledger\*](http://hydra.nixos.org/search?query=hledger) |
 | 
				
			||||||
 | 
					| Homebrew                | [hledger](https://github.com/Homebrew/homebrew-core/blob/master/Formula/hledger.rb) |
 | 
				
			||||||
 | 
					| Sandstorm               | [hledger web app & reviews](https://apps.sandstorm.io/app/8x12h6p0x0nrzk73hfq6zh2jxtgyzzcty7qsatkg7jfg2mzw5n90), [issues](https://github.com/simonmichael/hledger/issues?utf8=✓&q=label%3A%22platform%3A%20sandstorm%22%20)
 | 
				
			||||||
 | 
					| Reference               | [GHC Can I Use](http://damianfral.github.io/ghcaniuse/) |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- list the debian packages for clarity:
 | 
				
			||||||
 | 
					3 source:
 | 
				
			||||||
 | 
					haskell-hledger-lib
 | 
				
			||||||
 | 
					haskell-hledger
 | 
				
			||||||
 | 
					haskell-hledger-web
 | 
				
			||||||
 | 
					8 binary:
 | 
				
			||||||
 | 
					hledger
 | 
				
			||||||
 | 
					hledger-web
 | 
				
			||||||
 | 
					libghc-hledger-dev
 | 
				
			||||||
 | 
					libghc-hledger-doc
 | 
				
			||||||
 | 
					libghc-hledger-prof
 | 
				
			||||||
 | 
					libghc-hledger-lib-dev
 | 
				
			||||||
 | 
					libghc-hledger-lib-doc
 | 
				
			||||||
 | 
					libghc-hledger-lib-prof
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- old/future links -->
 | 
				
			||||||
 | 
					<!-- [haddock coverage](http://hledger.org/profs/haddock-coverage), -->
 | 
				
			||||||
 | 
					<!-- [unit test coverage](http://hledger.org/profs/coverage/hpc_index_fun.html), -->
 | 
				
			||||||
 | 
					<!-- [benchmark](http://hledger.org/profs/latest.bench) -->
 | 
				
			||||||
 | 
					<!-- [profile](http://hledger.org/profs/latest.prof), -->
 | 
				
			||||||
 | 
					<!-- [heap](http://hledger.org/profs/latest.ps) -->
 | 
				
			||||||
 | 
					<!-- [developer notes](http://github.com/simonmichael/hledger/NOTES.org)\ -->
 | 
				
			||||||
 | 
					<!-- [browse dev API docs](http://hledger.org/api/frames.html) -->
 | 
				
			||||||
 | 
					<!-- [How to clone it](contributing#set-up-for-development) -->
 | 
				
			||||||
 | 
					<!-- [hledger-web dev demo](http://demo.hledger.org:5001) -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- hoogle search form
 | 
				
			||||||
 | 
					<script type="text/javascript" src="http://haskell.org/hoogle/datadir/resources/jquery-1.4.2.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="http://haskell.org/hoogle/datadir/resources/hoogle.js"></script>
 | 
				
			||||||
 | 
					<form action="http://haskell.org/hoogle/" method="get" style="display:inline; margin:0; padding:0;">
 | 
				
			||||||
 | 
					<input type="hidden" name="prefix" value="+hledger +hledger-lib +hledger-web +hledger-vty +hledger-chart" />
 | 
				
			||||||
 | 
					<span style="white-space:nowrap;"
 | 
				
			||||||
 | 
					><input type="text" name="hoogle" id="hoogle" accesskey="1" size="30"
 | 
				
			||||||
 | 
					/><input type="submit" value="search API with hoogle"
 | 
				
			||||||
 | 
					/></span>
 | 
				
			||||||
 | 
					</form>
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user