Open-source zero-based budgeting (ZBB) for your desktop โ give every dollar a job.
A fast, local-first zero-based budget in a native desktop app: assign every unit of money to a category until Ready to Assign hits zero, then watch your envelopes through the month. Underneath it's real double-entry accounting, so your budget, balances and net worth are all derived from one journal and can never drift out of balance. Your data lives in a single file you own โ no cloud, no account, no tracking โ and can be protected with strong password encryption, so even the file on disk is unreadable without your passphrase.
๐ Read the documentation ยท ๐ Website
- ๐ฏ Zero-based budgeting โ the heart of the app. Every month, give each category a job until Ready to Assign reaches zero. Track Assigned ยท Activity ยท Available per category, with envelope balances that roll forward and overspending shown in red. One-tap quick-budget suggestions (last month's assigned/spent, 3-month average) and Auto-Assign to copy a month's plan.
- ๐ฐ A Ready-to-Assign that's honest โ it's a single pool drawn from your real on-budget account balances (assets net of credit-card debt), so money assigned to any month โ even a future one โ draws it down, and you can never assign money you don't have.
- ๐ณ Credit cards done right โ spending on a card depletes its envelope and nets against the budget, so it's budget-neutral the way a good ZBB tool should be. Mark investments or a mortgage as off-budget so they count toward net worth but not assignable cash.
- ๐ Locked history โ past months are view-only; you budget the current month and beyond, and a budget you've already lived through can't be rewritten.
- ๐ Real double-entry accounting under the hood โ every transaction is balanced postings that sum to zero, so your budget, balances and net worth are derived from one journal and can never go inconsistent.
- ๐ต Proper money handling โ amounts are stored as integer minor units (cents), with per-currency formatting for Rp ยท $ ยท โฌ ยท ยฃ (no floating-point money, ever).
- ๐ฆ Accounts & net worth โ asset & liability cards, a net-worth overview, and a per-account register with running balance.
- ๐งพ Transactions โ a clean, date-grouped journal with a familiar Income / Expense / Transfer entry form, live filters and search, plus a bulk-select mode to recategorize many entries at once.
- ๐ณ Debts โ every kind โ track BNPL/installment plans, amortizing loans (APR with a proper principal-vs-interest split per payment, extra payments that shorten the term or lower the payment), revolving credit (attach your existing card account, credit limit & utilization, minimum payments, a monthly statement review that proposes the interest charge for you to confirm), and informal IOUs (a balance, an optional due date, pay any amount). Schedule debts open an off-budget Liability account and become their own budget envelope; card payments are budget-neutral transfers so envelopes never double-count. An overview dashboard shows total owed, weighted average APR and the projected debt-free date, and a snowball vs. avalanche comparison shows where extra money pays off fastest.
- ๐ Analytics โ KPIs, income-vs-expenses, net-worth-over-time and spending-by-category charts โ all derived from the journal, so they never drift from your transactions.
- ๐ Password encryption (optional) โ protect a document with a passphrase and the
.financyfile is encrypted at rest with XChaCha20-Poly1305 and an Argon2id-derived key, and is tamper-evident. Your data is only ever decrypted in memory, never persisted to disk in plaintext. A forgotten passphrase is unrecoverable โ there's no backdoor. - ๐พ Local-first persistence โ each document is a single
.financySQLite file you own. Unencrypted files are always auto-saved (ACID writes โ no save button, no lost work); encrypted files use manual save (Cmd/Ctrl-S) with an unsaved-changes prompt when you close โ the trade-off that keeps plaintext off your disk. - โก Quick start โ first-run setup lets you load demo data (a complete worked budget) or start from scratch with your chosen currency and an optional password.
- ๐ก๏ธ Safe by design โ atomic writes, append-only schema migrations, and an automatic
.bakbefore any file upgrade.
| Accounts & net worth | Analytics |
|---|---|
![]() |
![]() |
| Transactions | First-run setup |
|---|---|
![]() |
![]() |
A touch-first UI built from the same codebase (see MOBILE.md for status and what's not ported yet).
| Home | Transactions | Budget |
|---|---|---|
![]() |
![]() |
![]() |
| Account detail | Debts | Debt detail |
|---|---|---|
![]() |
![]() |
![]() |
Grab the .deb or .rpm for the latest release from the
Releases page:
# Debian / Ubuntu
sudo apt install ./Financy-vX.Y.Z-linux-amd64.deb
# Fedora / RHEL / openSUSE
sudo dnf install ./Financy-vX.Y.Z-linux-x86_64.rpmThis installs the financy command, a desktop launcher, and registers the
.financy file type so you can double-click documents to open them.
- Go 1.25+
- A C toolchain + OpenGL/X11 dev headers (Fyne requirement). On Debian/Ubuntu:
sudo apt-get install gcc pkg-config libgl1-mesa-dev xorg-dev
go run . # or: make runmake build # produces ./financy with the version stamped inOn first launch you'll be greeted with a setup dialog โ pick Load demo data (USD)
to explore, or Start from scratch and choose your currency. Then choose where to
save your .financy file.
- Budget the month โ open ๐ฐ Budget, then click a category to assign money (with quick-budget suggestions) until Ready to Assign is zero. Navigate months with โ โถ, Auto-Assign to copy last month, and + Add Category to grow your plan.
- Add a transaction โ the toolbar
+, or the Add Transaction button. Choose Income / Expense / Transfer; the app writes the correct double-entry postings for you, and the spending flows straight into your budget's Activity. - Track a debt โ open ๐ณ Debts and pick the kind: a BNPL/installment plan, an amortizing loan (enter principal + APR and either the term or the payment โ the other is computed, with a live payoff preview), a credit card / line of credit, or an informal IOU. Pay installments from the Debts screen or via Add Transaction โธ Pay debt, record card payments and extra loan payments from the debt's page, and compare snowball vs. avalanche under Strategies.
- Open an account's register โ click an account card. Right-click a card (or use the โฎ button) for New Transaction ยท View Register ยท Edit ยท Delete.
- Filter the journal โ by month, type, account, or free-text search.
- See your trends โ the ๐ Analytics screen shows KPIs and charts over This month / Last 3 / 6 / 12 / Year to date; hover any month for a tooltip.
- Manage categories & currency โ the โ Preferences dialog (Configuration ยท Categories ยท Data Summary).
- Files โ
File โธ New / Open / Open Recent / Save a Copy / Close.
- Each document is a self-contained SQLite database with a
.financyextension โ move it, back it up, or drop it in a cloud folder (while the app is closed). - It's always saved as you work (ACID writes). There is no "Save" button.
- Save a Copy snapshots the document elsewhere; opening an older file makes a
.bakbefore migrating it to the current schema.
โ ๏ธ SQLite isn't built for two machines editing the same file at once โ don't open the same.financyfrom multiple devices simultaneously.
main.go entry point (embeds the icon, calls ui.Run)
internal/
core/ domain model ยท double-entry Store ยท SQLite ยท formatting (no UI deps)
ui/
style/ palette + theme
component/ reusable widgets (cards, table, rows, app bar, tooltips, charts)
view/ screens (Budget, Accounts, Transactions, Debts, Recurring, Analytics) + Preferences + forms
(root) app shell, controller, toolbar, File menu, document manager
The core package has zero UI dependencies and holds all the accounting logic, so it's
independently testable โ that's where new logic and tests belong.
make check # build + vet + test (run before committing)
make test # tests only
make run # run the app
make run-dev # run with an isolated dev profile + database (won't touch your real data)
make shot # regenerate screenshots (into /tmp/financy-shots)make run-dev repoints $XDG_CONFIG_HOME at ./.devdata/config (gitignored) so dev
gets its own prefs.json, recent-files list, and .financy database โ your real
~/.config/financy is never read or written. First run shows the setup wizard; save the
dev document inside ./.devdata/ and it reopens next time. (Linux/BSD only โ macOS
doesn't honour XDG_CONFIG_HOME.)
Two rules that protect user data:
- Migrations are append-only โ add a new entry to
migrationsininternal/core/db.go; never edit an existing one. - Money stays integer minor units โ never introduce floats for money.
make release VERSION=0.2.0 # stamps version, verifies, builds
git commit -am "Release v0.2.0"
git tag v0.2.0 && git push --tagsPushing a v* tag triggers CI to package Linux / Windows / macOS bundles and attach
them to the GitHub Release. See RELEASING.md for the full guide.
- Go โ application language
- Fyne โ cross-platform native GUI
- modernc.org/sqlite โ pure-Go SQLite (no cgo for the DB)
Financy's core is feature-complete and the project is working toward a stable
v1.0. The supported install target for 1.0 is Linux (.deb / .rpm);
Windows and macOS ship too, but unsigned first (you'll see the usual
"unidentified developer" prompt), with code-signing/notarization coming after 1.0.
The rest of the v1.0 work is locking down the .financy file format plus a
docs/accessibility/hardening pass. After 1.0 the goal is to grow Financy into an
all-in-one finance app. The first priority is ๐ณ in-depth debt
management (interest/APR, amortization schedules, snowball vs. avalanche payoff
strategies and payoff projections), followed by a full ๐ investment tracker
(holdings, cost basis, gains and allocation, built on the same double-entry
journal). Other candidates include budget goals/targets, multi-currency,
an OFX/QFX-aware importer, signed installers, and an opt-in, self-hosted
end-to-end-encrypted sync (never a Financy cloud account).
See ROADMAP.md for the full plan, and CHANGELOG.md for what's already shipped.
Financy is free and open-source, built and maintained in my spare time. If it helps you give every dollar a job, please consider sponsoring on GitHub โ it directly funds continued development and is hugely appreciated. A โญ on the repo helps too!
Released under the MIT License.









