A self-hosted budgeting app that answers one question: am I going to be okay until my next paycheck?
Most budgeting apps assume your month starts on the 1st. If you're paid on the 25th, the last Friday, or every other Thursday, every report you look at is off by a paycheck.
Salary lands May 25th, rent is paid June 1st. May looks like a big surplus, June looks like a big deficit. Neither number reflects what actually happened.
Tower Finance budgets payday to payday. Income and the bills it pays sit in the same period, so the report matches what your bank account did.
Every screen opens with a plain-language verdict. The detail is there when you want it, but it isn't the first thing you see.
🟢 okay, 🟡 tight, 🔴 trouble. The headline compares the money you have left this cycle against a safety buffer you set.
Budgets, insights and savings rate are bucketed by your pay cycle, so each paycheck lines up with the spending it actually pays for.
One SQLite file on your server. No cloud account, no bank credentials, no telemetry. JSON export and import, plus an optional password.
Bills, subscriptions and payment plans all flow into the verdict automatically. Override any individual month when life is weird.
Top spending, budget vs actual, income allocation, savings rate. Each chart maps to a decision you'd actually make about next cycle.
Add it to your phone's home screen and it opens fullscreen like a native app. A routine transaction takes about three taps.
If payday isn't the 1st, a calendar-month chart strands each paycheck from the spending it funds. Tower Finance buckets the Insights charts by your pay cycle instead, so the numbers line up with the dashboard.
Browse past cycles like pages in a journal. Income, expenses, subscription charges, bill occurrences and plan installments are listed for each cycle, in the period that actually paid them.
Financial data is sensitive, and the project treats it that way. The choices below aren't on a roadmap to change.
Drop a compose file on a server you already run, then open the URL. First-run onboarding sets your payday and a safety buffer. There's also a one-tap sample-data mode if you'd rather poke around first.
Pre-built multi-arch container on GHCR. Pin a version or track :latest.
Everything lives in ./data/tower.db. Back it up by copying the file.
30-second onboarding, then start logging. Or load the sample data first.
# Drop this in a folder, then: docker compose up -d services: tower-finance: image: ghcr.io/blacksuite/tower-finance:latest container_name: tower-finance ports: - "3210:3210" volumes: - ./data:/app/data restart: unless-stopped
./data/tower.db. Copy the
file with whatever you already use for backups. There's also a one-click
JSON export and import inside the app.docker compose pull && docker compose up -d. Schema
migrations run on start, and Watchtower handles it too if that's how
you update your other containers. Pin a tag instead of :latest
if you want to control when updates land.Free, open source, and runs on a server you already own. A compose file and one open port is all the setup there is.