A release feed with a sticky version rail that filters the list, and hairline entries carrying a version and date line, tone-coded tags, an accent-bulleted highlight list, and an optional release note link.
Release feed with a sticky version rail on the left that filters the list to a single release, beside hairline entries carrying a version and date line, tone-coded tags, an accent-bulleted highlight list, and an optional link into the full note.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/changelog26?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/changelog26?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/changelog26.tsx plus the badge23 and button21 components it uses for the eyebrow, the tags, and the archive action.
The installed file exports changelog26Demo alongside the block: the exact props behind the preview above. Spread it to get a working release feed in one line.
import { Changelog26, changelog26Demo } from "@/components/beste/block/changelog26";
export default function ChangelogPage() {
return <Changelog26 {...changelog26Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Changelog26 } from "@/components/beste/block/changelog26";
export default function ChangelogPage() {
return (
<Changelog26
badge={{ label: "Changelog" }}
heading="What shipped, and what it changed"
allLabel="Everything"
items={[
{
version: "v4.2",
date: "April 12, 2026",
title: "Waitlists that fill their own gaps",
description: "A cancelled slot now reopens to the waitlist in order.",
tags: [{ label: "New", tone: "primary" }, { label: "Scheduling" }],
highlights: ["Per-service waitlist rules", "Notice by email or SMS"],
link: { label: "Read the release note", href: "/changelog/4-2" },
},
{
version: "v4.1",
date: "March 28, 2026",
title: "Claims reconcile against payments",
description: "Submitted claims match themselves to incoming payments.",
tags: [{ label: "Improved", tone: "foreground" }],
},
]}
footnote={{
label: "Older releases live in the full archive.",
button: { label: "Browse all releases", href: "/changelog/archive" },
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Monospace eyebrow above the hairline rule, rendered via Badge23 |
heading | string | – | Section heading in the left column |
description | string | – | Supporting paragraph, right-aligned from md up |
allLabel | string | – | Label of the rail entry that clears the version filter |
items | Release[] | [] | Releases, in the order they should read |
footnote | { label: string; button: ActionLink } | – | Closing line and outline button under the feed |
className | string | – | Extra classes for the outer <section> |
type ActionLink = { label: string; href: string };
type Tag = {
label: string;
tone?: "muted" | "foreground" | "primary";
};
type Release = {
version: string;
date: string;
title: string;
description: string;
tags?: Tag[];
highlights?: string[];
link?: ActionLink;
};version matches, so nothing is anchored and no scroll position is manipulated.version string, so two releases sharing a version string would both survive the filter. Keep the strings unique.<nav> with an <ul>, and every entry is a <button> carrying aria-pressed, so the current filter is announced rather than only coloured.md: the rail is a wrapping row of pills on mobile and becomes a sticky hairline column at lg (lg:sticky lg:top-24), which is why the pill borders are dropped in the desktop rail.Badge23 with the tone passed straight through, so primary reads as the accent for new work, foreground for changes, and the default muted for the quieter ones.changelog15
Stacked release cards with heading, description, change list, and version footer. Clean vertical feed for product updates.
changelog5
Timeline-style changelog with version badges, dates, and color-coded change types. Ideal for release notes and version history.
changelog3
Release feed cards with aligned change labels, summaries, and optional CTA buttons.
changelog12
Poster-style changelog with oversized version numbers as visual anchors, followed by date, heading, and description text.