jcig789146 downloadsMulti-currency personal finance for Obsidian. Track spending, budgets, net worth, and loans — all in your vault. No accounts, no subscriptions.
Multi-currency personal finance tracker that lives entirely inside your Obsidian vault. No accounts, no cloud, no subscriptions.
Manual installation:
main.js, manifest.json, and styles.css from the latest release..obsidian/plugins/ledgr/.From the community store (pending review): search "Ledgr" in Settings → Community plugins → Browse.
All data is stored as plain files in your vault under a configurable folder (default: Private/Finance).
transactions/YYYY-MM.md) as human-readable tables with Dataview inline fieldsbudgets.jsonnetworth.json (accounts, brokerages, liabilities)goals.jsonremittances.json (if transfer tracker is enabled)No external services are contacted. No data ever leaves your device.
Open Settings → Ledgr or tap the gear icon on the dashboard.
| Setting | Description |
|---|---|
| Finance folder | Vault path where all Ledgr data is saved |
| Base currency | Your primary currency (JPY, USD, EUR, PHP, etc.) |
| Secondary currencies | Up to two additional currencies for display toggles |
| Exchange rates | Manual rates — update as needed; staleness indicator on dashboard |
| Enable transfer tracker | Opt-in module for international transfers |
| Append to daily note | Auto-append spending summary when opening a daily note |
Exchange rates use the format BASE_QUOTE — e.g. JPY_PHP means 1 JPY = X PHP.
Add liabilities (mortgage, car loan, credit card, personal loan, student loan, installment/BNPL) in the Net Worth tab. For each liability set:
When a payment is due, a banner appears on the dashboard with a Pay button. Tapping it opens a payment modal showing a live preview (Balance → Payment → Remaining), logs the payment against the account balance, and records it as a transaction in the correct expense category.
Enable in settings. Log any international transfer with:
Dashboard shows monthly/YTD totals alongside regular spending. Full history with month/year/all-time filter.
Transactions are written with Dataview inline fields so they can be queried directly.
TABLE amount, currency, category, subcategory
FROM "Private/Finance/transactions"
WHERE type = "expense"
SORT date DESC
TABLE sum(amount) as Total
FROM "Private/Finance/transactions"
WHERE category = "Food & Drink"
GROUP BY date
Fields per transaction: date, type, amount, currency, category, subcategory, note.
<financeFolder>/
transactions/
YYYY-MM.md # One file per month — readable table + Dataview fields
budgets.json # Category limits
networth.json # Accounts, brokerages, liabilities
goals.json # Savings goals
remittances.json # Transfer history (if enabled)
reviews/
YYYY-MM-review.md # Generated monthly review notes
YYYY-wrapped.md # Generated annual wrapped notes
Requirements: Node.js 18+, npm.
npm install
# Dev build with watch + auto-copy to vault
VAULT_PATH=/path/to/your/vault npm run dev
# Production build
VAULT_PATH=/path/to/your/vault npm run build
Create a .env file in the repo root with VAULT_PATH=/path/to/vault to avoid setting it every time.