[idea:26w34-rheo]rheo2026-08-23

Rheo

Alongside rookery development, I worked on an 0.6.0 release of Rheo. (I’ve also worked all day today on this. The release has been blocking the release of this weeknote, which I wrote at a cafe this morning.) Because it does seem that there are at least a few idle users of Rheo, I’m being a little bit more thoughtful about release cadence, even as it is also still 0.x software and thus not marketed as reliably stable.

The 0.6.0 release actually only removes features, rather than adding any. As I’ve recognised before, there are several aspects of Rheo, such as Atom feed generation in the HTML export, that can already be achieved with native Typst. 1 Rheo is designed as a harness around Typst, and thus in principle should only ever offer functionality that is not possible or otherwise difficult to achieve in native Typst. By this token, 0.6.0 strips Atom feed generation from the Rheo compiler and moves it to a custom Typst package. This refactor makes feed generation much more customizable, as configuration all takes place in Typst, rather than mixing and matching between Typst and rheo.toml.

There is one important aspect of feeds that cannot be achieved in native Typst, at least not without some downstream hackery. With bundle export, Typst can generate custom files such as feed.xml in the build folder easily enough, and introspect Typst state such as document titles in order to programmatically determine that file’s metadata. What it can’t achieve, however, is filling in the feed with the actual HTML content that Typst compilation generates, as this would require a ‘second-pass’ or double compilation.

Thus Rheo 0.6.0 introduces a notion of beacons, which are placeholders that Rheo can replace with compiled content such as the HTML output of a blog post in a cheap second pass after Typst compilation. Because Rheo treats each separate Typst file as a vertebra in a spine, a beacon can indicate that Rheo should replace it with the compiled content of a vertebra, therefore allowing the feeds package to generate a content-rich Atom or RSS feed.

Footnotes

  1. ^ I released the first version of Rheo before bundle export landed in 0.15.0, an experimental target that makes possible several of the motivating features for Rheo.