Omar Mekky195 downloadsFull financial dashboard for hledger journals
Full financial dashboard for hledger journals, inside Obsidian.

| Tab | Description |
|---|---|
| Balance Sheet | Net worth, assets, liabilities KPIs + multi-month trend chart + summary/detail tables with price conversion |
| Activity | Income vs expenses KPIs, monthly trend chart, expense breakdown (doughnut + table, groups or atomic), income breakdown |
| Budget | Budget vs actual KPIs, bar chart, per-category table with remaining & % used, forecast projection into future months |
| Transactions | Searchable, sortable, paginated register with inflow/outflow/net KPIs, expense/income/liabilities doughnut charts, credit/debit filter |
| Transfers | Track movements between accounts (equity:transfer), monthly volume bar chart, history with direction filter (in/out) |
child_process / shell access)main.js, manifest.json, styles.css into your-vault/.obsidian/plugins/hledger-dashboard/.Install directly from Settings → Community plugins → Browse and search for "hledger Dashboard".
Use this if you want to try the latest unreleased changes between official releases. Requires the BRAT plugin.
cousine/hledger-dashboard via Add a beta plugin.Open hledger Dashboard).~ monthly) in your journalequity:transfer postings as transfer markers| Setting | Description |
|---|---|
| hledger binary path | Path to the hledger executable (default: hledger via PATH). Click Test to verify |
| Journal file | Path to your .journal file, relative to vault root. Click Browse to pick from vault files |
| Target currency | Default currency for converted totals (e.g. USD, EUR). Used for hledger -X |
| Known currencies | Comma-separated currency symbols treated as cash accounts (not stock) in the Balance Sheet (default: USD, $, EUR, GBP) |
| Uncategorized account | Account pattern for uncategorized transactions (e.g. equity:uncategorized) |
| Page size | Number of rows per page in tables |
| Default period | Default dashboard view on open (Month / Quarter / YTD) |
| Filter shortcuts | Named filter presets that appear as quick-select chips in the filter bar |
Toggle between Month, Quarter, and YTD views using the toolbar buttons. Use the dropdown to select a reference month. The year picker switches to an annual view.
-X queries and converted totalsP directives) in your journal. For Balance Sheet stock accounts, prices from the journal's price list are appliedDefine budget targets using hledger's periodic transaction syntax. These go directly in your journal:
~ monthly from 2024-01-01
(expenses:essentials:housing) $1,500.00
(expenses:essentials:groceries) $400.00
(expenses:leisure:dining) $350.00
The Budget tab runs hledger balance --budget to match actual transactions against these targets. See sample.journal for a complete example.
The Transfers tab identifies inter-account transfers by looking for equity:transfer postings. To mark a transfer:
2024-01-27 * Transfer to savings
assets:bank:savings $500.00
assets:bank:checking $-500.00
equity:transfer
An equity:transfer posting on a transaction marks all other postings as legs of a transfer. Both the source and destination accounts appear in the Transfers tab.
This plugin processes all data locally on your machine. It shells out to your hledger binary and reads your journal file directly. No data is sent over the network — there are zero HTTP requests.
Contributions welcome! main is a protected branch — all changes go through pull requests.
.nvmrc (nvm use)corepack enable pnpmgit clone https://github.com/cousine/hledger-dashboard.git
cd hledger-dashboard
nvm use
pnpm install
pnpm run dev # esbuild watch mode with inline sourcemaps → main.js
pnpm run build # production bundle → main.js
pnpm run lint # lint + format (auto-fix)
pnpm run lint:check # lint check (CI mode, no fixes)
pnpm run typecheck # TypeScript type checking
pnpm run version:check # verify package.json / manifest.json / versions.json are in sync
pnpm run test:run # unit tests
pnpm run test:coverage # unit tests + coverage report
RUN_INTEGRATION=1 pnpm run test:run # + smoke tests against real hledger binary
Integration tests use sample.journal and require hledger on PATH.
pnpm run lint auto-fixes, pnpm run lint:check verifies in CIstrict: true)The table of contents is auto-generated with doctoc. After adding or renaming sections, regenerate it:
pnpm run toc
CI runs pnpm run toc:check to verify the TOC is up to date — the check fails if it's stale.
To test changes live in Obsidian, symlink the repo into a vault's plugins folder:
ln -s /absolute/path/to/hledger-dashboard /absolute/path/to/vault/.obsidian/plugins/hledger-dashboard
With pnpm run dev watching, reload Obsidian (Cmd/Ctrl+R) after each rebuild to pick up changes.
main (feature/..., fix/..., docs/..., etc.)pnpm run lint:check && pnpm run typecheck && pnpm run version:check && pnpm run test:run passes locally before pushingmainThis project follows Conventional Commits:
| Type | Use for |
|---|---|
feat |
New features |
fix |
Bug fixes |
test |
Test additions or changes |
refactor |
Code restructuring (no behavior change) |
docs |
Documentation |
chore |
Tooling, deps, maintenance |
perf |
Performance improvements |
Example: feat: add CSV export to transactions tab
PR titles should follow the same format (used as the squash-merge commit message).
MIT — see LICENSE.