back
138 comments
There are several things wrong here:

1. The author doesn't understand bookkeeping. 2. The author doesn't somehow believes that emulated teletypes are a good substrate for building user interfaces. 3. The author has spent significant time writing a bookkeeping tool for his business instead of doing something that will move the business forward.

If you're thinking about writing an open source accounting program, spend time mastering GnuCash first. If you feel like you can't do what you need with that and cannot possibly extend it in the way that you need, then write your own.

1. Feel free to back up your claim, otherwise I'm not sure how you come to that conclusion 2. It has a user interface … just not graphical 3. Well, I guess we just have different opinions on where forward is 4. I've been working with GnuCash, Ledger and Hledger and I've written several scripts to extend them (e.g. to support timestamps and not just dates, which shouldn't be asked too much for an accounting tool ), but it was always a nasty hack and so I wrote my own. Just like you said.
Hey madhadron, you sound like you understand bookkeeping. So I have a quick question. After using Mint (from Intuit) I have everything balanced & tagged and 99% automated. I have reports, ways to export, daily/monthly/yearly totals, breakdowns by types, handle liabilities & debts, i can project net, see assets over time, etc etc. Why wouldn't a business just use mint? After watching vidoes on GnuCash like you recommend - it is like watching someone make Mint by hand. When people out there get a check (income), do they open GnuCash and start typing stuff? Really?? Mint on the otherhand, detects the income by scanning all accounts, automatically categorizes it, etc etc.

GnuCash - I could see mistakes everywhere. I don't see how this is much different than what an accountant would do in 1740 england. Why not have it all automated -- with computers??

https://www.youtube.com/watch?v=aqAaScYVeRQ

CLI tools also have the advantage that their developers don't have to waste their time building and maintaining a useless GUI, but can instead use the time to improve the tool itself

Maybe it's just me, but I stopped reading here b/c this language struck me as unnecessarily antagonistic. Just some feedback.

Well, it's also non-sensical. A CLI "interface" needs a lot of thought and work behind it, too, unless you want to end up loathed by your users as something like git is.
It is hardly a controversial statement, particularly in the context of something entirely text oriented like accounting.

It would be different if they were expressing the same sentiment for something like a 3D graphics editor...

Stopped here also. Bad sign. Different tools for different jobs, no need to get emotional.
I'm not sure why the OP is getting s%%t from the community. He built a simple application, probably out of love of software development. It is not complete or perfect. It is also probably not the best use of his business time. But we do waste time on other stuff too.

This CLI app could be useful to me for a subset of accounting I do. Yes, it won't be able to track VAT accounts. It won't amortize my expenses. But if I needed that for a critical business I'm running, I'd not use a hobby project.

The CLI is useful. Double Entry bookkeeping is useful but as things scale it gets very confusing even for the best of accountants. This program is simple and can give you a solution if you are looking for very simple bookkeeping.

You can't expect to just get happy feedback, especially from a rather critical thinking community such as HN and when you then write dismissively about stuff, you shouldn't be surprised when it's held against you.

> CLI tools also have the advantage that their developers don't have to waste their time building and maintaining a useless GUI, but can instead use the time to improve the tool itself.

It's fine if you like CLI apps and find it painful maintaining a GUI application, but it's not helpful to write it as a general statement. CLI "GUI" tools also require quite a bit of work and I'd claim that an experienced GUI developer will spend less time on creating a GUI app, than the author had spent to get their CLI "GUI" app display as wanted.

> It made sense in former times as this layout makes it easier to add up the amounts by hand, but not in times of computers.

Double booking keeping isn't just a relic from the past. There are big benefits to it and just because it doesn't fit into simple account keeping, doesn't mean we can just pretend that it's useless, because computers!

In summary you simply should not write your opinions as if they were facts. You can do so if you want, but then you need to be prepared to get some critical feedback.

> I'm not sure why the OP is getting s%%t from the community.

OP states, in large font, that Transity is "The Future of Plain Text Accounting". If you're going to make a bold statement like that, then people are going to be critical.

"Simple - No more confusing debit / credit / asset / liability mumbo jumbo"

It is just "mumbo jumbo" to you because accounting/finance is not your area of expertise.

