
My Budget – free, open-source offline cross-platform budgeting - vitro
https://github.com/reZach/my-budget
======
vector_spaces
A while ago I built a simple SMS bot for my partner and I to track finances
like this, and it works fairly well. The workflow is whenever we spend money
we text it with "spend <amount>" or "sp <amount>", and whenever we receive
money we do "add <amount>", and "save <amount>" whenever we move money to
savings.

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. :)

~~~
swsieber
Shameless plug - I wrote a SaaS that's pretty much just a SMS <-> google
spreadsheet mapper. [https://byobudget.com](https://byobudget.com)

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](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](https://tillerhq.com) I haven't used em, but I came
across them when doing research before launching BYOB.

~~~
vector_spaces
haha, I actually saw that comment shortly after I wrote the first version of
mine. Did some searching on HN to see if anyone else was doing something like
this -- it made me feel a little less weird about my idea to know that someone
else was, in fact. Cool to know that you are too!

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

~~~
swsieber
Well, I like the idea of timer to watch stuff. I could see it being a 3-7 day
timer to trigger a text if you haven't updated the spreadsheet in some way.

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.

------
bobblywobbles
Not the author of this post, but I am the author of My Budget. I saw this post
and said, "Hey - I know that name!"

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...](https://join.slack.com/t/my-
budget/shared_invite/enQtNjA0NDg1MTI2MzI2LTkxZmI0M2YzMGQ2YzlkMDc1YzkxMjU1M2EyZmI4MjlkYTY3MzgwNzVhMmY2MzJhNmM4OGE0Njc0NDZiMDVkY2U))

~~~
pard68
Didnt see it in the readme or wiki/faq, what budget method does this use?

~~~
bobblywobbles
It's taken mostly from EveryDollar, or envelope-budgeting if that is a good
analogy.

~~~
pard68
Thanks, exactly what I was hoping for!

------
jldugger
I use GNUCash, and despite it's substantial shortcomings, the regular flow of
competition never quite hits the mark. Here's a small sample of what features
I'm looking for:

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 =)

~~~
thrownthrow
I use GNUcash for business too, but use git as storage/sync instead.

