Changelog

Changelog entries live under content/changelog/ as .mdx files. Every shipped theme renders a single /changelog page — dated entries, newest first — the moment an entry exists. Unlike blog posts, changelog entries don't get individual URLs; they're anchored sections on one page, which matches how most people actually read a changelog (scroll, not click through).

Frontmatter

---
title: v2.0 — Faster search, new API endpoints
date: 2026-02-10
version: "2.0"
tags: [release]
status: published
---
 
- **New:** full-text search now indexes API operations, not just guide pages.
- **New:** a `/webhooks` endpoint for subscribing to content updates.
- **Fixed:** the sidebar collapsed incorrectly on tablet widths.
FieldRequiredNotes
titleYesThe entry's headline.
dateRecommendedYYYY-MM-DD. Drives ordering (newest first).
versionNoA free-form version tag, rendered as a small badge next to the date.
tagsNoArray of strings.
statusNopublished (default), scheduled (hidden until date is reached), or anything else (treated as a draft — hidden).

Filename convention: prefix with the date for easy sorting on disk, e.g. 2026-02-10-v2-0.mdx — the filename itself doesn't need to match the slug or date field exactly, but keeping them aligned makes the content directory easy to scan.

The built-in route

Every theme ships app/changelog/page.tsx, calling the framework's loadChangelogEntries() directly (see Reference → Framework API). Same nav behavior as blog: the "Changelog" top-nav link only appears once at least one entry exists, and the page itself shows a "no entries yet" state if visited directly with none.

Customizing further

loadChangelogEntries() returns plain data — swap the shipped page's JSX for your own layout (grouped by month, a timeline view, whatever fits your product) without touching the loader itself.