Budgeting apps kept asking for a subscription, so I built a free one
Description and use
Budget Ctrl is a free, offline budgeting app that stores all data in a local JSON file, imports bank CSVs, and updates via signed GitHub releases, addressing subscription and privacy concerns.
Problem
Most budgeting apps require a subscription or lock useful features behind a paywall, which conflicts with users’ desire for a free, privacy‑respecting tool.
Outcome
Budget Ctrl delivers a fully local, subscription‑free budgeting experience with payday‑based periods, robust CSV import, and reliable backups, while maintaining privacy and avoiding external dependencies.
Workflow
- 1. Install Budget Ctrl via a ~3.7 MB Windows installer or Linux package.
- 2. Configure payday cutoff day to shift budget periods accordingly.
- 3. Import bank statements by selecting CSV files; the importer auto‑detects encoding, separator, date format, and column meanings, then matches rows against existing budget entries to avoid double‑counting.
- 4. Manage recurring bills and income; the app calculates the actual date within a period using the recurringDateInPeriod function.
- 5. Use the built‑in backup system: daily backups plus pre‑risk backups are kept locally; damaged files are ignored and recovery options are presented.
- 6. Update the app by checking the signed latest.json manifest once a day and installing the new installer when prompted.
- 7. Switch between five languages (English, Polish, German, Spanish, Chinese) with proper plural handling via Intl.PluralRules.
Evidence
Budget Ctrl is a desktop budgeting app for Windows and Linux. It's free and MIT licensed: no subscription, no premium tier, no ads.
The whole budget is one JSON file in your app data folder. The only thing the app connects to is GitHub, to check for updates, and you can turn that off.
Bank CSV exports have no common format, and Polish banks have their own habits. Many write Windows-1250 instead of UTF-8, separate columns with semicolons, use decimal commas, and put a block of account details above the actual table.
A damaged file meant an empty budget. If the file was cut short, by a crash in the middle of a save for example, the app couldn't read it and quietly started an empty budget.
- Record date: 2026-10-12T17:56:03.280Z