Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

103 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ’ฐ Financy

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.

CI ย govulncheck ย Go ย Fyne ย SQLite ย Encryption ย License

๐Ÿ“– Read the documentation ยท ๐ŸŒ Website

Zero-based budget

โœจ Features

  • ๐ŸŽฏ 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 .financy file 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 .financy SQLite 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 .bak before any file upgrade.

๐Ÿ“ธ Screenshots

Zero-based budget โ€” Ready to Assign, category envelopes
Accounts & net worth Analytics
Transactions First-run setup

๐Ÿ“ฑ Mobile (Android โ€” beta)

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

๐Ÿš€ Getting Started

Install (Linux packages)

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.rpm

This installs the financy command, a desktop launcher, and registers the .financy file type so you can double-click documents to open them.

Prerequisites (building from source)

  • 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

Run it

go run .        # or: make run

Build a binary

make build      # produces ./financy with the version stamped in

On 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.


๐Ÿงญ Usage

  • 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.

๐Ÿ’พ Your Data

  • Each document is a self-contained SQLite database with a .financy extension โ€” 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 .bak before migrating it to the current schema.

โš ๏ธ SQLite isn't built for two machines editing the same file at once โ€” don't open the same .financy from multiple devices simultaneously.


๐Ÿ—๏ธ Architecture

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.


๐Ÿ› ๏ธ Development

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:

  1. Migrations are append-only โ€” add a new entry to migrations in internal/core/db.go; never edit an existing one.
  2. Money stays integer minor units โ€” never introduce floats for money.

๐Ÿšข Releasing

make release VERSION=0.2.0     # stamps version, verifies, builds
git commit -am "Release v0.2.0"
git tag v0.2.0 && git push --tags

Pushing 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.


๐Ÿงฐ Tech Stack

  • Go โ€” application language
  • Fyne โ€” cross-platform native GUI
  • modernc.org/sqlite โ€” pure-Go SQLite (no cgo for the DB)

๐Ÿ—บ๏ธ Roadmap

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.


โค๏ธ Support the Project

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!


๐Ÿ“„ License

Released under the MIT License.

About

Open-source zero-based budgeting (ZBB) for your desktop & mobile

Topics

Resources

Stars

Watchers

Forks

Releases

Sponsor this project

Contributors

Languages