Skip to content

Repository files navigation

Quiet Finance

Quiet Finance

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.

macOS Swift SwiftUI License: Proprietary Release Downloads Stars

Install · Features · Build from source · Data & Exports · FAQ


Install

Homebrew (recommended)

brew tap quietapps/quietfinance
brew install --cask quietfinance

Update:

brew update && brew upgrade --cask quietfinance

Uninstall:

brew uninstall --cask quietfinance
brew untap quietapps/quietfinance

Quiet 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.

Manual

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".


Why

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.

Features

Dashboard

  • 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

Allocation & Trends

  • 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)

Snapshots

  • 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.

Reports

  • Period compare, QoQ heatmap (quarters × categories), CAGR & monthly drift, asset-type drilldown

Manage

  • 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

Import / Export

  • 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

Privacy & Security

  • 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

Design

  • 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.

Productivity

  • ⌘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)

App icon picker

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.

FX

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.

Data safety

Manual and automatic SQLite backups, optional restore on launch, quit-time backup hook, snapshot pre-caching for fast renders.


Build from source

Requirements

  • macOS 26.0 or later
  • Xcode 16.0 or later

Steps

git clone <repo-url>
cd QuietFinance
open QuietFinance.xcodeproj

Signing — 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.

Project layout

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

Stack

  • 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).

Data & Exports

Where data lives

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.

Data model

Core entities: Person, Country, AssetType, Account, Snapshot, AssetValue, Receivable, ReceivableValue, ExchangeRateHistory.

Asset categories: Cash, Investment, Retirement, Crypto, Insurance, Debt.

Export formats

  • CSV — Full history, accounts list, snapshot totals, receivable rows per snapshot (CSVExporter)
  • PDF — Dashboard snapshot (DashboardPDFExporter), snapshot-detail (SnapshotPDFExporter)

Configuration

Settings live in UserDefaults (container-scoped). Reset everything with:

defaults delete app.quiet.QuietFinance

Uninstalling

If installed via Homebrew (recommended — handles app + quarantine cleanup):

brew uninstall --cask quietfinance
brew untap quietapps/quietfinance

Manual 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.savedState

Warning: Deleting ~/Library/Containers/app.quiet.QuietFinance removes all your financial data, backups, and settings permanently. Export a CSV backup first from Settings → Export if you want to preserve your history.


Distributing a build

  1. Scheme → RunBuild Configuration: Release.
  2. Product → Archive, then Distribute → Copy App.

Unsigned builds trigger Gatekeeper on other Macs. Recipient steps:

  1. Drag app to /Applications.
  2. Right-click → Open → confirm dialog.
  3. If still blocked: System Settings → Privacy & Security → Open Anyway.
  4. CLI fallback: xattr -cr "/Applications/Quiet Finance.app".

Notarized distribution requires a paid Apple Developer account ($99/yr).


FAQ

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.


Changelog

Release notes are in CHANGELOG.md.

AI assistants

AGENTS.md summarizes agent workflow conventions for this repo. CLAUDE.md has deeper technical context. Cursor loads rules from .cursor/rules/.


License

Proprietary — all rights reserved. Use, redistribution, modification, derivative works, and repurposing are not permitted without written approval from the copyright holder. See LICENSE.


If Quiet Finance helps you understand your money, you're already ahead.

About

Native macOS app for tracking net worth via dated account snapshots. SwiftUI + SwiftData, 100% local — no cloud sync. Supports USD/INR conversion, balance history charts, receivables, CSV import/export, and automatic backups.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages