My Budget – free, open-source offline cross-platform budgeting
github.com
github.com
I added some minimal polish like an undo command, a minimal GUI accessible via a short-lived link it sends us on request where we can add and edit recurring bills, subscriptions, and upcoming one-time or yearly major expenses. It has support for debts/loans (we can do "cc <debt> <amount>" for increasing debt, e.g. by paying with a credit card, and "pay <debt> <amount>" for payments). It sends us nightly and weekly reports letting us know progress towards savings goals and warning us if we're about to run into a tight spot based on what it knows about our spend rate, and upcoming bills and big expenses. It also bugs us if it notices we haven't transferred anything to savings recently.
The fact that it doesn't sync automatically with our bank accounts is actually a feature, because the ritual of having to text it whenever we spend money forces some mindfulness of our spending habits, and the regular reports (where it chides us if we're not saving much or exceeding our spending goals) add some gamification -- we joke about how we want to make it proud of us. :)
Which is probably totally fine for most use cases, but I plan to port it to SQLite and open source it soonish.
That said, yours looks a lot more full-fledged than mine. Mine can only record transactions and then send a response (which it reads calculated from the spreadsheet based on the last transaction, which I'm very proud of for the level of customization it provides), but I've been noodling over how to add custom commands.
FTR, I shameless stole my idea from an earlier HN comment sometime last year; if you're considering implementing a SMS/spreadsheet system yourself, I'd check it out https://news.ycombinator.com/item?id=17313321
Edit: I really am happy with my solution because it basically lets you take any google sheets based transaction you have and add SMS as an input method.
Edit 2: Sorry if you encounter any rough edges if you go to use BYOB - I haven't marketed it widely, but my wife and I do use it. Any feedback is very much welcome.
Edit 3: If you don't want the manual import of transactions (but do want the freedom of a spreadsheet) then I'd suggest TillerHQ instead https://tillerhq.com I haven't used em, but I came across them when doing research before launching BYOB.
I also like that yours is generic -- I'm curious what other use cases might exist for an SMS based query system for sheets.
Another minor feature I added was lists so that my partner and I could keep our shopping list synchronized -- I could imagine it working well for that too
As for queries, I'd like to add queries to get the categories and query the amount left in a category. But that's more special casing - maybe it's a purist in me. I'm leaning towards letting people define a keywords area with three columns - the first is the word to trigger the command, the second is where anything after the keyword gets put (in some sanitized manner - like stripping whitespace) and the third would be the place to read the response.
I like the shopping list idea.
I haven't really taken the time to polish up some operational bits (we have really good logging/metrics where I work, and I miss it) or to market it though. So it's basically just my wife and I right now. I think the push to get something shipped (and my perfectionism) drained me, but reading this stories comments has been invigorating, and I an probably go about improving things in a more measured manner.
I totally get the benefits of ritually entering though. I’m definitely lazier about non-credit card transactions now... motivation to expand my program to other types of accounts and get fully automated!
We then add categories manually to all transaction on the YNAB app, so... we go through each transaction every couple of days.
Thanks for sharing again. If you want to get in touch with me, there is also a Slack you can reach me "zachary" at (https://join.slack.com/t/my-budget/shared_invite/enQtNjA0NDg...)
1. Transaction import. OFX at a minimum, but preferably an online pull that can be automated. Many banks do support online pulls -- for example GNUcash calls out to aqbanking, with an incredibly obtuse UI, and is an area for improvement.
2. multiple accounts and currencies. I need to be able to track investments and assets. That means multiple accounts, denominated in different and possibly custom units. GNUCash allows multiple accounts and multiple currencies, but you cannot put different currencies in your own account. The work around is subaccounts per stock ticker etc., but it seems like improvements could be made here.
3. Synchronization. In my view, 'offline' is synonymous with 'disposable.' I have many years of history, and it would be unfortunate to lose it in a drive failure. I have this backed by a personal SQL server, but many people use dropbox style sync. Multiuser would be an area of improvement here.
The one thing I'm not looking for is budgeting. A ledger is basically a budget with dates per item, so why not just go directly to the ledger form? Salary, mortgage payments, rent, insurance, and streaming subscriptions are all predictable expenses, just slap em into the ledger ahead of time. Even the variable stuff like dining is a bit more predictable with a credit card.
The above should not be a knock to the many other systems, so please don't bother to try selling me on ledger-cli =)
Also a simple fast tool with some handy little reports and graphs is http://homebank.free.fr/en/ We still use this for our personal finances.
Edit: or maybe a cool 'dark' themed version.
These are all good things to have, several of them are already on my roadmap (https://github.com/reZach/my-budget/wiki/FAQ#future-features).
If you'd like to offer more suggestions, please come to the slack and talk to me "zachary" there, thanks! (https://join.slack.com/t/my-budget/shared_invite/enQtNjA0NDg...)
Disclosure: I'm the founder.
It was great, I liked it so much that even on a super shitty exchange rate for me I became a subscriber at the time, even though I didn’t need the subs features.
I don’t use it anymore, maily because I can do it in my head now + the little tools my bank provides, but thanks man. Your service made me a better human.
Just based on the single screenshot in the readme, it seems like the workflow needs work too. The information density in the screenshot looks painfully low to me.
It imports live bank transactions into a Google Sheet for you to use however you want.
To that end, I looked into using Plaid's API to craft my own but it's a bit daunting, especially with a couple of my financial institutions continually failing and having to be reauthenticated, so I don't envy these developers their tasks.
The "bank API" is actually OFX, it's a protocol banks use to send each other data. I'm currently working on trying to get OFX support in My Budget. (I'm the author of the Github project).
I signed up for a budgeting service that claimed real time transaction sync and immediately unsubscribed when I realised it was planning to do so by scraping.
I'm currently working to get OFX supported, which is the "automatic API" that can scrape your transactions. Quicken uses this, falling back on screen scraping in case OFX isn't supported.
There are a number of features that I'd still like to add (documented here: https://github.com/reZach/my-budget/wiki/FAQ#future-features). Are there specific things you'd like to see that I can put on my roadmap?
I spent a bit of time writing a simple streaming OFXv1 (SGML) parser in Rust, but I'm too ashamed to open-source it. The idea behind it was you read the OFX file byte by byte, using Nom to parse out tokens, and emit events when you hit SGML tags and element content (SAX-parser style). Then you have something over the top of that that accumulates state until it has a complete OFX data element, and then emits that.
Advantage: Very low memory usage. Disadvantage: Probably overkill, since OFX files probably wouldn't be megabytes or gigabytes.
It works for my bank feed, but who knows how many other banks!
If you have any ideas on how to support this well in a non-hacky way that doesn't involve relying on a scripting language (all other existing implementations seem to be some form of scripting language :().
Maybe not gigabytes, but if you wanted to pull transaction-level data from a relatively active brokerage account, you could end up with an OFX file of a couple of megabytes. I'm sure someone might appreciate the efficiency.
Personally I've used ledger and loved it but found it a bit of a pain to get going due to its manual nature and it also created a bit of a firewall for my SO because she's not inclined to spin up a terminal to look at the finances. I liked beancount for its facilities to do automatic imports but I found its reporting lackluster.
I liked hledger most of all but to compile it was kind of a pain and it had many of the same complaints as ledger although its reporting and especially budgets were top notch.
I'd like to incorporate reports, that is something that is in my roadmap. Are there other features of beancount or ledger cli that you'd like to see in My Budget?
EDIT: Looks like it's been updated to be an open source project: https://blog.financier.io/financier-is-now-open-source-bdfe9...
Like you say, there are some missing features, but it does what I need it to perfectly.
I'm taking inspiration from YNAB, as it has a rich feature set. Also open source so that's a plus! Thanks!
I used to use mint which was more automatic, but things rarely get categorized correctly, and by doing it by hand, I'm a lot more aware of my spending habits than if I just looked at some pie charts. I can still make pretty charts in excel if I ever wanted too.
[0] https://developers.googleblog.com/2019/05/Flutter-io19.html
All good suggestions, thank you. Workflows and guides are what My Budget is lacking, as more core features are being built out. They are on my to-do for the app.
The unique features are: - It's offline (we aren't saving any information about your budget) - Your data can be optionally encrypted at-rest - Limited support to auto-sync your transactions from your bank
A typical workflow for version 3.0.0-beta+ is to add your sources of income. Then, add categories of transactions you have (by category and subcategory). Next, add transactions based upon your categories and subcategories.
Reports and other features like multi-currency/account/users are coming soon.
The passphrase and IV are used to encrypt/decrypt the data using the aes-256-cbc algorithm (https://github.com/reZach/my-budget/blob/master/app/crypto/c...).
Ah, thanks - I thought I improved it from earlier versions. What in specific do you not like about it? Specific things can help development further.
- The orange and the purple are both very bold, non-standard colors. Using one or the other makes sense as a way to draw attention to important things and give the tool personality, but having both together is a little grating. Perhaps the orange should be replaced by red? This would also be idiomatic in terms of what those buttons seem to be doing.
- I think there are too many different shades of grey; the title bar, the main background, the white sections, and the category headers are all different shades. Also, something feels off about the color on the category headers. I think part of it is you have white text on a medium-gray background, which isn't quite enough contrast, but part of it may also just be the fact that those headers are darker than the "main" background color. On the other hand, it could look good to just use the title bar color on the category headers. Hard to say without trying it out.
- The transactions table could use a proper border all the way around (it's visibly absent on the top and sides).
- A clearer division could be made (a border line or just a bigger gap) between the "categories" and "transaction" sections, because it's not immediately clear what "delete all" will be deleting.
- The "delete all" and "add new" buttons aren't aligned with the left and right bounds of their section; also, there's no reason for them to be spread out so far. They could gravitate to the right, for example.
- Bolding the field labels below the word "transactions" would make it slightly clearer what purpose they serve, and vertical-aligning them with their respective fields would be slightly more pleasing.
- Making the gap beneath each "sub-category +" larger than the gap above it would help connect it to the table it pertains to.
This is a great further resource on usage of color: https://material.io/design/color/#color-usage-palettes
The layout is much easier to follow, though
Accessing your bank information is optional, and only works for Discover right now.
That way anyone could use it instantly, instead of having to download this massive Electron app.
I never thought of that.. it can be an option, although it wouldn't work if you ever lost internet. I'll consider it!
Edit: Whoops I missed this line under "Features":
> Limited* support to sync transactions with your bank. See here[1] for more details.
1: https://github.com/reZach/my-budget/wiki/Creating-a-new-conn...
Sync is meant to sync transactions from your bank. Right now it has rudimentary screen scraping, and since I don't have infinite throughput, I wrote a way for others to create these methods for their own bank. Once it's working, I can add it into the app and others can use.
I'm trying to get OFX support, which is the much-requested "auto syncing" feature that everyone wants.
Electron... "my-budget-3.0.1-beta-x86_64.AppImage" size ~ 161 MB
I prefer Eqonomize, that is Qt5-based. "Eqonomize-1.3.4.AppImage" size ~ 23 MB
Yes, that is one of the things I'd like to reduce. I will be focusing on reducing the size of the app. The app you linked, looks nice too.
Rewriting My Budget from JavaScript to C++ would be hard.
I'm the author of My Budget.
I don't have any charts or graphs yet, but it is relatively straightforward to make them in a spreadsheet with data that has dates and numbers like the transactions do. Check it out (free for one account), and maybe I can help you with some charts. Email me at vance [at] vancelucas [dot] com or ping me on Twitter at @vlucas if you want to chat about it. I'd love to hear your ideas.
(My Budget author here).
Uses Google Sheets as a database.
I know if I was building a desktop program I would pick electron but what can real desktop toolkits change to fix this problem?
Java went round this circle. First there was AWT: use the platform-native widgets. Of course, this results in your application looking different on every platform in hard-to-predict ways. So people wrote Swing: single non-native GUI that looks the same everywhere. Eventually people got fed up of the poor performance and non-nativeness of Swing, so they wrote SWT (used in Eclipse) which uses the native widgets again.
If your application is native, then it looks different on different platforms - and you have to test and debug on all of them. If it's non-native, it can look the same on all platforms.
Not just for budgeting, but in the same space! :)
> Offline; there is no back-end service saving your data anywhere.
Can I set this up for myself?