- The new www.rfc-editor.org design on Figma. As development continues this is the graphic design that we will be adhering to where possible.
This code repository is under the broader guidance from IETF CONTRIBUTING.md.
- Docker Desktop
- WSL2 (Windows only)
See /website/.
It's a Nuxt website (official Nuxt documentation).
Website content from markdown files can be found in /website/content/.
Markdown Frontmatter (metadata) fields supported are listed in content.config.js.
The 'last updated' footer on markdown pages is computed from Git log's commit time.
It is manually synced by a developer by running (from within website/) the command npm run generate:content-metadata.
This will update generated/content-metadata.json and that file should be committed.
A website deploy isn't involved in updating content. The website downloads markdown content precomputed into JSON, so the precomputer is mostly involved in deploying content changes. Once markdown changes are merged and pushed to GitHub the 'Precomputer Docker Image' must be rebuilt and then, in Tekton, run 'precompute-single' with any RFC to regenerate all website content.
In /website/ run npm run test. This runs unit tests, type checking, and linting. E2E tests must be run separately with npm run test:e2e.
The website depends on APIs in the form of:
- Search (via Typesense, managed outside of this repository)
- Precomputed API responses (managed in this repository, in
/precomputer/)
See /precomputer/.
We precompute the result of many APIs used by the website and upload them to an S3-like bucket.
This is done for performance reasons (some these APIs can take minutes to compute) and it improves resilience.
The /precomputer/ code is intentionally separate from the website/Nuxt. It has its own package.json etc.
The entry point for the precomputer is precomputer/src with the items single.ts, all.ts, multiple.ts, and cron.ts:
single.tscalculates a single RFC 'info' page API data and RFC-specific APIs such as/rfc/rfcN.json.all.tsdoes the same with ranges of RFCs.multiple.tshandles a comma-separated list of RFC numbers.multiple.ts --skip-indicesrebuilds only the per-RFC files.
cron.tshandles indices (all subseries, RFC indexes like on the homepage that list all RFCs, RSS/Atom feeds, etc.). As the namecron.tsimplies this script is run periodically.
Redirects live in sevearl places. They are listed here from highest to lowest server cost, so prefer the lowest-cost option that can do the job:
- Nuxt redirects: highest cost, so use sparingly. Best for trivial URL normalization (adding a trailing slash, fixing casing, removing leading zeros) where it's tidier to keep the redirect next to the code that defines the canonical URL.
- Cloudflare worker redirects: medium cost. These are in
/worker/and run as JavaScript at the edge, without Nuxt's overhead. This is the default place for most redirects. - Cloudflare redirect rules: This has the ability to configure complex regex rules.
- Cloudflare bulk redirects: lowest cost, but limited in what they can express.
In /precomputer/ run npm run test.
Stop the dev server, run npm run cleanup, and restart the dev server