It's a nice system in PHP. There are quite a few of them. Like ledger-cli [1] in C++ and emacs lisp, hledger [2] in Haskell and beancount [3] with fava [4] in python.
We used ledger-cli and beancount with fava and built automatic creation of accounting entries using machine learning and Bayesian alogrithms by analyzing bank and credit card statements. You can use powerful icsv2ledger [5], smart importer [6] and the awesome list [7] to get importers for various banks and other utilities.
I use and love ledger-cli but importing/downloading bank data is the biggest pain point.
I'm currently using ledger-autosync (https://github.com/egh/ledger-autosync) to import OFX/QFX files. For some banks it can automatically pull the data using ofxclient (https://github.com/captin411/ofxclient) but for most of my bank accounts this is broken and I need to manually download the OFX file before importing with ledger-autosync. It works OK, I wish I didn't have to do the manual download, but the simplicity of the setup is nice.
I've read of other setups using Plaid or Puppeteer to download their data. Would be interested to hear about what other people are currently using in mid-late 2019 to pull their financial data.
I was using Tiller (https://www.tillerhq.com), pulling from US and European banks to a Google sheet, then a command line tool to pull CSV from there. This worked well except for not handling foreign currency (it calls everything $), adding a bit of extra latency/uncertainty on top of the back end (Yodlee), and eventually forgetting to update your sheet unless you manually visit it every so often.
Currently I’m using plaid2qif (https://github.com/ebridges/plaid2qif) to pull CSV from US banks via Plaid’s (https://plaid.com) API. This is more developer friendly and gets the latest data to me faster, but the data is not quite as good as Tiller/Yodlee’s, at least for Wells Fargo bank; Plaid gives more truncated transaction descriptions.
Both of these have the big downside of sharing your bank credentials with others. With Plaid I guess there’s one less party involved. My current alternative is manually visit each bank’s site and download CSV. Ideally I want to get timely data every day (the easiest way to stay on top of the books), so the manual downloading (click, wait, click, relogin after timeout..., wait, wait for paypal’s download, retry when it gets stuck..) gets really tiresome.
Glad you like ledger-autosync! I agree, its very annoying to have to download OFX files. I wish more banks supported the OFX protocol, or really any sort of automated download. I should probably look into plaid and see if it might work.
Yes, but likely only when I'm very reliant on it. As it is, it's very ad hoc and buggy.
To be frank, I spend 90+% of my time in KMyMoney. I need Ledger only for its virtual transaction features (for budgeting). The other use case I have for ledger is to perform some analyses/reports in it that KMyMoney doesn't provide.
There's nothing "smart" about it. It's simply a script that takes in a kmy file and creates a valid Ledger file. It's been a while since I looked at it, but at the moment I doubt it handles things like stocks and commodities, etc.
Still, I'd rather use KMyMoney to enter transactions than using the Emacs mode for Ledger.
I have been looking for something like this for sometime. Right now I'm using YNAB with manual imports from bunq csv exports but I will give it a try and try out the bunq integration with firefly.
Does Firefly also support the features of YNAB, if you know by any chance?
They claim they have budgets, 'categories', and something I wish YNAB had, 'tags'. Tags would be nice so that I could categorize expenses normally, e.g. 'restaurants', but also group them, e.g. 'trip to X'.
Do you know of a way to do cross-account budgeting in ledger CLI (or any of the similar tools)?
This was discussed for beancount a few years ago[1] and basically means that I want to distribute the money for a budget across multiple accounts but last I looked (over a year ago) there was no tool that provides this feature.
ledger-cli is my current tool and all-time favourite. The only thing I'm missing (and thinking of spending a weekend to write) is a self-hosted web UI for data entry. Not that I needed - Emacs is a more productive data entry UI than anything that was ever done in a web browser. But my wife wants to help me retype receipts, and I need something ergonomic that's focused on just that: adding trivial transactions.
hledger has a web interface, and it mostly speaks ledger. Looks like most of the stuff it doesn't understand it'll still cleanly parse and then ignore.
There is at lease one vulnerability in the demo: looks like dev or something is on in the framework. Sending bad input in at least one place exposes debug info with db/api credentials along with other sensitive info. Email in my profile if more detail needed.
Wow, this is all I ever wanted. A self hosted PHP based financial manager with a good interface and an API. I am SO excited. I'm going to throw it on my server instantly. It seems to also have a lot of features! This is great! Thanks!
Self-hosted means you control your data, though it certainly leaves you open to more attacks if it's open to the internet, but you can always protect it by hiding it behind a VPN. Having financials available everywhere is very convenient, and not having data on a mobile device (but accessible on your mobile device) is great for privacy-concerned people.
I'd have to disagree with you. There's tons of people who use them as a mobile-first service (my wife only ever uses the mobile app). I think a subset of tech/privacy savvy people don't like that they went to a cloud based model, but that's a small subset of a small subset.
Mint is another example of a popular financial management tool, that was always cloud-first. It would import transactions by using the same credentials you would use to login to online banking. This wasn't appealing to me. This didn't deter many other people.
I didn't like sharing my credentials either but I was using it – until it stopped working for most of my accounts.
I've since stopped using even the 'manual import' and I've found that reconciling to my bank/financial-company statements manually is much easier overall as importing auto-reconciled transactions but then it was basically impossible to then match any specific balance reported by the bank/financial-company.
At least in my case, it's because I don't know of any better options. Mint is very easy but if something else was almost as easy but provided similar features (or more, even) I'd give it a sincere try. But other options I've heard of are cli tool/emacs packages, which is too much to ask for what is usually less robust and requires significantly more effort/time to get up to speed with and use.
I admittedly haven't been looking for better, but the "double-entry lite" systems I've seen kinda miss the mark a bit.
- Source/destination (as used here) is awkward when transactions have more than one split: at best there's a single source/destination which is entered multiple times and you need to make sure the splits add up right (and that single $50 charge to your credit card doesn't show up that way in the register); at worst you have an m:n split.
- Simple plus/minus without debits and credits (à la hledger, which I am otherwise quite happy about) runs into situations like: I increase my liabilities (e.g. by paying by credit card) by subtracting from the account?!?
I think if you're going to use a GUI then going full debit/credit isn't hard, I got up and running with Quickbooks pretty quickly and GNUCash seems about the same.
EDIT: I don't mean to downplay the accomplishments of the authors of any of the software mentioned, like I said I'm a happy user of hledger and Firefly III looks pretty polished from what I saw of the demo. This is really meant to be more of a meta-comment around the idea that bookkeeping is hard and double-entry debit/credit is doubly so.
> I increase my liabilities (e.g. by paying by credit card) by subtracting from the account?!?
Maybe I'm just inured to the convention, but this makes perfect sense to me. You subtract money from any other account you pay from. At a sufficiently abstract level, paying by credit card is the same thing as overdrawing your checking account. You need to add money to get the balance back to zero.
Makes perfect sense to me too. Credit cards aren't money you have, they're money you can borrow. Paying by credit card is borrowing money. Paying a credit card back means it should show in your system at $0. If your bank shows it at some positive $, that's just convenient financial fiction.
(And possibly dangerous fiction. I think a big part of the way people get in trouble with credit cards is by thinking their credit line is "the money they have", instead of "money they can borrow really fast".)
'0xcde4c3db makes a good point about it making the flow of value clear in the transaction, but the transaction view is already the easy thing to interpret. The value (heh) of bookkeeping is when those flows are aggregated, and the meaning of those aggregations is (admittedly only somewhat) obscured when optimizing for clarifying flows in single transactions.
Charging a credit card to make it more negative does match our intuition of how it affects our overall financial position, but that's due to serendipity. What does it mean that expenses are normally positive, is that a good thing then? Or that my paycheck account is negative?
In the end it's a nit, a small thing I mostly ignore. I just think that part of the complexity it tries to eliminate is essential, with results like negative revenues. It's a leaky abstraction.
It does work for modelling flows, but the meaning of balances gets a bit wonky. Income is revenues - expenses in the debit/credit model, but in the plus/minus model it's -revenue - expenses (hledger's income statement report flips the sign on revenue accounts, so you get the net via the normal equation).
A different way to do double-entry-lite might be to retain plus/minus, but have that operate on the account's normal balance -- pay for expenses by decreasing an asset or increasing a liability. Transactions still balance even if they don't sum to zero -- it makes sense that an IOU balances out the coffee you just got. You do need to understand the four basic account types (explicit equity accounts are arguably not relevant to most individuals), but that's something that's needed anyway. You still don't need to explicitly learn about debits and credits, but if you do it's much closer from here than from the flow-based approach.
Flow is easy, but I feel that in the end modeling the effect on balances is simpler.
For what its worth, I'm an accountant in my day job and our software doesn't differentiate between debits and credits. Debits are positive and credits are negative. You get used to it seeing it all the time.
I am used to it. Mostly. It still throws me for a loop sometimes, like just now when I had to figure out how p/l would be calculated based on the flows.
- Firefly III enforces splits to make sense. Source must be the same for deposits, destinations for withdrawals. It's technically possible to mess up but I never met people who were careless enough to do so.
- Yep. That's always tricky to get right.
I'm halfway between going full accountant (never go full accountant) and basically human. I'm pretty happy with the results so far.
Minor tangential gripe but hamburger menus on desktop are rather annoying. I have a large screen, please make use of it and don't hide important elements away behind a button!
It's frozen at the moment. I need to develop a way-of-working where I can work on v1 and v2 at the same time. That is a headache. And my Vue skills are non-existent so it's a bit of a learning curve. But I hope to push something to develop soon :)
Has anyone here successfully migrated from GnuCash to Firefly III? How does it compare long term? GnuCash is amazing features wise, but the UI and cross platform compatibility is subpar at best.
And more importantly is it possible to import data from GnuCash? Last time I tried it I failed.
I did make an attempt to switch from GnuCash to Firefly III, but had to switch back. As loathed as the GnuCash GUI is, Firefly III simply did not come close to the speed with which I could enter transactions in bulk via the keyboard. Plus, I was too used to GnuCash's data model and way of doing things.
The reason I was drawn to FF III in the first place was because of its aesthetic appeal and visualization features. The graphing and reporting abilities of GnuCash are not to my taste.
What are the GnuCash issues with cross-platform? We used to use it via dropbox on mac, linux and windows and never hit any obvious problems.
The UI however...
I can't get it to use en_US for interface but de_DE for dates/currencies across all platforms. Because GnuCash insists on reading these settings from locales, and I can't get it right to save my life.
So it'll see a comma when I open the file on windows and just report an error.
Right now I'm considering running it in on my server and then connecting to it somehow from all the different platforms.
See the part about adding an environment file on Windows. On Linux, I set my LANG to en_US.UTF-8 but all the LC_* variables (apart from LC_ALL) to en_CA.UTF-8 and that gets me the right UI/formats mix in GnuCash (and also Chromium, which tries to speak British to me otherwise), and hopefully that works on Windows too.
I have moved to Firefly III last year from the "My Expenses" app. Very happy so far, even though I don't use (and hide via uBlock) all the Budget-related items.
Updating is a bit annoying as there are no Debian packages and one has to essentially re-install from scratch on each update, but everything else is working perfectly well. Categorising expenses allows for easy monthly reports on shared expenses, too.
This is amazing, and clearly takes a tremendous amount of work, and judging by the comments here provides an invaluable service to many many people. Which makes it somewhat discouraging that when you look at the Patreon link https://www.patreon.com/jc5, people support him to the tune of only $27/month. Makes me wonder if my ideas for small scale SAAS could ever possibly be financially viable.
That's great to hear people have donated over PayPal, and I suppose it is cool that you think of it less like a way to make a living and more like a hobby. Great job!
Can highly recommend Firefly. Used for a while and it is really powerful, impressive work has been done here. What bothers me (too much) as a former YNAB-user is the limited budget planning view. But the dev already has this on his to-do list.
I'm a current YNAB user find it hard to use any other financial manager software because they only seem to record what happened and not plan for the future.
What made you leave YNAB if you don't mind me asking?
In additional to my personal finances, I currently use Xero for my business, but I also run everything through YNAB as well to actually know the health of my business and how much money I'm making. The book "Profit First" made a lot of sense through a YNAB approach.
One thing that I find surprisingly missing from most budget platforms is a recurring rolling budget post. For instance, let's say we have a clothing "category" I want spend $200 monthly for the entire family. I don't know when I'm going to buy a new winter parka, or the recurring biannual event of buying new shoes for the children. But I do know that $200 monthly is what I believe is reasonable for our income.
I just want the balance on that budget to roll over for every month, so I know how much there is for that particular thing. And if you don't buy any clothing for 2 months, $400 is added to the available fund for that particular budget category.
It extends to a lot of things:
* Day trips
* Saving for car repairs and ultimately a new one.
* Groceries
* Holidays
* Hobbies
* Takeaway
I set this up in ledger, making use of virtual accounts and automatic transactions. Automatic transactions trigger on a certain rule, so I have them setup to Income:Salary transactions and most of my Expense accounts.
This way, every time I receive salary, a fixed amount of my Income:Salary is (virtually) is debited to the virtual account "Clothing". In turn, whenever I make an expense in "Expense:Clothing", the amount is credited from the virtual "Clothing" account with an automatic transaction.
The way ledger keeps track of virtual and real accounts means that I can both see the (accurate) real balance of my checking account, as well as the virtual balance of my Budget accounts.
You do have to set this all up manually however, and it's... complicated. I really like ledger because it lets me setup things this way, but it's not something I'd recommend to others.
This depends on how you look at financing and budgeting (duh). But Firefly III was originally designed to lower your running expenses. It doesn't feature a lot cool budget automation because that leads to more charts but less money.
The original idea was to make it hard (or at least with some friction) to create transactions. This also excluded any way of importing data. That way you feel your transactions twice. Once when you spend the money, and twice when you have to enter it.
Making you finances tangible is a very good way of spending less money. Importing all your shit just gives GIGO but with nicer graphics.
But budget rollover isn't a bad idea at all and it could fit what Firefly III is doing at the moment. I'll make sure to think of a way to implement it.
This is a great case for envelope budgeting, as seen in tools like YNAB and GoodBudget. You can kinda get it to work with liabilities in a double-entry system, but it gets a little strange to spend out of liabilities instead of assets.
This is exactly it. The ability to build up a reserve for larger expenses later has been the single most important thing. Also, the concept of spending money you have, rather than putting everything on a credit card and trying to pay it off next month with 'new money'. That's been a game changer for me.
With anything with double entry bookkeeping, you can book an expense each month for $200 for clothing and have a liability account set up as a clothing reserve account. Then you would have a built up total over time, less anything you purchase.
I could do that - but is it really that foreign to center a budgeting tool around it, so I don't have to go about creating accounts and transactions for every budget category?
In essence, it's just the "envelope" system with a rollover - i.e. if I don't spend all my grocery money this month, just add them to the next months envelope.
It's more than that... when you are living on a tight budget you really want a line graph that tells you what your checking account is going to look like in a week, two weeks, three weeks. Your problem is not necessarily income but cash flow, and you do all of this cash-flow reasoning informally, “I'd better postpone any doctor’s visit until the 15th because usually things are less tense in the middle of the month and I’d like to keep my copays out of it,” but it would be really handy to say “look, if you need to you can spend up to $200 and things will get tight in 9 days time but you will not go broke, assuming you have put everything in properly.”
This sort of diagram is only easily possible if you can specify “here are the deposits that I think are going to happen, and here are the expenses that I think are going to happen.”
And for that, those envelopes are crucial, especially the ability to graph the amounts in the various envelopes and the amount that’s not in any envelope.
That is a matter of fixed recurring bills. I know when I have to pay rent, insurance, loan payments, to a degree utilities ect. Once you have plotted those in the system, you know how much to set aside for that every month and those are funds you cannot touch without a very very good reason. And should you do so anyway because you're terribly ill, you make a plan for how to make up the deficit before the payment happens.
For my personal economy it come out such that the "account" for all of those recurring payments are always significantly in the positive - in other words, I can "borrow" from that "account" without it interfering with my ability to pay the bills. E.g. you have two annual bills of $600, one has a payment date of Jan 1st and the other have Jul 1st. I need to set aside $100 monthly to pay them, but at any payment date there will be $900 in the account, so it's always at least $300 in the positive. It's just a peculiarity that can happen.
So that leaves all the variable expenses, food, clothing, going out, ect, things you can control the magnitude of. Those are well suited for the envelope system. I would personally treat necessaries such as food and transportation as a special envelope in the sense that it's only variable down to a minimum but no further. Clothing on the other hand can be turned down for $0 for quite a while, and "going out" certainly can be $0 for as long as it need to.
How does all that fit in a cash flow analysis then? Well for bills and fixed income it's easy - just make the graph. But for variable expenses it's a bit more hand wavy, because I cannot not buy food for my children, but I can certain not go to that sushi restaurant. And that is where the envelope system is helping me. If I have an unforeseen expense that is greater than what I have in my emergency fund, and there is not enough to borrow from the fixed expense account without compromising payments. Well I have to transfer some funds from the envelops that have a surplus that i can control, such as the "going out" envelope.
Yes, exactly – when I was using GnuCash I tried to create my own 'cash flow' tool using data exported from GnuCash because this was exactly what seemed to be missing in GnuCash. I miss double-entry bookkeeping but YNAB has turned out to be better for me overall.
I feel you. I spent countless hours trying to find a suitable YNAB replacement, but there is none. I want to see what is possible, not was has happened to my money.
I am about to leave YNAB because I am using version 4 (standalone software) which is 32-bit only. My main machine is a Mac so I won't be able to use the software with the next major version. Also, I do not want to use the new YNAB web-based app because the privacy policy is contradictory and their subscription offer is just shitty.
Currently I am using Outbank, which is more like a banking app but has automatic categorization which is quite cool, and you can define budgets. Still, no suitable replacement. I really hope for Firefly to take off with a powerful budget planning somewhere in the future.
There's an open-sourced clone of YNAB (standalone version) called financier (https://financier.io). There's been a few efforts to easily run it locally:
Yeah, I also tried Financier. Although it provides everything needed, I didn't feel very comfortable with it running in the browser and storing the database in the browser too. Backups are hard in this case. Also, when moving to a new system, the import of transactions was a requirement.
I feel your pain – but I'm a happy YNAB user and I've only ever 'known' the web version. (I'm aware of the desktop versions.) I don't use the auto-import features anymore – they never worked consistently with all of my financial providers and I've found that manually reconciling is much better anyways.
Given how awesome YNAB is for me managing my finances, I'm more than happy to pay the subscription.
I honestly thought about moving to the web version, but as stated, especially the storage of my financial data on some server of a random company is a no-go for me. The privacy policy is also everything but nice. They state that all data is encrypted but somewhere else they state that they may have access to it for support and in case of legal obligation. Not really trustworthy.
It doesn't need to be a web application. It's just that making it a web application gets you you stuff like mobile support and synchronization between devices basically for free.
Web apps are nice, because most people have multiple devices nowadays. Having your data located on just one device can be rather annoying. Or having to setup a desktop app and a web server for synchronization isn't as nice either.
It also might be, that lots of people don't even know how to create desktop applications anymore, but most will have done something on the web already.
If you have multiple people managing the money in your household (e.g. marriage), a single desktop application gets awkward in a hurry. Plus a web-based app lets you manage your finances regardless of OS (Windows, Linux, Chromebook) or device (computer, tablet, smartphone) without worrying about whether the author decided to support it or not.
Maybe because it sounds curmudgeonly, without giving much thought to any possible answer. If had been made a Mac app I suppose the OP would say, “Why does this have to be a Mac app?”, or the inverse for a Windows app, more so if it was Linux only. Thinking about these makes it abundantly clear WHY it is a web app... so anyone can use it.
Does anybody know a FOSS zero-based budgeting software? GnuCash or Firefly are great double-entry systems, but for personal budgeting I prefer YNAB or Everypocket styles.
You can simulate various forms of envelope budgeting in Ledger (aka. ledger-cli) and the similar projects like hledger. There are quite a few of blog/forum posts out there that help explain how to do this. If you're specifically looking to emulate YNAB, there are also some posts that deal specifically with this.
It can, if your bank supports Spectre (which apparently is a common API service for banks). It's a bit awkward, you have to sign up for a third party to do it, but worked well for the three months or so I used Firefly.
Speaking of which, does anyone know if EU's PSD2 will finally allow me to read the balance of my own bank account via an API, or do I have to subscribe to whatever fly-by-night ad-driven SaaS that'll get a deal with the banks and scrap their site?
I'm not trying to scrap bank sites, even though I could, because a) it's a PITA to get through the increasing amount of login hoops they deploy, and b) I don't want to risk even a small chance that they'll lock me out of access to my own money because I "hacked" their site.
It would work fine, but each bank has their own API's and enrollment routines and all of them involve buying a PSD2 certificate, which costs upwards of 2000$
I've been eyeing Firefly III myself for managing our family's finances, so I'm glad to see this thread starting and see others' experiences'. In the current day and age of cloud-hosted apps and everything-as-a-service, happy to see some self-hosted love on HN.
I played around with Firefly and was generally impressed, outside of Laravel log verbosity defaults running me out of space on my VM in a quick manner, heh.
Ultimately I'm lazy so I stopped doing much with it, but if you're interested in it, I highly recommend getting the Salt Edge account to handle importing everything.
If you're still monitoring and have the time @JC5, I was just curious about your data model.
I see that there tags, categories, and budgets. I understand the differences between these, and why they are presented as different concepts. How did these different features evolve? Did you have budgets first, then categories/tags? Did you ever consider implementing categories as tags and not having a separate category concept?
Just wondering if what you have now evolved from a simpler model (at least fewer concepts—maybe not simpler implementation or mental model), and if so why/how.
I started with budgets and categories. Budgets for the money (I had like five budgets) and as many categories as you want. They are basically the same thing. Max one category/budget per transaction.
Tags were added later on by user request. Most users use them to categorize transactions. I don't use them myself. I tried using tags for meta-data like "expensive" or "wasnt worth it" but never bothered to tag everything.
For something as important as financial management software, it doesn’t inspire confidence that there are ads in documentation. Could they find another way to monetize it?
I don’t have to monetize it. It’s a hobby. But the website provides a good platform to host the docs and I can live with the ads they serve. I assure you they don’t pay me for the ads in the documentation.
I recently switched over to Firefly III as a long-time Mint user unsatisfied with privacy issues and many feature limitations. I also like that Firefly encourages manually inputting transactions to improve mindfulness about expenses, rather than importing them automatically which in my opinion makes the information less actionable.
And Go is even similar. Instead of having to deal with docker/docker-compose, I can just put an executable somewhere. If I have multiple apps, I just set up a reverse proxy through my web server and I'm done.
It's a bit telling that I essentially need to run a docker container for something so simple. Statically compiled binaries are super simple to use.
When dealing with contractors, it's impossible not to maintain a LAMP stack. Often times I don't get to choose the technology I have to deploy, and it's not fun when I get to wrestle with PHP. Luckily the contractors' time spent fixing their deployment instructions is billable for me.
At least the packages are often done professionally (e.g. symfony developed ones etc.). The standard library is pretty great so you don't always have to rely on packages. Often the same third party packages you'd have to rely on in PHP, you'd have to rely on similar packages for go.
> you get segmentation faults
Not sure where you get this from. In my 6 or so years of professional PHP development I've never seen a segmentation errors.
Anyway, still prefer a single go executable. It's just so much simpler.
If accurate, then it's sad to see PHP to fall this way. I remember the good days when all it took to deploy your PHP project was (S)FTPing the code to a folder and pointing Apache to it.
Is the demo under high load or is it just generally slow responses? 2+ seconds for many operations and graphs take a while to paint (5+ seconds). I am on 200mbit, low latency fiber.
> The ability to share a financial administration with your partner or significant other. Unfortunately, this requires a large change in Firefly III’s architecture and functionality. As an alternative, you could share the login details with each other.
UI looks easy and modern. Might give it a try. I really like my Spreadsheet as it is just simple to see what is going on. And Mint borked our account with bank sync a while ago and never went through the hassle of fixing it with their many round-trip support emails.
K, found the error, I speed read `demo@firefly` and entered `demo@firefly.com`. Probably should make both work since there is no failure message showing what was entered.
Yeah that’s bloody annoying but I haven’t been able to fix it yet. Laravel, the underlying framework has moved to a new way of reporting login errors and my code hasn’t been adapted yet. Sorry about the confusion.
We used ledger-cli and beancount with fava and built automatic creation of accounting entries using machine learning and Bayesian alogrithms by analyzing bank and credit card statements. You can use powerful icsv2ledger [5], smart importer [6] and the awesome list [7] to get importers for various banks and other utilities.
[1] https://www.ledger-cli.org/
[2] https://hledger.org/
[3] http://furius.ca/beancount/
[4] https://beancount.github.io/fava/
[5] https://github.com/quentinsf/icsv2ledger
[6] https://github.com/beancount/smart_importer/blob/master/READ...
[7] https://github.com/siddhantgoel/awesome-beancount/blob/maste...
Note: corrected the entry for ledger-cli, its primarily written in C++ with some emacs lisp scripts.