WiseXpense is a self-hosted personal finance manager. It tracks spending, categorizes transactions, and provides financial insights. Your data stays local on your machine using an embedded SQLite database.
It uses Plaid's Development environment to connect real bank accounts (US and Canada supported) for free. Because it is self-hosted and single-user, there are no cloud subscriptions or required logins.
Clone the repository and install the Python package. We recommend using a virtual environment.
git clone https://github.com/noahnghg/WiseXpense.git
cd WiseXpense
python3 -m venv .venv
source .venv/bin/activate
pip install -e .Because WiseXpense is 100% private and runs locally on your machine, you must use your own free Plaid developer keys to connect to real banks.
- Create a free account at dashboard.plaid.com/signup (no credit card required).
- Navigate to Team Settings → Keys in your Plaid dashboard.
- Run the interactive setup wizard in your terminal:
wisexpense setup
- Paste your
client_idand your Developmentsecretwhen prompted by the wizard.
Note: The "Development" secret allows you to connect up to 100 real bank accounts for free. If you just want to test the UI with fake data, use the "Sandbox" secret.
Start the local server and open the web interface:
wisexpense startOther available commands:
wisexpense info: Check configuration and bank connection statuswisexpense reset: Delete all local transaction data and drop the database
- Backend: Python, FastAPI, SQLAlchemy
- Database: SQLite (stored at
~/.wisexpense/wisexpense.db) - Frontend: React, Vite (bundled as static files within the Python package)
- Integration: Plaid API
Bank credentials are never stored. The application only accesses read-only data through Plaid access tokens. Because there are no user accounts, you should only run this application locally on trusted machines.
This project is licensed under the MIT License - see the LICENSE file for details.