Somebody should write a proper "accounting for regular people" guide, because I too find those terms confusing - and also completely separated for any experience ever that I had with money. And it only gets worse from there, with "accounts receivable" and "accounts payable". Is that an American thing? I try not to fall into the trap of being proud of my own ignorance; but after many hours of reading introductory accounting articles linked by various accounting software sites, I still don't get any of it.

I'd love a cheat-sheet or plain-English example of how to model the following with GAAP: I'm an individual, I have couple bank accounts, get a salary and occasional invoice, I pay for various stuff, I sometimes use cash. I do not own shares in companies. I want to do budgeting, including some sort of "envelopes" or "virtual accounts" so that I can earmark some money for particular use. I tried to build something like that with Ledger CLI several times now, but I always bounce off the confusion about terminology, and not knowing what goes into "Equity", what into "Liabilities", etc., and why does everything expect me to have "accounts payable" and "receivable"...

Knowing what's the proper, idiomatic representation of such financial system would go a long way towards me understanding what the hell all those terms mean.

Accounting is not my area of expertise, but I have been learning it -- in simple terms -- by doing my personal accounts. When I started, I found these distinctions confusing, but I assumed they were wise. Now I find them arbitrary and annoying, although I am less confused by them.

I suspect there will be a third stage where I will learn their true value. But I also strongly expect that the value lies in them being a common language that other accountancy uses. If so, then they will never be useful in my own personal accounts.

Sure, but that just means they're creating a product for a specific market -- one whose area of expertise isn't accounting or finance. This is something we should encourage, rather than nitpicking the wording.
About that, isn't the difference between "debit" and "credit", and between "asset" and "liability", just a minus sign?
Also worth check out http://plaintextaccounting.org/

Personally I don't like the yaml-like syntax. I use beancount myself, and with fava (https://github.com/beancount/fava) as the UI.

This is what I was always looking for. Also loving the approach of having the UI separated.

I also don't like the yaml format for the simple reason that not all necessary information is in one line. No idea why a transaction can't be written into one line.

