Hello, I'm using envelope budgeting with Hledger. I'm trying to adhere to double-entry accounting as much as possible, so I don't use virtual postings/accounts. I'm also tracking all my cash spending, since I have quite a bit of those.
Here are example asset accounts and envelopes (subaccounts) I'm using.
assets:cash ; type: Cash
assets:bank ; type: Asset
assets:bank:unallocated:month ; type: Asset
assets:bank:budget:month:food ; type: Asset
When I'm paying by card, I credit my assets:bank:budget:* accounts and check my actual bank balance using subaccount-inclusive balance assertions.
For example:
2026-01-22 Supermarket
expenses:groceries 10,000.00 RSD
assets:bank:budget:month:food -10,000.00 RSD
assets:bank =* 90,000.00 RSD
When I get cash from an ATM, I credit my assets:bank:unallocated:month account:
2026-01-22 ATM
assets:cash 10,000.00 RSD
assets:bank:unallocated:month -10,000.00 RSD
assets:bank =* 80,000.00 RSD
When I pay for something with cash, I debit my expenses:* account and credit my assets:cash account. After that, in order to appropriately track leftover budget in my envelopes, I credit my envelope account assets:bank:budget:month:* and debit my assets:bank:unallocated:month account:
2026-01-22 Fast Food Place
expenses:food:fast food 500.00 RSD
assets:cash -500.00 RSD
assets:bank:budget:month:food -500.00 RSD
assets:bank:unallocated:month 500.00 RSD
As you can see, this results in rather long cash transactions. Also, when I do hledger register assets:bank:unallocated:month the output looks quite confusing, since expense transactions are regularly debiting the assets:bank:unallocated:month account.
I'm wondering, am I doing things right? Is there a better approach?