A full-featured budget & expense tracker desktop application built with Electron — inspired by the Cashew mobile app.
Track your spending, manage budgets, set savings goals, and visualize your financial data — all stored locally on your machine with no cloud required.
- Dashboard — spending overview, recent transactions, and wallet balances at a glance
- Transactions — add, edit, and filter income/expense entries with category tagging
- Budgets — set monthly or custom-period spending limits per category with visual progress bars
- Goals — create savings goals and track progress over time
- Wallets — manage multiple accounts (cash, bank, credit card, etc.)
- Categories — fully customizable income and expense categories with icons
- Statistics — interactive charts (bar, pie, line) powered by Chart.js for spending trends
- Settings — theme switching (light/dark), currency selection, CSV import/export, and database backup/restore
- Local-first — all data stored in a local SQLite database via
better-sqlite3; nothing leaves your device
| Layer | Technology |
|---|---|
| Shell | Electron 31 |
| Database | better-sqlite3 (SQLite) |
| Charts | Chart.js 4 |
| Frontend | Vanilla JS + CSS (no framework) |
| Packaging | electron-builder |
- Node.js v18 or later
- Windows, macOS, or Linux
# Clone the repository
git clone https://github.com/razibit/cashew-desktop.git
cd cashew-desktop
# Install dependencies
npm install
# Rebuild native modules against Electron's Node.js runtime
npm run rebuildnpm startTo open DevTools automatically:
npm run dev# Windows (.exe installer)
npm run build:win
# macOS (.dmg)
npm run build:mac
# Linux (.AppImage)
npm run build:linuxBuilt artifacts are output to the dist/ folder.
cashew-desktop/
├── main.js # Electron main process — window creation, IPC handlers, SQLite
├── preload.js # contextBridge — securely exposes APIs to the renderer
├── src/
│ ├── index.html # App shell
│ ├── styles/
│ │ ├── main.css # Layout and base styles
│ │ ├── themes.css # Light/dark theme variables
│ │ └── components.css # Reusable component styles
│ └── js/
│ ├── app.js # Router and app initialization
│ ├── utils/
│ │ ├── helpers.js # Shared utility functions
│ │ ├── icons.js # Icon map
│ │ └── currency.js # Currency formatting
│ └── components/
│ ├── home.js # Dashboard
│ ├── transactions.js # Transaction list & forms
│ ├── budgets.js # Budget management
│ ├── goals.js # Savings goals
│ ├── wallets.js # Wallet accounts
│ ├── categories.js # Category editor
│ ├── statistics.js # Charts & analytics
│ └── settings.js # App settings
└── package.json
better-sqlite3 is a native Node.js addon. If you see an error like:
The module was compiled against a different Node.js version
Run the following with Electron closed:
npm run rebuildThis recompiles the native binary against the exact Node.js version bundled inside Electron.
All data is stored in a local SQLite database on your machine. No analytics, no telemetry, no network calls. You can back up or restore the database at any time from Settings → Data.
Inspired by Cashew — the open-source Flutter budget app by @jameskokoska.
