apps/site/pages/en/blog/ and is organized into categories as subdirectories. Each post is a Markdown file with YAML frontmatter that controls how it is rendered.
Blog post frontmatter
Every blog post requires the following frontmatter fields:| Field | Description |
|---|---|
date | ISO 8601 timestamp (e.g. 2025-05-06T14:31:35.851Z) |
category | One of the category slugs listed below |
title | Title of the post |
layout | Must be blog-post |
author | Display name of the author or authors |
slug field can override the URL slug derived from the filename.
canonical field pointing to the original URL.
File location
Create new posts under the appropriate category subdirectory:apps/site/pages/en/blog/release/v24.0.0.md is served at /blog/release/v24.0.0.
Blog categories
release
Official version release posts. These are typically generated with the release post script rather than written by hand.
vulnerability
Security advisories and CVE disclosures. Published when a security fix is shipped.
announcements
Major project announcements: LTS schedule changes, new initiatives, organizational news.
feature
In-depth articles about new or existing features in Node.js.
Generating release posts
Release posts are generated automatically from changelog data, SHASUMs, and GitHub author information. Use thescripts:release-post command rather than writing them by hand.
Run the generator
vXX.X.X with the version to generate, for example v24.0.0.The script fetches data from:https://nodejs.org/dist/index.jsonfor release metadata- The Node.js changelog on GitHub for release notes
https://nodejs.org/dist/vX.Y.Z/SHASUMS256.txt.ascfor the checksum table
Review and edit the output
The script writes the file to
apps/site/pages/en/blog/release/vX.Y.Z.md. Open it and review the generated content before committing.The script requires internet access to fetch changelog and dist data. It will exit with an error if those resources are unavailable.
Writing vulnerability advisories
Security advisory posts go inapps/site/pages/en/blog/vulnerability/. Use category vulnerability in the frontmatter. The slug field is recommended so the URL is human-readable rather than derived from the filename:
Validation checklist
Before submitting a blog post PR:- Run
pnpm devand confirm the post renders at the correct URL - Run
pnpm formatto apply consistent formatting - Verify all internal links resolve correctly
- Confirm the
datefield is in ISO 8601 format - Confirm the
categorymatches one of the existing subdirectory names