The full log rather than the highlights. Removals are in here too, which is usually the part that matters most.
14 May
02 May
11 April
24 April
Nothing is ever quietly edited after publication. If a note turns out to be wrong we add a correction underneath it with the date.
A complete changelog grouped by month, each version on a hairline row beside its entries, every line tagged added, changed, fixed, or removed with its own tone.
A complete changelog grouped by month, each version on a hairline row beside its entries, every line tagged added, changed, fixed or removed with its own tone.
Free block
This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.
Radix flavor
npx shadcn add "https://ui.beste.co/r/changelog28"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/changelog28"This installs the block to components/beste/block/changelog28.tsx plus the badge23 component it uses for the eyebrow.
The installed file exports changelog28Demo alongside the block: the exact props behind the preview above. Spread it to get a working log in one line.
import { Changelog28, changelog28Demo } from "@/components/beste/block/changelog28";
export default function ReleaseNotesPage() {
return <Changelog28 {...changelog28Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Changelog28 } from "@/components/beste/block/changelog28";
export default function ReleaseNotesPage() {
return (
<Changelog28
badge={{ label: "Release notes" }}
heading="Everything that changed, line by line"
description="The full log rather than the highlights."
kindLabels={{ added: "Added", changed: "Changed", fixed: "Fixed", removed: "Removed" }}
months={[
{
label: "May 2026",
releases: [
{
version: "3.4.0",
date: "14 May",
href: "/changelog/3-4-0",
entries: [
{ kind: "added", text: "Shared waiting list across every site in a group" },
{ kind: "removed", text: "Per-site waiting list settings" },
],
},
],
},
]}
footnote="Nothing is ever quietly edited after publication."
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow above the hairline rule, rendered through Badge23 |
heading | string | – | Section heading in the left column of the header |
description | string | – | Supporting paragraph, right-aligned from md up |
kindLabels | Record<Kind, string> | – | The word shown on each entry chip |
months | Month[] | [] | Month groups, each holding its releases |
footnote | string | – | Correction policy under the log |
className | string | – | Extra classes for the outer section |
type Kind = "added" | "changed" | "fixed" | "removed";
type Entry = {
kind: Kind;
text: string;
};
type Release = {
version: string;
date: string;
entries: Entry[];
href: string;
};
type Month = {
label: string;
releases: Release[];
};kind drives the chip colour from the kindStyles table: accent for added, amber for changed, emerald for fixed, muted for removed. Adding a fifth kind means extending that table as well as the union.kindLabels falls back to the raw key when a label is missing, so an incomplete record degrades to "added" rather than rendering blank.tabular-nums so the left column stays aligned across different lengths.flex-wrap items-baseline, so a long line wraps under its chip rather than squeezing it.mb-10 with last:mb-0, and releases carry border-t, so rules appear between releases and above the first one in each month.changelog4
Month-grouped changelog board with aligned labels, release details, and optional links.
changelog7
Release notes with changes grouped by type — Added, Changed, Fixed — using color-coded category labels.
changelog33
A changelog grouped by month with a sticky index on the left: each month is a button that scrolls the page to its group, a short rule grows beside the current one, and the index follows as you scroll. Entries on the right show the day, a title and a plain dotted list of changes. Serif headline settles in word by word, one sliding-marker pill in the header.
changelog10
Compact single-line release rows with color-coded type dots, version tags, and a legend footer. Optimized for dense, scannable API changelogs.