← notes

Rendering MediaWiki-format proposals as a static site

Jun 9, 2020

Render the Bitcoin Improvement Proposals as a browsable static site.

The README in the repo is the Ethereum EIPs README, left in place, which is a fair record of where the approach came from. The build is the work.

BIPs are not a tidy corpus. They are a mix of MediaWiki and markdown, and each carries a metadata preamble that is not YAML front matter, so nothing off the shelf parses it. Before a static site generator can render one page, something has to read that preamble and turn it into template variables.

_data/statuses.yaml holds the status vocabulary, which matters more than it sounds. Draft, Proposed, Active, Final, Replaced, Withdrawn are what readers filter and sort by, and if status is free text scraped from each document you get variants and typos and a filter that quietly misses proposals. A controlled list makes an unrecognised status a build error rather than an invisible omission.

_includes/biptable.html and bipnums.html generate the index, _layouts/bip.html renders each proposal, and assets referenced inside a proposal resolve relative to it, which needs handling because source and output trees are shaped differently.

bip_validator was the related project.