Skip to content

Adding and editing transactions

The transaction dialog is the quick way to write a transaction without worrying about syntax, alignment or where in the file it goes.

To Do
Add a transaction ⌘N from anywhere (File ▸ New Transaction…), or the + button of the Journal.
Edit one Double-click it in the Journal, or right-click ▸ Edit….

The dialog handles transactions. Other directives — balance, note, open, price… — are written in the editor.

  • Date starts at today. Type it or use the stepper.
  • Status is Cleared (written with *) or Pending (written with !). Pending transactions stand out in orange in the Journal until you confirm them; they count in the numbers all the same, and the Status filter lists them or leaves them out. If you edit a transaction that uses another flag, that flag is kept and offered as a third option.

A new transaction starts with the cursor in Payee. As you type, the payees of your ledger are suggested.

Choosing a known payee fills in the rest — accounts, amounts, description, tags — from the last transaction with that payee. Most transactions repeat, so often the only thing left to do is fix the amount. This only happens while the form is untouched: it never overwrites what you already typed.

Each posting is a row: Account, Amount, Currency.

  • Account autocompletes from your open accounts. See Autocomplete for how little you need to type.
  • Amount. Type a number — or a calculation.
  • Currency is filled in with your operating currency as soon as you type an amount. Change it for other currencies; it autocompletes too.
  • Leave one amount empty and Beancount balances the transaction for you. An amount that was empty in the file stays empty when you edit the transaction.
  • Add Posting adds a row; the button at the end of a row removes it.

The {} button of a row opens an extra field for cost and price, for investments. It is free text, written exactly as you type it after the amount:

{100.00 EUR} @ 125.00 EUR

Right-click a posting row for two more options: Add Metadata to This Posting and Mark as Pending (!), which flags that single posting.

Type a tag and press Space, , or Return to turn it into a chip. Existing tags and links are suggested. Do not type the # or ^; they are added for you. Click a chip’s × to remove it.

Add Metadata adds a key: value row. Keys are suggested from the ones your ledger uses, and once a key is chosen, its known values are suggested too (vehicleGolf, Vespa).

Values you type are written as quoted text. When you edit a transaction whose metadata was written without quotes — a number, a date, TRUE — it is kept exactly as it was.

Suggestions match by substring and by words, so you rarely type a full name:

You type It finds
groc Expenses:Food:Groceries
ex ho Expenses:Home:Electricity, Expenses:Home:Rent
merc Mercadona

Names that start with what you typed come first.

The Amount field does sums. Type an expression and leave the field (or press Return to save): it is replaced by the result.

You type You get
100/2 50
12.50*3 37.50
40+2.95 42.95
(120-20)/3 33.33
  • + - * / and parentheses. Decimal comma or dot, both work.
  • The result is exact whenever possible. A division that does not come out exact is rounded to the precision of the currency.
  • Anything that is not arithmetic is left as you typed it.

Splitting a dinner bill in three, or adding the tip, without reaching for a calculator.

At the bottom, What will be written shows, live, the exact text that will go into your ledger and which file it will go to. If you are learning Beancount, it is also a good way to see the syntax of what you are filling in. Click its triangle to hide it.

If something is wrong — Beancount would not understand the entry — a warning with the reason appears at the bottom left and the save button is disabled until it is fixed.

Add Transaction / Save (Return) writes to the file; Cancel (Esc) discards. When editing, Open in Editor closes the dialog and takes you to the entry’s text instead.

Here is precisely what writing means:

  • Which file. The one that already holds transactions of that year. If none does, the one with the most recent transactions. So a ledger split in 2025.beancount, 2026.beancount keeps working as you expect.
  • Where in the file. In date order: after the last entry dated on or before the new one. If you edit a transaction and change its date, it moves to its new place; otherwise it is rewritten where it was.
  • How it looks. Amounts aligned at the column the file already uses, with one blank line on each side.
  • A safety check first. Before touching the file, the text is parsed by Beancount. If it is not valid syntax, nothing is written.
  • Then a commit. The same rules as saving in the editor: see Saving and committing.

Accounting problems — it does not balance, the account does not exist — are not syntax errors. The transaction is written, and the problem appears in Errors, which takes you to its line.

The dialog edits the text you wrote, not Beancount’s processed version of it. That matters: after processing, empty amounts are filled in, costs are resolved and plugins may have changed things, and writing that back would silently rewrite your entry. Open a transaction and save it without changes, and the file does not change.

For the same reason, some transactions are not opened in the dialog, because it could not write them back faithfully:

  • Transactions with comments inside them (the comments would be lost).
  • Transactions with blank lines in the middle, or an unusual first line.
  • Transactions generated by a pad directive or by a plugin: they are not text in your files.

In those cases the app tells you why — This Entry Opens in the Editor — and offers Open in Editor.