Revising Rakudoc
Tags: raku, documentation, rakulang
Published: 2023-06-30 23:00:00

In the earliest days of Raku, Damian Conway specified a documentation markup language to accompany it. Since it was modeled on Perl's POD it was called **`<sound of trumpets and dramatic pause>`** POD6.

The [Specification of POD6 (S26)](https://design.raku.org/S26.html) was mostly incorporated without much extra explanation in the documentation suite. In this way, the description of POD6 was itself was an illustration of many of the features it documented, and some that it did not document.

Since Raku is defined by its test suite, and not its documentation, there were other details of POD6 in the tests that were not documented, even in S26. 

Raku developed and morphed, but POD6 remained. The tooling for rendering the documentation sources needed updating, and the documentation site had to be modernised.

# Upgrading the renderer

A project of mine was to upgrade the basic renderer that would transform POD6 to HTML, but allow for developers to customise the templates for each type of POD6 block type. (The first `Pod::To::HTML` renderer hard-coded representations of POD6 markup, eg. `B<this is bold>` was `<strong>this is bold</strong>` and could not be changed.) 

It turned out that S26 allowed for much more than had been included in the first documentation sources, including custom blocks and custom markup.

The project to upgrade the original HTML renderer morphed into [Raku::Pod::Render](https://github.com/finanalyst/raku-pod-render), and transforming a directory full of individual documentation sources into an interlinked and searchable set of documents required another layer of tooling [Collection](https://github.com/finanalyst/collection). For example, collecting together all the pages that can be grouped as tutorials, or reference, or language, and creating a separate page for them automatically. 

I covered these two projects in [a presentation to RakuCon 2022](https://www.youtube.com/watch?v=Rmuyb9kSQhY).

Some of the original ideas in S26 had not been implemented, such as aliases and generic numbering. Other ideas had become outdated, such as a way to specify document encoding, which is now solved with Unicode. 

In addition, RakuAST (see [RakuAST for early adopters](https://dev.to/lizmat/rakuast-for-early-adopters-576n) ) is on the horizon, which will radically change the speed of documentation processing.

There are also two implementations of POD6, one in Raku and one in Javascript, namely [Alexandr Zahatski's Podlite](https://github.com/podlite/podlite-desktop).

# Introducing Rakudoc

This was an ideal time to revisit POD6 and recast it into Rakudoc - new name for the markup language, and its new file extension ".rakudoc".

I was invited to the first Raku Core Summit and I put together a presentation about the changes I thought needed to be made based on my own experience, but also using comments from other developers.

We came to a number of consensus agreements about the minimal changes that were needed, and some extra functionality to handle new questions, such as documentation versioning.

It was also clear that Rakudoc (aka POD6) has two separate parts: components that interact closely with the program being documented, and components that will be rendered separately into HTML (or an ebook). The documentation file needs to make this clear. 

I have now written the first draft of the revision and the documentation file that encapsulates it. An HTML version can be found at [new-raku.finanalyst.org/language/rakudoc](https://new-raku.finanalyst.org/language/rakudoc), alongside the [old documentation file](https://new-raku.finanalyst.org/language/pod) and the [simple table implementation](https://new-raku.finanalyst.org/language/tables). I am planning future blogs to describe some of the proposed revisions.

However, none of the revisions will break existing POD6, so Rakudoc should be backwards compatible with POD6. The version at `new-raku` is a VERY early first draft, and it will go through several review stages.

The first Raku Core Summit was organised by [Elizabeth Mattijsen](https://mastodon.social/@lizmat) and hosted by Elizabeth and Wendy at their home. It was a really good meeting and I am sincerely grateful for their generosity and hospitality. The summit was also supported by [The Perl and Raku Foundation](https://www.perlfoundation.org/), [Rootprompt](https://rootprompt.at), and [Edument](https://www.edument.se).