Financy: Zero-Based Budgeting App

Personal Project · Open Source

Financy zero-based budget screen with Ready to Assign and category envelopes

Introduction

Financy is an open-source zero-based budgeting (ZBB) app for desktop and mobile - give every dollar a job. You 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: every transaction is a set of balanced postings that sum to zero, so your budget, account balances, and net worth are all derived from a single journal and can never drift out of balance.

It's also radically local-first and private. Your data lives in a single .financy file you own - no cloud, no account, no tracking - and can optionally be protected with strong password encryption so even the file on disk is unreadable without your passphrase.

Why I Built It

Most budgeting apps are subscription SaaS products that hold your financial data hostage in someone else's cloud. I wanted the rigor of a proper envelope-budgeting tool (in the spirit of YNAB) with the ownership model of a plain file on my disk: open format, no account, no telemetry, and encryption strong enough that I could drop the file in a synced folder without worrying.

I also wanted to prove the accounting core properly - money handling is exactly the kind of domain where "close enough" isn't good enough.

Key Features

Zero-Based Budgeting

  • Assign money per category each month 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
  • An honest Ready-to-Assign: a single pool drawn from real on-budget account balances, so you can never assign money you don't have
  • Locked history - past months are view-only; a budget you've already lived through can't be rewritten

Real Double-Entry Accounting

  • Every transaction is balanced postings that sum to zero - budget, balances, and net worth are derived, never stored separately
  • Amounts are stored as integer minor units (cents) with per-currency formatting for Rp · $ · € · £ - no floating-point money, ever
  • Credit cards are budget-neutral the way a good ZBB tool should be: card spending depletes its envelope and nets against the budget

Debt Management

  • BNPL/installment plans, amortizing loans (APR with proper principal-vs-interest splits, extra payments), revolving credit (limits, utilization, monthly statement review), and informal IOUs
  • An overview dashboard with total owed, weighted average APR, projected debt-free date, and a snowball vs. avalanche payoff comparison

Privacy & Data Ownership

  • Optional XChaCha20-Poly1305 encryption at rest with an Argon2id-derived key - tamper-evident, decrypted only in memory, no backdoor
  • Each document is a self-contained SQLite file with ACID auto-save, atomic writes, append-only schema migrations, and an automatic .bak before any upgrade

Accounts, Transactions & Analytics

  • Asset & liability accounts, net-worth overview, and per-account registers with running balances
  • A date-grouped journal with Income / Expense / Transfer entry, live filters, search, and bulk recategorization
  • KPIs, income-vs-expenses, net-worth-over-time, and spending-by-category charts - all derived from the journal

Cross-Platform

  • Native desktop app for Linux, Windows, and macOS, with .deb/.rpm packages and a registered .financy file type
  • A touch-first Android UI (beta) built from the same codebase

Screenshots

Financy accounts and net worth overview Financy transactions journal Financy analytics with KPIs and charts

Technology Stack

Core

  • Go - application language; the accounting core lives in a core package with zero UI dependencies, so all the money logic is independently testable
  • Fyne - cross-platform native GUI (desktop + Android from one codebase)
  • modernc.org/sqlite - pure-Go SQLite, no cgo for the database

Security

  • XChaCha20-Poly1305 - authenticated encryption at rest
  • Argon2id - memory-hard key derivation from the user's passphrase

Engineering

  • GitHub Actions - CI (build, vet, test) plus a scheduled govulncheck pass
  • Makefile workflow - make check, isolated dev profiles (make run-dev), automated screenshot generation, and tag-triggered release packaging for all three desktop platforms

Engineering Highlights

Two rules protect user data across the whole codebase:

  1. Migrations are append-only - schema history is never rewritten, and older files get an automatic backup before upgrading
  2. Money stays in integer minor units - floats are banned for monetary values

The strict separation between the UI and the double-entry core package means every piece of accounting logic - envelope math, amortization schedules, credit-card neutrality - is covered by plain Go tests without touching the GUI.

Roadmap

The core is feature-complete and heading toward a stable v1.0 (Linux as the supported install target, Windows/macOS unsigned at first). After 1.0, the plan is to grow Financy into an all-in-one finance app: a full investment tracker on the same double-entry journal, budget goals, multi-currency, an OFX/QFX importer, and an opt-in, self-hosted end-to-end-encrypted sync - never a Financy cloud account.

Links

Financy is free, MIT-licensed, and built in my spare time - stars and GitHub sponsorships are hugely appreciated!