A native macOS app for hledger plain-text accounting. Manage transactions, budgets, recurring rules, view summaries, track investments, and generate financial reports — all from a native SwiftUI interface.
Built with Swift and SwiftUI. Requires macOS 26+.
![]() |
![]() |
![]() |
| Transactions | New transaction | Income Statement |
![]() |
![]() |
|
| Income Statement chart | Accounts |
Download the latest release from the Releases page. The .dmg is signed and notarized.
- Summary dashboard — income/expenses/net with saving rate, configurable bar charts (dynamic/fixed), breakdowns, liabilities, investment portfolio
- Transaction management — list, create, edit, clone, delete with month navigation and smart search
- Budget tracking — define monthly budget rules, compare actual vs budget with usage colors and column headers
- Recurring transactions — manage periodic rules (daily, weekly, monthly, etc.) with batch generation
- Financial reports — Income Statement, Balance Sheet, Cash Flow with multi-period tables, chart overlay, and persistent defaults
- Account browser — flat and tree views with locale-formatted balances
- Investment tracking — portfolio positions, book values, and market prices via pricehist
- AI Assistant — on-device AI chat powered by Apple Intelligence with hledger tool calling (experimental)
- Smart search — hledger query syntax with suggestions (
desc:,acct:,amt:,tag:,status:) - Multi-commodity support — handles accounts with balances in multiple currencies
- Journal routing — auto-detects glob (
YYYY/*.journal), flat (YYYY-MM.journal), or single-file structure - Keyboard shortcuts — full keyboard navigation across all sections
- Export — CSV and PDF export for transactions, budgets, and reports
- Command Log — debug panel showing every hledger command executed
- Locale-aware formatting — amounts displayed with system locale
- Appearance — System, Light, or Dark mode
- i18n ready — String Catalog for future translations
- Swift / SwiftUI — native macOS UI
- SwiftUI Charts — financial report visualizations
- Apple Foundation Models — on-device AI with tool calling
- hledger — plain-text accounting CLI (must be installed separately)
- Xcode 26+ — build system
The journal file is resolved in this order:
- Path configured in Settings
LEDGER_FILEenvironment variable~/.hledger.journal
Accepts a file path or a directory containing journal files (auto-detects main.journal).
The examples/ directory contains sample journals in both EU and US conventions:
| Example | Format | Description |
|---|---|---|
hledger-simple/ |
EU (€1.234,56) |
Single-file journal with basic transactions, comments, balance assertions, multi-commodity |
hledger-simple-us/ |
US ($1,234.56) |
Same structure as hledger-simple/ but with $, US number format and CapitalCase accounts |
hledger-multi-file/ |
EU | Multi-file journal with glob routing and investments |
multicommodity.journal |
EU base | Multi-currency edge cases (€ + named-commodity ETFs) |
multicommodity-us.journal |
US base | Multi-currency edge cases ($ + AAPL/SPY) |
csv-import/ |
mixed | Sample CSV files and .rules for the CSV import wizard |
| Shortcut | Action |
|---|---|
| Cmd+1 — Cmd+6 | Switch section (Summary, Transactions, Recurring, Budget, Reports, Accounts) |
| Cmd+N | New item (transaction, budget rule, or recurring rule depending on section) |
| Cmd+E | Edit selected item |
| Cmd+D | Clone transaction |
| Cmd+Delete | Delete selected item |
| Cmd+T | Go to current month |
| Cmd+R | Reload data |
| Cmd+, | Settings |
| Cmd+/ | Keyboard shortcuts panel |
| Cmd+Shift+A | Toggle AI Assistant |
| Cmd+Option+L | Command Log |
| Tab | Select first item in list |
| Left/Right arrows | Navigate months |
See the Wiki for full documentation.
Backend/
AccountingBackend.swift Protocol: the contract for any backend
HledgerBackend.swift hledger CLI implementation
SubprocessRunner.swift Async Process wrapper
JournalWriter.swift Append/replace/delete with backup+validate
TransactionFormatter.swift Transaction → journal text
BudgetManager.swift Budget rules CRUD (budget.journal)
RecurringManager.swift Recurring rules CRUD (recurring.journal)
BinaryDetector.swift CLI binary detection
JournalFileResolver.swift Journal file resolution chain
Models/ Transaction, Posting, Amount, ChatMessage, etc.
Services/ AppState, AIAssistant, HledgerTools, PriceService
Config/ AppConfig, AmountFormatter, AmountParser, Theme
Views/
MainWindow/ ContentView, SidebarView, SummaryView
Transactions/ TransactionsView, TransactionFormView
Budget/ BudgetView, BudgetFormView
Recurring/ RecurringView, RecurringFormView
Reports/ ReportsView, ReportChartOverlay
Accounts/ AccountsView (flat + tree)
AI/ AIChatOverlay, AIChatBubble, AIToggleButton
Settings/ SettingsView (General, Paths, Investments, AI, About)
Onboarding/ OnboardingView
Shared/ BreakdownBar, BreakdownRow, PostingRowField, AutocompleteField, SummaryCard, etc.
The backend is abstracted behind the AccountingBackend protocol, making the architecture extensible.
git clone https://github.com/thesmokinator/hledger-macos.git
cd hledger-macos
open hledger-macos.xcodeprojBuild and run with Xcode (Cmd+R). Run tests with Cmd+U.