Also a simple fast tool with some handy little reports and graphs is
[http://homebank.free.fr/en/](http://homebank.free.fr/en/) We still use this
for our personal finances.

~~~
hellofunk
How do you find GNUcash? I looked at it awhile back and found the UI so
antiquated compared to modern tools, but I'd prefer something different than
the commercial provider I'm using now.

~~~
jldugger
Honestly, I suspect if you changed a few icons and made the default theme more
blue and less green, it'd look a lot more modern.

Edit: or maybe a cool 'dark' themed version.

------
akerro
[https://github.com/firefly-iii/firefly-iii](https://github.com/firefly-
iii/firefly-iii)

~~~
powersurge360
This is very exciting for me, thank you for sharing.

~~~
akerro
[https://gitlab.com/NickBusey/HomelabOS](https://gitlab.com/NickBusey/HomelabOS)

------
0xffff2
_The_ reason I continue to use Quicken rather than writing my own tool that
I'm sure doesn't sell my data is that it allows me to relatively painlessly
sync transactions from my bank. This is largely my bank's fault for not
exposing some kind of API I can hook into, but nonetheless any budgeting app
that doesn't sync transactions from most financial institutions is not a
"solution".

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.

~~~
Canadauni
Have you looked into the plaid[0] free(test) tier? They hook into a bunch of
different banks and the free tier exposes balance and transaction history.

[0]:[https://plaid.com/](https://plaid.com/)

~~~
vlucas
If you have a free Plaid account, you might check out BudgetSheet:
[https://www.budgetsheet.net](https://www.budgetsheet.net)

It imports live bank transactions into a Google Sheet for you to use however
you want.

~~~
techsupporter
I really wish I could find a service that would do this for something _other_
than Google Sheets (or like Tiller using a Google login even though they can
write to Microsoft's OneDrive...for some reason). The last place I want to
store a bunch of sensitive financial information is Mint. The second last is
Google.

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.

~~~
vlucas
Where else would you want this imported? What other products do you use that
you would wank your bank transactions in that you trust?

------
powersurge360
How does this compare to things like beancount or ledger cli? Did you look at
those and find them wanting?

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.

~~~
kiney
I use beancount in combination with the fava web-ui. Best of both worlds
(plaintext/gui).

[https://beancount.github.io/fava/](https://beancount.github.io/fava/)

~~~
BeetleB
Beancount's budgeting capabilities are virtually nonexistent (despite what the
author keeps claiming).

------
l8nite
I'd love to see an open source YNAB clone... maybe this can be evolved in that
direction! Well done.

~~~
obelos
Not open source, but [https://financier.io/](https://financier.io/) is
browser-based YNAB clone. I'm still using YNAB4 for the time being, but will
probably switch to Financier once YNAB4 stops working.

EDIT: Looks like it's been updated to be an open source project:
[https://blog.financier.io/financier-is-now-open-source-
bdfe9...](https://blog.financier.io/financier-is-now-open-source-bdfe98a5b9b6)

~~~
Kovah
Financier looked absolutely great when I tested it a few months ago. But: lot
of features missing (like recurring transactions) and the app seems to be
abandoned. At least there was no activity for over a year now. What a pity.

~~~
georgebcrawford
IIRC, it's not so much abandoned as in what the author considers a finished
state. I still use it and actually just paid another year's subscription.

Like you say, there are some missing features, but it does what I need it to
perfectly.

------
vijaybritto
Im starting a Flutter course today. This app will be one of my first attempts
at non-electron desktop apps. Lets see how this goes!

~~~
pxtail
Are you going to put it on github? I bought Flutter course as well (the one
from appbrewery recommended on googleblog [0]) but haven't got time to get
started with it yet.

[0] [https://developers.googleblog.com/2019/05/Flutter-
io19.html](https://developers.googleblog.com/2019/05/Flutter-io19.html)

~~~
vijaybritto
same stuff!! Im going to put it for sure!

------
zallarak
good time to plug a great paid option:
[https://actualbudget.com/](https://actualbudget.com/)

~~~
Isn0gud
It is free to use locally, only the sync feature is a paid upgrade. And the
data stays local.

------
tomcam
Congratulations! Releasing a significant piece of work is always an amazing
time. Would love to see some screenshots in the README showing what makes it
unusual, or what the typical workflow is like.

~~~
bobblywobbles
Author of My Budget here.

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.

~~~
cottsak
I only skimmed the code, but when it's encrypted, is the only key/input that
iv that you've got in the source there?

~~~
bobblywobbles
The data is encrypted using the Crypto library from Node
([https://nodejs.org/api/crypto.html#crypto_crypto_createciphe...](https://nodejs.org/api/crypto.html#crypto_crypto_createcipheriv_algorithm_key_iv_options)).

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...](https://github.com/reZach/my-
budget/blob/master/app/crypto/code.js#L52)).

------
_bxg1
Kind of ugly, but that's easy to fix. Great project given that services like
Mint are just data vacuums.

~~~
bobblywobbles
Author of My Budget here.

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.

~~~
trevor-e
Yea, no offense intended with this, my first thought looking at the project is
that it's a scam or malware. I would have to personally read through the
source code to feel comfortable using this. The main thing is none of the text
is vertically centered and everything is lowercased. Maybe I'm just paranoid
about financial software.

~~~
_bxg1
To be fair one should audit any no-name app that wants to access your bank
information, no matter what it looks like.

~~~
bobblywobbles
I would do the same.

Accessing your bank information is optional, and only works for Discover right
now.

------
1023bytes
Wouldn't it be better just to put it up on Github Pages? It could have all the
same functionality as a PWA.

That way anyone could use it instantly, instead of having to download this
massive Electron app.

~~~
bobblywobbles
Author of My Budget.

I never thought of that.. it can be an option, although it wouldn't work if
you ever lost internet. I'll consider it!

~~~
nydel
As one person very interested in using MyBudget, I want to add that I would
definitely prefer not to use Electron; but I am admittedly interested enough
to go ahead and do it anyway. Once it's up and running this does seem to be
the best FLOSS GUI budgeting software I've yet used.

~~~
bobblywobbles
Thanks for your input, and trying it out. I'm trying to continuously improve
the software.

------
groovybits
In the screenshot provided in the README, I see there is a 'sync' button next
to the 'save' button. If this is essentially self-hosted, what is the
application syncing to?

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...](https://github.com/reZach/my-budget/wiki/Creating-a-new-connector)

~~~
bumpkinjunkie
I like this idea. You shouldn't have to pay to access your own bank data.
Looking forward to the near future when banks either have an API or die a slow
death.

~~~
bobblywobbles
OFX is the API they use. You need specific credentials that can be found
online. If a bank doesn't offer OFX support, you can use the tried-and-true
method of web scraping the information out, which is what Quicken does as a
last-resort.

------
app4soft
> offline cross-platform

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

[0]
[https://github.com/Eqonomize/Eqonomize/](https://github.com/Eqonomize/Eqonomize/)

~~~
bobblywobbles
Author here of My Budget.

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.

~~~
app4soft
> Yes, that is one of the things I'd like to reduce

Rewriting _My Budget_ from JavaScript to C++ would be hard.

------
ElijahLynn
I am looking for a spreadsheet that does similar things but also does
forecasting with charts too. I want it to be a spreadsheet though. If anyone
knows of an open project for this please hook me up!

~~~
vlucas
Hey - I am the author of BudgetSheet (
[https://www.budgetsheet.net/](https://www.budgetsheet.net/) ). It is a Google
Sheets add-on that links to your own Plaid account to auto-import
transactions, and all the data is all stored in the spreadsheet itself so
there is no other web service involved.

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.

------
bash-j
I've been using Mishell Budget Calendar for the past 8 years. Nothing beats
the calendar UI in my opinion. Makes sense when you think about most income
and expenses are recurring events. The balance at the bottom of each day lets
you check the future for days where you might be getting close to running out
of funds. It might be a simple move the day you pay your utility bill each
month, or try adjusting your grocery budget by a few dollars and it shows
straight away how that impacts your future balance.

~~~
bobblywobbles
Super interesting execution, I really like it!

------
jpb0104
A subject near and dear. I work on
[https://budgetmyway.com](https://budgetmyway.com). Personally been using it
for almost ten years to track my expenses. I haven’t been able to get much
traction with other users. I would love to know if any of you personal finance
folks find it useful. Onboarding and marketing are hard.

------
c-
161MB MSI for a budgeting app... I know there's a thing as electron bloat but
this is kind of all sorts of insane.

~~~
bobblywobbles
It's mainly electron, but I'll look in the future to cut down the size.

(My Budget author here).

~~~
theprotocol
You might be interested in Proton Native ([https://proton-
native.js.org/#/](https://proton-native.js.org/#/)) which should produce a
much more lightweight output and has native controls. I have not used it
though so I cannot vouch for whether it is sufficient for your needs.

~~~
bobblywobbles
I'd have to see if it has all the building/signing and packaging support as
electron. Thanks for linking!

------
mitul_45
This looks cool, I've also built something similar for my needs. The
difference is, it's a web based app – so I/my wife can add expense on-the-go.

Uses Google Sheets as a database.

[https://github.com/mitul45/expense-
manager](https://github.com/mitul45/expense-manager)

------
baroffoos
I know this is kind of a tired comment but I wonder where desktop GUI toolkits
went wrong to end up where "cross platform" has come to be a synonym for
electron.

I know if I was building a desktop program I would pick electron but what can
real desktop toolkits change to fix this problem?

~~~
pjc50
Largely they can't, other than having a Highlander situation where they fight
each other until only one platform remains.

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.

~~~
tty2300
Looking different to the native apps isn't even the worst part. Its that a
simple notes app is 300mb and after opening a few basic programs you have 10gb
of ram used.

------
vitoc
Maybe check this out too?:

[https://prudent.me/](https://prudent.me/)

Not just for budgeting, but in the same space! :)

~~~
stfwn
I didn't know about Ledger [1], which this is said to be based on. It seems
like a proper UNIX tool like Remind [2] but for finance. I would really like
to use these types of applications all the time, but either usability suffers
a lot or useful principles get lost when trying to integrate them with
smartphones and tablets.

[1]: [https://www.ledger-cli.org/](https://www.ledger-cli.org/)

[2]:
[https://jlk.fjfi.cvut.cz/arch/manpages/man/remind.1](https://jlk.fjfi.cvut.cz/arch/manpages/man/remind.1)

------
solarkraft
Since this is just a web app, how about a mobile version?

> Offline; there is no back-end service saving your data anywhere.

Can I set this up for myself?

