
I shipped Podlite 2.0 this week. The release is mostly about what a single block can carry, and the one I already reach for daily is =data-table: I point a block at a CSV or TSV file and it renders as a table — instead of laying the table out by hand and re-spacing every column each time a value changes.

The other seven additions follow the same idea. =set pre-configures attributes for the next block, so a long caption or a shared setting lives in one place. G<> and :masked keep content hidden until you choose to show it — useful for spoilers, exercise answers, or notes meant for one audience. =boundary is a typed section divider a tool can read, not just a line on the page. And =table now warns about malformed rows instead of quietly corrupting the output — a small thing that has bitten me before.
Underneath the feature list there is the thread I keep pulling on: a document should mean the same thing whether a person or an agent reads it. Each block in 2.0 is a contract — explicit type, named attributes — so the parser and the pod6.in editor can rely on it, and so can whatever agent opens the file next. That is the part I care about most.
Two things parse differently now: a few legacy string-attribute formats were removed, and =include is classified as a directive. Both are parser-side — a well-formed v1.0 document renders unchanged, so there is nothing to migrate in your own text.