money

module
v0.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2026 License: Apache-2.0

README

money

money

A local-first, self-hostable personal finance backend for AI agents and power users.

CI Release License Go


What is money?

money pulls account and transaction data from user-configured financial providers, stores it in a user-owned encrypted SQLite database, and exposes stable CLI + JSON contracts for external agents, scripts, and cron jobs.

It does not embed AI chat, model providers, hosted billing, telemetry, or a required long-running server. Your data stays local. Your agent owns the reasoning.

Why

Existing personal finance tools either lock data behind a paid SaaS, embed opinionated AI advisors, or assume a full web-app product shape. money takes a different approach:

  • Local-first data ownership — your financial data lives in an encrypted file you control.
  • Agent-friendly contracts — stable JSON envelopes that any AI agent, script, or automation can parse.
  • Provider-neutral — Plaid, Bridge, CSV imports — providers are replaceable adapters.
  • No server required — runs as a CLI on your laptop, in cron, or in CI.

Getting Started

New to money? Read the full Getting Started guide for step-by-step setup and pricing details.

Quick Start

# macOS/Linux
curl -fsSL https://raw.githubusercontent.com/thedavidweng/money/main/install.sh | sh

money setup
money link
money sync
money accounts list --json
money transactions search "Costco" --json

The installer detects Homebrew automatically and uses the cask when available. Otherwise it downloads the release binary to ~/.local/bin.

Other installation methods

Windows PowerShell:

powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/thedavidweng/money/main/install.ps1 | iex"

The latest release must include a Windows archive for this installer to complete. If it does not, the script fails explicitly and points you to go install.

Homebrew Cask (macOS/Linux):

brew install --cask thedavidweng/tap/money

If you installed an older Homebrew formula release, migrate to the cask:

brew update
brew uninstall --formula thedavidweng/tap/money
brew install --cask thedavidweng/tap/money
money version

Go:

go install github.com/thedavidweng/money/cmd/money@latest

Manual download: grab the archive for your platform from the latest GitHub Release, extract it, and place the money binary on your PATH.

Try it without real credentials:

money demo accounts list --json
money demo transactions search "coffee" --json

Uninstall

# Homebrew Cask
brew uninstall --cask thedavidweng/tap/money

# install.sh
curl -fsSL https://raw.githubusercontent.com/thedavidweng/money/main/install.sh | sh -s uninstall

# Go
rm "$(go env GOPATH)/bin/money"

Your local ~/.money config, secrets, and database are not removed by uninstalling.

Architecture

cmd/money/             CLI entrypoint (Cobra)
internal/cli/          CLI commands and doctor diagnostics
internal/config/       Configuration loading and validation
internal/contracts/    JSON envelopes, schema versions, error codes
internal/core/         Finance primitives and domain types
internal/importsource/ CSV and Monarch Money importers
internal/linking/      Plaid Link helper functions
internal/plaidlogin/   Plaid Dashboard OAuth login flow
internal/prompt/       Interactive TUI prompts (via Charm huh)
internal/providers/    Provider adapters (Plaid, Bridge, …)
internal/store/        Encrypted SQLite store and migrations
internal/syncer/       Transaction sync orchestration

Read commands use local data only. Sync is the explicit boundary where outbound provider calls happen. See docs/ARCHITECTURE.md for the full design.

Design Principles

  • CLI-first — human output by default, --json for automation.
  • Stable contracts — versioned JSON envelopes with deterministic sorting and pagination.
  • Explicit failures — no hidden fallbacks, no silent downgrades.
  • BYOK providers — bring your own Plaid/Bridge credentials; no managed proxy or subscription.
  • Encrypted at rest — real financial data never touches plaintext SQLite.
  • Small deep modules — simple interfaces over pass-through wrappers.

Documentation

Document Purpose
docs/GETTING_STARTED.md Install, setup, and pricing guide
COMMANDS.md Command inventory and global flags
docs/PRD.md Product requirements
docs/ARCHITECTURE.md Module boundaries and data flow
docs/CONTRACTS.md Current CLI JSON contracts
docs/SCHEMA.md Database schema contract
docs/CONFIG.md Configuration loading rules
docs/ROADMAP.md Development phases
CHANGELOG.md Release history
SECURITY.md Vulnerability reporting policy

Website

Project docs and landing page: https://thedavidweng.github.io/site/money/

Acknowledgements

money draws inspiration from several excellent projects:

  • monarchmoney-cli — agent-friendly CLI contract design, JSON envelope patterns, and safety model.
  • Ray Finance — Plaid/Bridge sync architecture, local encrypted database patterns, and provider adapter design.
  • Actual Budget — local-first budgeting philosophy and automation API patterns.
  • Maybe Finance — personal finance domain modeling and product vocabulary.

Infrastructure

License

Apache 2.0

Directories

Path Synopsis
cmd
money command
internal
cli
core
Package core defines the domain types shared across store, CLI, and provider layers: accounts, transactions, categories, budgets, rules, and money formatting helpers.
Package core defines the domain types shared across store, CLI, and provider layers: accounts, transactions, categories, budgets, rules, and money formatting helpers.
paths
Package paths resolves the data directory for the money CLI.
Package paths resolves the data directory for the money CLI.
providers
Package providers defines the interface for financial data providers and ships a Plaid adapter.
Package providers defines the interface for financial data providers and ships a Plaid adapter.
store
Package store defines the persistence interface and provides an encrypted SQLite implementation for accounts, transactions, budgets, rules, and provider-linked data.
Package store defines the persistence interface and provides an encrypted SQLite implementation for accounts, transactions, budgets, rules, and provider-linked data.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL