A local GTK app for testing money decisions against your real bank-file history. Add temporary fake transactions to see what happens if you buy something, take on a new cost, receive salary, or solve a problem with the money you have.
Bank Files can also be used as a simple bank-file viewer. It opens CSV, Excel, and Calc bank files locally, keeps remembered history so older imports are not lost, and lets you turn that off when you only want to inspect files for the current session.
Duplicate filtering keeps repeated downloads from changing results, so you can import bank exports whenever you feel like it. The app keeps the overview easy and warns you when spending, budgets, or missing rules need attention.
- Add fake transactions to preview purchases, salary changes, refunds, transfers, recurring costs, and other what-if choices without editing the original bank files.
- Open bank transaction CSV, Excel, and Calc files through Choose Bank Files, drag-and-drop, Open With, or the app data folder.
- Remember opened bank files so history stays available across sessions, or use forget mode as a temporary viewer.
- Filter duplicate rows so bank exports downloaded at random moments do not distort totals.
- Automatic field detection for columns such as date, amount, description, counterparty, account, currency, transaction ID, debit, and credit.
- Open configuration CSVs the same way:
rules.csv,budgetcodes.csv, andfield_aliases.csv. - Detect common bank fields such as date, amount, debit, credit, description, counterparty, tags, account, currency, direction, and transaction ID.
- Read common delimiters:
;,,, tab, and|. - Parse European amount notation such as
1.234,56and international notation such as1,234.56. - Categorize income and expenses with editable rules, regex patterns, amount limits, directions, and tags.
- Use fixed monthly budgets or percentage-based budgets such as
10%/10% of income. - Show monthly and yearly overviews, trends, category changes, budget room, and transaction lists.
- Warn when spending is above income or planned budgets exceed income; over-budget items stay visible on budget cards. Transfers use
direction=transferso internal money moves do not inflate income or expenses. - Filter cards and charts into the transaction list, then copy, print, or export the filtered result.
- Print filtered reports and export cleaned transactions as CSV.
- Generate an initial budget from imported transactions when the default budgets are still in use.
- Restore the default budgeting files when custom generated budgets are no longer wanted.
sudo apt update
sudo apt install build-essential pkg-config libgtk-4-dev libadwaita-1-devInstall Rust through rustup if it is not installed yet.
cargo run --releasesudo dnf install gcc pkg-config gtk4-devel libadwaita-devel
cargo run --releaseUse Meson for a normal Linux install. This installs the binary, desktop file, app metadata, GSettings schema, icons, symbolic action icons, GTK resource bundle, GNOME search provider files, compiled translations, and source PO/POT files in the selected prefix. For a Meson release build, the default feature set is enough:
meson setup build -Dcargo_variant=release
meson compile -C build
sudo meson install -C buildThe GTK resource bundle is installed to share/bank-files/bank-files.gresource and loaded from there by normal Linux release installs. Plain Cargo development builds, Meson developer/debug builds, Windows builds, and setup/self-contained builds keep GTK resources embedded:
meson setup build -Dcargo_variant=release -Dsetup=true- Start the app with
cargo run --release. - Click Choose Bank Files, drop bank CSV, Excel, or Calc files onto the window, use Open With, or place transaction files manually in the app data folder.
- Open
rules.csv,budgetcodes.csv, orfield_aliases.csvthe same way to update configuration. - Use Categorization Rules, Budgets, and Normalize CSV Fields to edit configuration inside the app.
- Add fake transactions from the main menu or from an existing transaction to preview what changes.
- Use Overview and Budget cards and charts to jump to matching transactions.
- Use Print Page or Export CSV to share the current filtered view.
- Overview shows imported totals, fake-transaction effects, the latest month, active rules, yearly comparisons, trend charts, budget warnings, and annual categories.
- Budget shows one selected month with expenses, income, balance, budget room, category totals, fake-transaction effects, and budget warnings.
- Transactions shows the searchable transaction list. Click a transaction to expand CSV-like details such as source file, tags, account, and transaction ID.
- Diagnostics shows import quality, detected fields, warnings, duplicate filtering, and quick actions for rules and field mappings.
The app highlights several situations that are easy to miss in a bank export:
- Spending is above income: expenses exceed income for the selected month or year.
- Check your budget: planned budgets are above income.
- Spending is over budget: one or more budget codes are over plan, including spending without a configured budget.
- Unconfigured budgets: expense transactions have a missing or unknown budget code.
- Other categories: transactions fall back to
OTHERorINC-OTHER.
The repository includes English, Dutch, and German sample CSVs:
- transaction demos:
data/example/demo_transactions.en.csv,data/example/demo_transactions.nl.csv,data/example/demo_transactions.de.csv, anddata/example/demo_transactions.csv - default English configuration:
data/defaults/editable_rules.csv,data/defaults/budgetcodes.csv, anddata/defaults/editable_field_aliases.csv - default Dutch configuration:
data/defaults/editable_rules.nl.csv,data/defaults/budgetcodes.nl.csv, anddata/defaults/editable_field_aliases.nl.csv - default German configuration:
data/defaults/editable_rules.de.csv,data/defaults/budgetcodes.de.csv, anddata/defaults/editable_field_aliases.de.csv
On first start, missing configuration files are created in the app configuration folder. Dutch and German environments receive localized defaults; other environments receive the English defaults. Existing configuration files are left unchanged.
Rules live in rules.csv in the configuration folder. Open the rules editor from Categorization Rules.
Columns:
priority,active,field,pattern,category,budget_code,direction,amount_min,amount_max,notesExample:
120,true,any,"(?i)github|openai|hetzner",Software & cloud,CLOUD,expense,,,Work/developer toolsImportant fields:
priority: highest priority wins.active:trueorfalse.field:any,description,counterparty,tags,account, ortransaction_id.pattern: regex; use(?i)for case-insensitive matching.direction:expense,income, or empty for all transactions.amount_minandamount_max: optional, based on absolute transaction value.categoryandbudget_code: the values assigned when the rule matches.
Rules can also be created from a transaction detail menu.
Budget codes live in budgetcodes.csv in the configuration folder and can be edited from Budgets.
code,parent_code,special,category,monthly_budget,yearly_budget,direction,income_basis,notes
FOOD,,,Groceries,500,,expense,real,Monthly groceries budget
CARE,,,Healthcare,,1200,expense,real,Annual healthcare budget
MEDS,CARE,,Medication,50,,expense,real,Medication sub budgetThe monthly_budget and yearly_budget fields accept fixed amounts and income-based percentages:
FOOD,,,Groceries,500,,expense,real,Monthly groceries budget
CARE,,,Healthcare,,1200,expense,real,Yearly healthcare budget
SAVE,,,Savings,10%,,income,real,Monthly savings targetActual expenses are compared with the configured budget. Monthly views use monthly_budget; if it is empty they show one twelfth of yearly_budget. Yearly views use yearly_budget; if it is empty they annualize monthly_budget. If both are set, each view uses its matching period. Warnings are shown when spending or planning exceeds income.
Use parent_code to make sub budget codes. A child is still a normal budget code, and parent budget rows include their own totals plus all child budget totals.
If a bank uses an unusual column name, add it to field_aliases.csv in the configuration folder or use Normalize CSV Fields / Diagnostics field mapping.
canonical,alias
amount,Transaction amount in EUR
description,Details betaling
tags,RubriekCanonical names:
dateamountdebitcreditdescriptioncounterpartytagsaccounttransaction_idcurrencydirection
By default, the app uses platform folders from dirs-next:
- configuration:
config_dir()/bank-files, for example~/.config/bank-fileson Linux - app data and transaction CSVs:
data_dir()/bank-files, for example~/.local/share/bank-fileson Linux
You can set a fixed or project-local location with:
BANK_FILES_HOME=/path/to/my/bank-files cargo run --releaseWith BANK_FILES_HOME, config/ is used for rules and data/ for transaction CSVs under that folder.
Everything runs locally. Bank data is not sent to external services.
Banks use different CSV formats. The heuristic usually works well with clear column names and normal amount notation. For unusual exports, use the Diagnostics page to see which fields were detected, then add field aliases or map a CSV header.