Also for people who love plain text, one can checkout the banking format (comes from German banks, so most info is only available in German but here's a summary): https://en.wikipedia.org/wiki/FinTS

Gnucash should also support it, but with my bank it always fails. It's certainly not a format I would use for local storage, but it's a good source of structure and edge cases when one thinks about developing or modifying an existing format.

The Beancount/Fava combo is just fantastic. Awesome plugin system, multi-currency, powerful but simple sql-type query language, extremely well tested, active developers, python.
I think throwing out the terms credit/debit is a mistake. Everyone operates on GAAP and we shouldn't deviate.
Not only that, there are some really useful properties of the double entry system: https://arxiv.org/abs/1407.1898

That's defining a group called the Pacioli Group. One thing that is relatively easy to do with this group is to quickly verify consistency in the transactions. That is something you lose with a single-entry system.

Definitely agree and I think it would have usable if it kept debits/credits.
No judgement, but can someone explain to me the use case for this sort of thing? I'd imagine for anything other than the simplest stuff, you're going to start using something a bit more powerful, and for the simple stuff - who with the skills and knowledge of this type of tool really needs to do small time pocketbook budgeting?
I can't speak to Transity, but I use HLedger for my entity (nothing fancy, just a single member LLC.)

I can keep my ledger in git, I don't need to pay for or even learn to use QuickBooks, I can quickly write a script to import data from basically anywhere, and I can use all the standard tools in my toolbox (grep, diff, python) to visualize and work with the data.

I'm sure mainstream accounting programs add value as the organization grows, but I spent a few minutes playing with Quickbooks and I was ready to just use Excel when I discovered the whole plain text accounting thing. And it's been working well for me.

I'm not sure what your point of reference is for the question, but at least for personal finance tracking I think such tools work well. I have a long history with apps such as Quicken and Mint, and some years ago I migrated to plain text (https://www.ledger-cli.org/) and have not felt any lack of functionality. I think the type of person who would even consider these types of tool also tends to value the flexibility of being able to get data in and out of the system however they want.
I use beancount for personal finances.

I've only recently moved to it in fact, previously used tools like YNAB and so on, but this approach seems to be a bit more flexible, especially around managing investments etc

I think you need to have the mindset for it, I've always reconciled my transactions and like to keep an overview of everything, so people saying it's tedious etc doesn't wash with me, in an odd way I sort of enjoy it

Hm, the article asserts that Ledger doesn't have tags:

> Sub accounts vs. Tags > But what if the expense is part of another category as well, like expenses for your vacation? Well, you'd be at a loss. There is no good way to model this in ledger-likes without getting really hacky.

But that's not true. Ledger has tags. You specify a tag with:

    :tagname:
For instance:

    6-5-2018 Gave food to Bart Simpson, while on vacation
        Expenses:bart     1 orange    ; :vacation:
        Assets:food
And Ledger has an [Emacs mode](https://github.com/ledger/ledger-mode).
I can only speak for me, but modeling financial flows in terms of transactions and not accounts is much more intuitive than the classical alternative.

I'm a long time Buxfer user, which also works like this. It's not that I don't understand double entry bookkeeping, I've used GNUCash for a long time before moving away. It is indeed very powerful and flexible, but it always was too much of a chore to maintain and next to impossible to get other family members to contribute.

I'm not sure this "transaction model" would be appropriate for business accounting, but IMHO it works very well for Personal Finance.

I played around with the buxfer demo a bit, and one thing wasn't really clear to me: is it possible to schedule fixed payments? There was some kind of reminder system, but does it automatically add the transaction or will I have to log in to manually add those transactions?

Simple recurring transactions is like the one feature I really need from a tool like this.

THANK YOU!

I had the ideas used in this project in my head, but I've been putting off the work forever now.

I LOVE YOU FOREVER for using transactions as the central operation rather than double entry accounting, and I love you even more for adding the ability to tag transactions. I can not put off work for a web interface instead, which is a lot less work to put off :)

I haven't tried it yet, but it's now high on my list for when I get home from work.

Basically the problem here is that the author didn't care even a little to understand why accounting is done with a double entry system.

Basically what he was trying to do here was a expense and income administrator with tags. That it's just a part of what bookkeeping and accounting is.

Nice try. But you can't replace what works and what has been done for reliability and confidence since 1400 at least by the masters of trade.

> You can't replace what works and what has been done for reliability and confidence since 1400 at least by the masters of trade.

I am not sure that is true. Isn't the world full of examples of quite the opposite? Especially because it's 1400 years old an because it was created for pen an paper work. We have computers now.

e.g. It used to be that companies have a handful of yearly profit/loss accounts and every year they "close the books" by transferring all balance to first profit/loss accounts then to equity. The financial year then starts with 0 profit an 0 loss. Afaik nobody does this anymore. Today you just keep all accounts running (don't "close them) and you generate repots by selecting a date range and let the computer calculate profits and losses for that range.

Besides, most commercial software already hides debit and credit from you. I would risk that most accountant don't know their debits and credits, it's just one of those things you learn at accounting school before you start working in the industry.

I agree one should not write an accounting system without understanding the full details and history of the domain, but I disagree that 1400 year history proves anything. In fact even after reading through the Pacioli Group article I still don't see the advantages. It's only advantage is that it makes it harder to make a mistake on paper.

> the author didn't care even a little to understand why accounting is done with a double entry system

I don't know where you got this idea from. I got an impression the author knows a few things about accounting.

After trying to use GNU cash for some time, I got the feeling that a personal accounting app needs to be a web based service, to enable it to be used while on the move/travelling, because I found myself building up a huge backlog of entries to be made in to the system in these situations. After about a month of use, I gave up, since the overhead of jotting down transactions and later entering into the system. I doubt GnuCash or any accounting system like that could possibly have integrated apis for pulling in transaction details from every bank, in every country of the world, atleast presently.

Now a days I use a smartphone app called walnut, which mines your SMSes for transaction data and builds up a ledger by itself, without the need for interfacing with banks directly, because in my country atleast all banks provide SMS trails for transactions.

I work for Plaid. You can sign up and get a dev token that has sufficient permission to access your own bank accounts. Then you can download your transactions and format them for GNU Ledger or whichever other format you prefer.
I've written a tool that can import data from my various bank accounts and credit cards. It's semi-automatic. Uses machine learning to guess the correct account but I can quickly change it. I then put the finishing touches on by hand.
+1 for YAML. Thanks for not using JSON.

Now I want to see someone take, say, Tiffany & Co's latest 10-Q⁽¹⁾ and run it through this.

__________

¹ https://www.bamsec.com/filing/9824618000198?cik=98246

I have a question for people who understand accounting. Isn't the reason for debit/credit split the fact that negative numbers were not yet invented/widely-known at the time? Would accounting look different if it was designed today?
If you want something way simpler, http://galvez.github.io/plainbudget :)
Pivot and build an accounting API!

If you are interested, drop me an email, I would love to discuss more about fintech (I run a fintech startup)

This is amazing. Thank you for making this. I agree: account-based accounting is not the perfect form, transactions can be much clearer. People here are suffering from status quo bias.
> If this looks (and sounds) confusing or too complicated, you're not alone! It made sense in former times as this layout makes it easier to add up the amounts by hand, but not in times of computers.

Math predates computers, let's just stop using that too!

Double entry is not that complicated and computers or not, it just works.

everyone is complaining about the accounting here, but I just want to say that 100 FONT WEIGHT AT #666 ON WHITE IS NOT AN ACCEPTABLE CONTRAST RATIO FOR BODY TEXT, especially if you do not provide your own font. even on a 1920x1080 IPS display with 1.1x scaling, using my preferred font, Noto Sans, font-weight 100 is extremely difficult to read for long stretches. DejaVu Sans's 100 is slightly thicker, but is still not acceptable for body text at that color.
So I like the idea of using YAML versus ledger's format (very slightly, I'm used to ledger's format so it's not a pain point, but YAML offers some ways to make things a bit easier especially for newer folks). However, I could see a fairly trivial mapping between YAML and Ledger being developed by quicker programmers than I in less than a weekend (there's already a way to spit out s-expressions from ledger).

hledger makes some strong assumptions (IIRC) about your accounts being in assets, liabilities, income, equity, expenses. But I may be thinking of beancount for that. If I'm remembering correctly, hledger will let you do whatever you want, but some of their built in reports (like balance sheet) assume liabilities and assets as top-level accounts.

However, ledger allows you to do things like:

  personal:expenses:...
  personal:assets:...
  club:expenses:...
  wife:expenses:...
And you can specify what the prefix should be for all transactions in a region like:

  apply account personal
  2018/06/05 Gym
      Expenses:Gym       54.00 USD
      Assets:Checking
  end apply account
So everything in there is now in my personal set of accounts, eliding the prefix (which can become cumbersome). If you use this† as an example, putting things into separate code blocks via org-mode makes it trivial to conduct accounting for multiple entities.

Query: Does Transity allow for money to come from or go to multiple places? Suppose I'm traveling for work and need a more detailed accounting of my spending (they don't reimburse alcohol, perhaps):

  2018/06/05 Place with good cocktails    ; 50 USD is on me
      Work:Expenses:Travel:Food        20.00 USD
      Work:Expenses:Travel:Drinks      50.00 USD
      Liabilities:Work:CC
(with a note that I have to cover that 50 USD when paying off the card next month). I do this sort of thing just on regular shopping. I may spend a bunch of money at the store that's gifts for my girlfriend along with clothes for me. I like to know how much I've spent so I'll split it (this is more a personal curiosity thing, along with trying to stick to a budget).

I don't want to have to enter a from/to pair that's redundant (repeating the same from) for things I split like this.

Additionally, there's no need for this "perspective" aspect. If I move money to an account, its balance goes up. If I move money from it it goes down. If I am managing my girlfriend's accounts in ledger (or she is, but it's pushed into a common household file):

  2018/06/05 GF       ; lunch last week
      Jared:Assets:Cash         10.00 USD
      GF:Assets:Cash
In the report hers looks like it went down, mine like it went up. There's no need for me (if I'm managing multiple entities) to bother treating that 10 USD like it came from my income account. It is income, but it came from the GF's cash account. The income account is really only needed when you don't control or track the accounts money comes from. Your job, a gift from an uncle, lottery winnings, etc.

Same thing with a business. If I own my own LLC and "pay" myself a salary out of it (I'm assuming I also pay out my health insurance or something in this, I don't know, I don't do payroll), let's say:

  2018/06/05 Paycheck
      Jared:Assets:Checking          2000.00 USD
      Jared:Expenses:HealthInsurance  100.00 USD
      JSLCC:Expenses:PayrollStuffs    200.00 USD
      JSLLC:Assets:Checking
In all the reports, everything looks right. It's done, no need to worry about perspectives.

https://orgmode.org/worg/org-tutorials/weaving-a-budget.html

I tried to use Ledger, but it fails to handle multi currency ac ounting properly. Is the Transity well suited for that?
This is great!