Track your expenses, monitor budgets, and understand your spending habits -- all without leaving the terminal.
Highlights
- Dashboard -- monthly/yearly totals, category bar chart, and a 30-day spending sparkline at a glance
- Expense management -- add, edit, and delete expenses with vim-style keybindings
- Search & filter -- instantly search by description or category, filter recurring entries
- Monthly breakdown -- per-category gauge bars with budget tracking and visual over/under indicators
- Recurring expenses -- set up daily, weekly, monthly, or yearly auto-generated entries
- 20 currencies -- cycle through USD, EUR, GBP, JPY, INR, and 15 more with a single keypress
- CSV import/export -- bring your data in, take it out, no lock-in
- Zero config -- just run it; data is stored automatically in
~/.cashflow/
Installation
Install from crates.io (recommended)
If you have the Rust toolchain installed:
This fetches the latest published version, compiles it, and places the binary in ~/.cargo/bin/, which is typically already on your PATH. You can now run cashflow from anywhere.
To update later:
Install from a local clone
This compiles the binary from source and installs it globally the same way.
Build from source (without installing)
The binary will be at target/release/cashflow. Move it somewhere on your PATH to use it globally:
Verify installation
Usage
# Launch the TUI
# Import expenses from a CSV file, then launch
# Import without launching the UI
Tabs
| Tab | Key | What you see |
|---|---|---|
| Dashboard | 1 |
Monthly & yearly totals, category chart, sparkline |
| Expenses | 2 |
Full expense table with search and filtering |
| Monthly | 3 |
Per-category breakdown with budget gauges |
Adding an expense
Press a from any tab to open the add form. Fill in:
| Field | Input |
|---|---|
| Amount | Numeric value |
| Category | Cycle with ← / → |
| Description | Free text |
| Date | YYYY-MM-DD format |
| Recurring | Toggle with Space |
| Recurrence | Daily / Weekly / Monthly / Yearly |
Press Enter to save, Esc to cancel.
Categories
Food, Transport, Rent, Utilities, Entertainment, Shopping, Health, Education, Subscriptions, and Other (custom text).
Currencies
Cycle forward with c, backward with C. Supports: USD ($), EUR (€), GBP (£), JPY (¥), INR (₹), CAD (C$), AUD (A$), CHF, CNY (¥), BRL (R$), KRW (₩), MXN (MX$), SEK (kr), NOK (kr), DKK (kr), PLN (zł), TRY (₺), THB (฿), IDR (Rp), PHP (₱).
Your currency preference is persisted across sessions.
Keybindings
Global
| Key | Action |
|---|---|
q / Ctrl+C |
Quit |
1 2 3 |
Switch tabs |
Tab / Shift+Tab |
Cycle tabs |
a |
Add new expense |
c / C |
Cycle currency forward / backward |
x |
Export to CSV |
? |
Toggle help overlay |
Expenses tab
| Key | Action |
|---|---|
j / ↓ |
Move down |
k / ↑ |
Move up |
/ |
Search |
e |
Edit selected |
d |
Delete selected (with confirmation) |
r |
Toggle recurring filter |
Monthly tab
| Key | Action |
|---|---|
← / h |
Previous month |
→ / l |
Next month |
Add / Edit form
| Key | Action |
|---|---|
Tab |
Next field |
Shift+Tab |
Previous field |
← / → |
Cycle dropdown options |
Space |
Toggle boolean fields |
Enter |
Save |
Esc |
Cancel |
CSV Format
Cashflow uses a simple CSV format for import and export:
id,amount,category,description,date,is_recurring,recurrence
1,12.50,Food,Lunch,2026-02-15,false,
2,50.00,Transport,Monthly metro pass,2026-02-01,true,Monthly
Budgets
Edit ~/.cashflow/budgets.csv to set monthly budget limits per category:
category,monthly_limit
Food,300.00
Transport,150.00
Entertainment,100.00
The Monthly tab will display spending vs. budget with color-coded gauges (red when over 90%).
Data Storage
All data lives in ~/.cashflow/:
| File | Purpose |
|---|---|
expenses.csv |
All your expenses (auto-saved) |
budgets.csv |
Per-category monthly budget limits |
config |
Currency preference |
export_*.csv |
Timestamped export snapshots |
No databases, no cloud, no accounts. Your data stays on your machine.
Built With
- Rust -- performance and reliability
- Ratatui -- terminal user interface
- Crossterm -- cross-platform terminal handling
- Serde + csv -- serialization
- Chrono -- date and time