| Crates.io | fintrack |
| lib.rs | fintrack |
| version | 0.2.0 |
| created_at | 2026-01-03 21:49:53.846172+00 |
| updated_at | 2026-01-03 22:00:42.597888+00 |
| description | A local-first CLI financial tracker for managing income and expenses |
| homepage | https://github.com/steph-crown/fintrack/readme.md |
| repository | https://github.com/steph-crown/fintrack |
| max_upload_size | |
| id | 2020851 |
| size | 316,453 |
A local-first CLI financial tracker written in Rust. Track your income and expenses on your own machine, with zero cloud dependencies and complete data ownership.
~/.fintrack/. No remote servers, no accounts, no privacy concerns.If you have Rust installed, install FinTrack directly from crates.io:
cargo install fintrack
Then verify installation:
fintrack --version
To build from source, you'll need Rust 1.70+. Install Rust here.
git clone https://github.com/steph-crown/fintrack.git
cd fintrack
cargo install --path .
Then verify installation:
fintrack --version
fintrack init -c NGN
Or with opening balance:
fintrack init -c NGN -o 1000.00
This creates ~/.fintrack/tracker.json and sets your currency. Supported currencies: NGN, USD, GBP, EUR, CAD, AUD, JPY.
Flags:
-c, --currency (optional) – Currency code, defaults to NGN-o, --opening (optional) – Opening balance, defaults to 0.0fintrack add Income 4000 -s Wages
Or using long flags:
fintrack add Income 4000 --subcategory Wages
With description and date:
fintrack add Expenses 150.50 -s Groceries -d "Weekly shop" -D 28-12-2025
Arguments:
category (positional, required) – Income or Expensesamount (positional, required) – Positive number-s, --subcategory (optional) – Defaults to "miscellaneous"-d, --description (optional) – Any text-D, --date (optional) – Format: DD-MM-YYYY, defaults to todayfintrack list
See totals:
fintrack total
Filter by date range:
fintrack list -S 01-12-2025 -E 31-12-2025
Filter by category or subcategory:
fintrack list -c Income
fintrack list -s Groceries
View first or last N records:
fintrack list -f 5 # First 5 records
fintrack list -l 10 # Last 10 records
List flags:
-f, --first N – Show first N records-l, --last N – Show last N records-S, --start DATE – Start date filter (DD-MM-YYYY)-E, --end DATE – End date filter (DD-MM-YYYY)-c, --category CATEGORY – Filter by category-s, --subcategory NAME – Filter by subcategoryView all categories:
fintrack category list
Note: Categories (Income, Expenses) are immutable and cannot be created, deleted, or renamed.
View all subcategories:
fintrack subcategory list
Add a new subcategory:
fintrack subcategory add Utilities
Delete a subcategory (only if it has no records):
fintrack subcategory delete Utilities
Rename a subcategory:
fintrack subcategory rename Groceries Food
Subcategory commands:
list – View all subcategoriesadd <NAME> – Create a new subcategorydelete <NAME> – Delete a subcategory (must have no records)rename <OLD> <NEW> – Rename a subcategoryUpdate a record by ID:
fintrack update 5 -a 200 -d "Revised amount"
Update arguments:
record_id (positional, required) – Record ID to update-c, --category CATEGORY (optional) – New category-a, --amount AMOUNT (optional) – New amount-s, --subcategory NAME (optional) – New subcategory-d, --description TEXT (optional) – New description-D, --date DATE (optional) – New dateDelete records by ID(s):
fintrack delete -i 5
fintrack delete -i 1,2,3 # Multiple IDs
Delete all records in a category:
fintrack delete -c Expenses
Delete all records in a subcategory:
fintrack delete -s Groceries
Delete flags (one required):
-i, --ids ID1,ID2,... – Delete by record IDs-c, --by-cat CATEGORY – Delete all records in category-s, --by-subcat NAME – Delete all records in subcategoryGet a summary with exploratory data analysis:
fintrack describe
This shows:
Export to CSV:
fintrack export ~/Downloads -t csv
Export to JSON:
fintrack export ~/Downloads -t json
Export arguments:
path (positional, required) – Directory where file will be created-t, --type TYPE (optional) – File type: csv or json (defaults to json)Files are named: fintrack_export_YYYY-MM-DDTHH-MM-SSZ.{csv|json}
View raw JSON data:
fintrack dump
Clear all data:
fintrack clear
| Task | Command |
|---|---|
| Initialize tracker | fintrack init -c NGN |
| Initialize with opening | fintrack init -c NGN -o 1000 |
| Add record | fintrack add Income 4000 -s Wages |
| Add with description | fintrack add Expenses 150.50 -s Groceries -d "Weekly shop" |
| Update record | fintrack update 5 -a 200 -d "Updated" |
| List all records | fintrack list |
| List first 5 | fintrack list -f 5 |
| List last 10 | fintrack list -l 10 |
| Filter by category | fintrack list -c Income |
| Filter by date range | fintrack list -S 01-12-2025 -E 31-12-2025 |
| View totals | fintrack total |
| Delete record by ID | fintrack delete -i 5 |
| Delete multiple IDs | fintrack delete -i 1,2,3 |
| Delete by category | fintrack delete -c Expenses |
| Delete by subcategory | fintrack delete -s Groceries |
| View categories | fintrack category list |
| View subcategories | fintrack subcategory list |
| Add subcategory | fintrack subcategory add Shopping |
| Rename subcategory | fintrack subcategory rename Old New |
| Delete subcategory | fintrack subcategory delete Shopping |
| Describe data | fintrack describe |
| Export to CSV | fintrack export ~/Downloads -t csv |
| Export to JSON | fintrack export ~/Downloads -t json |
| View raw JSON | fintrack dump |
| Clear all data | fintrack clear |
| Get help | fintrack help |
Dates: DD-MM-YYYY (e.g., 30-12-2025)
Amounts: Positive numbers only (e.g., 4000 or 150.50)
Names: Alphanumeric, start with a letter (e.g., "Groceries", "Utilities_Bill")
All your data is stored locally:
~/.fintrack/
├── tracker.json # Your financial data
└── backups/ # Directory for future backup functionality
You can safely back up the entire ~/.fintrack/ directory to protect your data.
You can view your current data anytime:
fintrack dump
This pretty-prints your tracker.json to the terminal.
Note: Automatic backups are not currently implemented. It's recommended to manually back up your ~/.fintrack/ directory periodically.
# Add monthly salary
fintrack add Income 50000 -s Wages -D 01-12-2025
# Add rent
fintrack add Expenses 20000 -s Housing -D 01-12-2025
# Add groceries
fintrack add Expenses 5000 -s Groceries -D 10-12-2025
fintrack add Expenses 4500 -s Groceries -D 20-12-2025
# View summary
fintrack total
# See expenses by category
fintrack list -c Expenses
fintrack list -l 7
fintrack list -c Income -S 01-01-2025 -E 31-12-2025
fintrack list -l 5 # Find the wrong record
fintrack update 42 -a 300 # Correct it
fintrack describe
This provides insights like:
fintrack help to see all available commands-c Income -a 4000 is the same as -a 4000 -c Incomefintrack describe to get insights into your spending patternsYou've already run fintrack init once. If you want to start fresh, run:
fintrack clear
Then fintrack init again.
View all available subcategories:
fintrack subcategory list
Then use the exact name from the list.
You must delete all records in that subcategory first, or delete the subcategory and all its records at once:
fintrack delete -s Groceries
Run:
fintrack dump
to inspect your data. If something is wrong, you may need to restore from a manual backup or start fresh with fintrack clear and fintrack init.
Coming soon:
Found a bug? Want a feature? Open an issue or pull request on GitHub.
MIT License. See LICENSE file for details.
Interested in the technical design and architecture decisions behind FinTrack? Check out the Design Document for a comprehensive deep-dive into how the tool is built, including data structures, error handling, and the reasoning behind each decision.
Get started now: fintrack init -c NGN