Using it
The screen is worked the way hledger is: by a query. What you type in the bar at the top is written into the address, and the screen is drawn from the address — so what you press on screen is written back into that bar, and every screen has an address you can keep or send.
The keys are in the top right corner
The question mark at the right of the top bar lists every key that does something, and only those — the list and the keys are built from one table, so neither can have one the other lacks.
Ctrl+P (⌘P on a Mac) puts the cursor in the query, from anywhere. ⌘K (Ctrl+K off a Mac) writes an entry. ⌘J reads receipts and statements in. ⌘B shows or hides the sidebars. Esc closes the panel on the right.
Type a query, and the screen follows
The bar in the middle of the top is an hledger query, the same one you would hand to hledger on the command line: acct:food, desc:coffee, date:2026-02, or several of them together. It narrows whichever screen is open — the journal's entries, the trial balance, the balance sheet, the income statement — and it stays as you move between them, the way one query can be given to hledger's reg and bal alike.
As you type, it offers to finish the term under the cursor: hledger's own prefixes, and under each what your books hold — accounts after acct:, descriptions after desc:, payees, tags, commodities. The arrows move through them, Enter or Tab takes one, Esc puts them away.
Press on screen, and the query follows
It works the other way round as well. Choosing an account in the list beside the journal writes acct: and that account into the bar. Choosing a period beside the statements writes a date: term, and leaves the rest of the query as it was.
What the filters show is read back out of that query, as hledger reads it, not kept beside it. A date typed by hand — date:2026, date:lastmonth, two days — fills in the period's boxes, and the filter button stays filled in and marked while the query still narrows by date, even with the filters put away, because a statement that is not all of the books should not look like one that is.
Query → URL → View
That is the rule the screen is built to, in that direction only. The query is written into the address, and every view is drawn from the address and from nothing else. Nothing narrows a screen without being written there, so what you read in the bar is what you are looking at — and it is something hledger itself would understand.
It is not everywhere yet. It holds for what is on the screen now — the accounts beside the journal, the period beside the statements, the journal's pages, which statement is open and which ledger beside it — and whatever is added is added the same way. Which set of books is open is not in the address: books are kept in each browser under a name only that browser knows, which would mean nothing anywhere else.
Every screen has an address
Every move that changes the screen changes the address, so the browser's back and forward — a phone's back button — undo and redo it, and any screen can be bookmarked, reloaded, or sent. The address carries the page, the query, the journal's page of entries, and the parts of the page: which statement, which account's ledger is open beside it, what the panel on the right is holding.
So https://std.choai.dev/reports?q=date%3A2026-01-01..2027-01-01#balance-sheet/assets%3Abank+ledger is the balance sheet for 2026 with the bank's ledger open beside it. A link opens on the books open in whoever's browser it is, and holds nothing of yours but the query and the account names written into it.