Track your net worth. Offline. No subscriptions. No cloud.
A native macOS app that tracks net worth through dated snapshots of account balances — with charts, FX conversion, and privacy controls, all stored locally on your machine. Part of the Quiet Apps family.
Install · Features · Build from source · Data & Exports · FAQ
brew tap quietapps/quietfinance
brew install --cask quietfinanceUpdate:
brew update && brew upgrade --cask quietfinanceUninstall:
brew uninstall --cask quietfinance
brew untap quietapps/quietfinanceQuiet Finance is distributed unsigned. The Homebrew cask strips the Gatekeeper quarantine attribute automatically. If the app refuses to launch after a manual install, run
xattr -cr "/Applications/Quiet Finance.app"once in Terminal.
Download the latest ZIP from Releases, unzip, and drag Quiet Finance.app to /Applications. If Gatekeeper blocks launch: right-click → Open → confirm, or run xattr -cr "/Applications/Quiet Finance.app".
Every finance app wants your bank login, a monthly fee, or both. Quiet Finance wants neither. Snapshots are point-in-time records of what each account is worth — enter them manually, see a chart, understand your trajectory. USD↔INR FX is fetched live but never rewrites a locked snapshot. Nothing leaves your machine.
- Hero net worth with embedded sparkline and inline delta chip
- Anomaly flag — statistical outlier detection surfaces unusual jumps or drops (≥2σ) inline on the hero widget
- Year in review — trailing-12-month panel: net change, best/worst quarter, highest balance, biggest mover account
- Compare bar (vs Previous / Year ago)
- Customizable widgets: Goal progress + ETA + monthly breakeven, Milestones (next round number + on-track pacing), Liquidity / runway, KPI cards, Net change rate, Currency exposure with FX sensitivity, allocation breakdowns, Allocation drift vs targets with rebalance hints, Debt payoff ETA with extra-payment slider, movers, history
- Watchlist of pinned accounts surfaced inline
- Getting-started checklist on first run, derived live from your data
- Breakdown — Treemap, stacked bars, filters, accounts table with % of total; cross-link from Dashboard slices
- Trends — Time-series with hover tooltips, range filters, forecast panel (Linear / CAGR with ±1σ band)
- Create, lock/unlock, edit per-account values with live totals and deltas
- Keyboard-first editing — Return advances field-to-field; ⌘S saves draft without mouse
- Share card — one click copies a branded PNG card (net worth, delta, date) to the clipboard
- Completeness badge, pinned snapshot tabs, missing-row highlights, stale-account flag
- Diff (
⌘⇧D) — compare two dates with a Money Flow Sankey visual of where value moved - Scenario — fork any snapshot into a what-if sandbox: tweak values, add hypothetical items, see delta net worth, allocation shift, and goal-ETA change. Never persisted — real data untouched by construction.
- Period compare, QoQ heatmap (quarters × categories), CAGR & monthly drift, asset-type drilldown
- Inline-edit grids for people, countries, asset types, and accounts
- Optional cost basis + Unrealized column per account
- Drag-reorder, pin to watchlist, multi-select with Bulk Edit and Account Merge
- Receivables — money owed to you, with start dates and per-snapshot balances
- CSV export: full history, accounts list, snapshot totals, receivables (now with per-snapshot multi-currency rate tables)
- Auto-detecting CSV import handles both Full history and Accounts list formats (creates or updates existing accounts)
- Import preview — dry-run sheet shows detected format, valid/issue rows, and what would be created before anything is written
- PDF export: Dashboard snapshot and snapshot-detail reports
- App lock on launch (Touch ID / Apple Watch / system password)
- Idle auto-lock with configurable timeout
- Stealth mode — blurs all amounts when active
- Menu bar item for quick access without exposing the main window
- Modern design (default) — Quiet Apps design tokens: cool neutral palette, Quiet Blue accent, Geist Mono numerics, 14px card radius, layered shadows. Both Light and Dark Mode fully supported.
- Classic design — the original familiar interface, always available. Switch any time in Settings → App design with no data impact.
- ⌘K command palette — fuzzy-matched navigation, entities, and actions, with recents on empty query
- Filter presets — Breakdown and Trends remember last-used filters and save named presets
- Copy to clipboard — right-click any key figure for Copy value / Copy row as CSV (off in stealth mode)
- Recently viewed list with dimmed deleted entries
- Sortable + resizable column headers on every grid, persisted across sessions
- Three-level breadcrumb and search that jumps directly into editors
- Text size setting scales the whole UI (Default → Largest)
Settings → App icon — choose from five icons. Switches the Dock + App Switcher icon live.
| Icon | Description |
|---|---|
| Classic (default) | Snapshot bars ascending on brand blue — Quiet Apps blue gradient (#3D93D8 → #0E4E8A) |
| Dusk | Ledger bars on warm dusk background |
| Quiet Finance | Primary wordmark icon |
| Vault | Concentric timeline arcs on dark ink (#222436 → #0B0D11) |
| Strata | Left-aligned allocation bars on cool slate (#23303F → #0D111A) |
All icons follow the Quiet Apps macOS icon standard: true n=5 superellipse (not rounded rect), 9% transparent safe-area ring on a 1024×1024 canvas so the Dock composites correct visual weight.
Full multi-currency: accounts in any of 31 currencies (USD, INR, EUR, GBP, JPY, …) with live rates via frankfurter.app (no API key required). Each snapshot freezes its own per-currency rate table — one "Fetch all" pulls every pair in a single request; locked snapshots are never rewritten.
Manual and automatic SQLite backups, optional restore on launch, quit-time backup hook, snapshot pre-caching for fast renders.
- macOS 26.0 or later
- Xcode 16.0 or later
git clone <repo-url>
cd QuietFinance
open QuietFinance.xcodeprojSigning — for local runs, use Sign to Run Locally or Team: None as appropriate.
Sandbox entitlements needed:
- User Selected File → Read/Write (CSV/PDF save panels, backups)
- Outgoing Connections (Client) (FX fetch)
Select the My Mac destination and press ⌘R.
On first launch with an empty store, SeedData inserts sample people, countries, asset types, accounts, and snapshots.
QuietFinance.xcodeproj/
QuietFinance/
├── App/ # App entry, model container, window commands, delegates
├── Models/ # SwiftData @Model types, enums, seed data
├── ViewModels/ # AppState (global UI prefs + navigation)
├── Views/ # Screens: Dashboard, Breakdown, Trends, Snapshots, …
└── Utils/ # FX, CSV, PDF, backups, formatters, theme, undo stash
- SwiftData on SQLite. Lightweight schema tweaks auto-migrate; no custom migration layer.
- @AppStorage for UI preferences; UserDefaults for category color overrides.
- Swift Charts for donut, line, area, and bar visuals.
- Local notifications for stale snapshot reminders (
ReminderScheduler). - Menu commands wire through
focusedSceneValue(AppCommands.swift,RootView).
Sandboxed installs store the SQLite file at:
~/Library/Containers/app.quiet.QuietFinance/Data/Library/Application Support/default.store
Use Settings → Backup to reveal the path, run a manual backup, or copy the .store (and -wal/-shm files if the app is running) to a safe location.
Core entities: Person, Country, AssetType, Account, Snapshot, AssetValue, Receivable, ReceivableValue, ExchangeRateHistory.
Asset categories: Cash, Investment, Retirement, Crypto, Insurance, Debt.
- CSV — Full history, accounts list, snapshot totals, receivable rows per snapshot (
CSVExporter) - PDF — Dashboard snapshot (
DashboardPDFExporter), snapshot-detail (SnapshotPDFExporter)
Settings live in UserDefaults (container-scoped). Reset everything with:
defaults delete app.quiet.QuietFinanceIf installed via Homebrew (recommended — handles app + quarantine cleanup):
brew uninstall --cask quietfinance
brew untap quietapps/quietfinanceManual removal:
rm -rf "/Applications/Quiet Finance.app"Remove all user data (settings, caches, container):
defaults delete app.quiet.QuietFinance 2>/dev/null
rm -rf ~/Library/Containers/app.quiet.QuietFinance \
~/Library/Preferences/app.quiet.QuietFinance.plist \
~/Library/Caches/app.quiet.QuietFinance \
~/Library/Saved\ Application\ State/app.quiet.QuietFinance.savedStateWarning: Deleting
~/Library/Containers/app.quiet.QuietFinanceremoves all your financial data, backups, and settings permanently. Export a CSV backup first from Settings → Export if you want to preserve your history.
- Scheme → Run → Build Configuration: Release.
- Product → Archive, then Distribute → Copy App.
Unsigned builds trigger Gatekeeper on other Macs. Recipient steps:
- Drag app to
/Applications. - Right-click → Open → confirm dialog.
- If still blocked: System Settings → Privacy & Security → Open Anyway.
- CLI fallback:
xattr -cr "/Applications/Quiet Finance.app".
Notarized distribution requires a paid Apple Developer account ($99/yr).
Does it sync to iCloud or any server? No. Everything stays in your Mac's sandbox container. FX rates are the only outbound network call, and only when you explicitly refresh them.
What happens if I lock a snapshot? Locked snapshots are immutable — FX fetches and manual edits are blocked for locked entries. Unlock first if you need to change values.
Save panels or export failing? Sandbox entitlement User Selected File → Read/Write must be enabled. Check Xcode → target → Signing & Capabilities.
FX rates never update? Sandbox entitlement Outgoing Connections (Client) must be enabled.
No reminder notifications? Open System Settings → Notifications and allow notifications for Quiet Finance.
Wrong data folder after changing bundle ID?
The container path is tied to the bundle identifier (app.quiet.QuietFinance). Changing it creates a new empty container. Export your data before changing it.
How do I back up my data?
Settings → Backup → Back Up Now. The app also backs up automatically on quit. You can copy the .store file directly for a manual snapshot.
Release notes are in CHANGELOG.md.
AGENTS.md summarizes agent workflow conventions for this repo. CLAUDE.md has deeper technical context. Cursor loads rules from .cursor/rules/.
Proprietary — all rights reserved. Use, redistribution, modification, derivative works, and repurposing are not permitted without written approval from the copyright holder. See LICENSE.