v2026.08.6
Released 2026-08-28.
Features
Section titled “Features”- Lay a page out in columns. A page can now be divided into two to four columns, so the recipient can sit on the left and the issuer on the right — the arrangement most quotes and invoices actually use. There was no horizontal vocabulary before, so those layouts simply could not be expressed. Content inside a column is picked and edited straight from the page, and tables inside columns break across pages correctly.
- Declare how type looks, per role. Size, weight and line height are now declared alongside the typeface instead of living as constants in the renderer, so a role carries meaning and the template decides its appearance. Headings go four levels deep for contracts. Accents give you a way to make a total stand out that cannot collide with the role it is applied to — they move along a ladder of steps and weights rather than setting an absolute size, so the same emphasis reads at 11pt in body text and 14pt in a heading. Templates that declare nothing render exactly as before.
- Everything the format allows can now be written on screen. Twenty-one attributes were declarable in the format but had nowhere to edit them, which meant a definition a minion wrote was one you could not correct. The deepest three were options (tax categories are declared as choices carrying a rate, so Japanese quotes and invoices could not be assembled without them), aggregates (subtotals, tax and totals — a table built on screen could never have a total), and repeats (the only way to print a per-rate breakdown).
- Choose what a field is called on this page. The reserved namespace holds each field’s generic name, not the name you want printed here — whether it reads “Company” or “Your company” is the writer’s call, so a declared label now wins over the default. Templates that declare no label are unaffected.
- An unissued document can pull in a newer version of its template. A document freezes the definition it was created with, which is right once issued but was a dead end for drafts: fixing wording on the template left every draft made before it stranded on the old page. Pulling in happens only when you ask for it, never automatically — a document that was issued, sent, and returned to draft would otherwise have its page swapped out without its owner knowing. Before you press it, you are shown what will be lost: fields that disappear, statuses that go away, and a summary of the versions in between.
- Declare how wide an image should be. An image placed in the flow used to stretch to the full block width with no way to shrink it, so adding a logo moved the whole page. Width is declared as a share of the available width, the same vocabulary table columns and page columns already use. Height is deliberately not declarable — it follows the original aspect ratio, so a placed image is never distorted. Existing documents are untouched; only images newly placed from the toolbox start at 30%.
Improvements
Section titled “Improvements”- A template a minion writes now lands as a draft for you to publish. The documentation always said the minion writes and you check and publish, but the implementation was skipping the check and committing versions directly. If you had a draft open, a push would move the version without touching your draft, so the change you asked for was nowhere to be seen — and saving your draft afterwards silently rolled it back. Minions have a separate call for committing a version, and the editor gained a way to discard a draft.
- Column width handles are visible while a table is selected. They were transparent until you hovered over them, so there was no way to tell they could be grabbed.
- The preview updates when the page changes. Pulling in a template, issuing a document, and returning one to draft all change the page, but the preview was fetched by a URL that stayed the same and so kept showing the old render.
- The pre-publish scan for personal information looks inside structural blocks. Content nested in columns and repeats was being skipped.
- Table cells no longer run into each other. The padding on a row was
spacing the outside of the table rather than the gaps between cells, so a
right-aligned
120,000next to a left-aligned10%read as120,00010%. - A field inside a column highlights only that column. The line drawn between a field and its place on the page was registered against the parent row, and matching is by prefix, so touching the recipient on the left lit up the issuer on the right as well.
- Alignment now applies to images. It was being calculated and then never passed to the image, so it never reached the page.
- The hint under a role’s style fields is back. It names the role the style applies to, but the role was never passed to the message, so the raw key was shown instead of the sentence.
Includes @geekbeer/minion 5.7.4, Media Home 0.24.1, Video Studio 0.36.4.