Earn; Spend; Grow;
getbud is a self-hosted budgeting app for Canadians. Your income, your spending, your TFSA room โ on your own server, in your own database.
docker pull ghcr.io/ctrl-research/getbud:latest
The whole picture of your money
One app for tracking what comes in, what goes out, and what's growing โ built around how Canadians actually save.
Canadian accounts, first-class
Chequing, savings, and credit cards next to RRSP, TFSA, FHSA, and non-registered investment accounts. Cash balances derive from transactions; investments from balance snapshots.
Contribution room
Enter your CRA room per year and getbud derives contributions and withdrawals from your transactions โ moving money between two TFSAs correctly doesn't count as new room used.
CSV import that just works
Drop in any bank or credit-card export. Delimiter, date format, and amount columns are auto-detected; duplicates are flagged softly; any import reverts with one click.
Sankey cash flow
See income streams pool and fan out into spending categories โ with whatever's left flowing to savings. The single most honest picture of a month.
Trends & breakdowns
Monthly stacked bars by category, income vs. expense views, and a category donut with a full table. Colors follow your categories everywhere.
Net worth over time
Point-in-time balance snapshots roll up into a month-by-month net-worth chart, stacked by account type, carrying each account's latest balance forward.
Transfers done right
Moving money between your own accounts is never income or an expense. Both legs are linked, created and deleted together, and excluded from every report.
Multi-user, fully private
Invite family via an email allowlist. Every account, transaction, and report is scoped to its owner โ nobody sees anyone else's money.
Self-hosted & yours
A single Go binary with the UI embedded, Postgres behind it, and sign-in via Google or any OIDC provider (Authentik, Keycloak, โฆ). All amounts stored as integer cents.
Up and running in a minute
Clone the repo, set a password, and go. Migrations run automatically; the first account to sign in becomes admin.
git clone https://github.com/ctrl-research/getbud
cd getbud
cp .env.example .env # set POSTGRES_PASSWORD at minimum
docker compose up -d # app on :8081