Release Line
A release pipeline drawn as a transit map, from commit to live on a line that bends up for the middle stretch, with a dashed spur to rollback, where a train carrying the commit hash rides from stop to stop and pulls into live under a Shipped badge.
Installation
The source for release-line comes with a Cortexcn Pro license, along with every other chart and the website templates. Pick a license on the pricing page.
Already have a license? Open the code
Usage
import { ReleaseLine } from "@/components/release-line";<ReleaseLine
stations={[
{ name: "Commit", note: "0:00" },
{ name: "Build", note: "1:12" },
{ name: "Tests", note: "3:40" },
{ name: "Preview", note: "5:05" },
{ name: "Canary", note: "10% at 7:30" },
{ name: "Live", note: "9:02" },
]}
spur={{ from: 4, name: "Rollback", note: "One click" }}
releases={[{ id: "a3f9c2e", title: "Fix the invoice total" }]}
/>The route is drawn from the stops: the first third on the lower level, the middle third on the upper level, and the last third back down, joined by 45 degree bends. Use it on the page for a CI service, a deploy platform, or any product that moves work through stages.
Examples
App store release
A mobile release from merge to the store, with a spur to halt a phased rollout.
Static
With animated={false}, the release is drawn arrived at the last stop.
Behavior
- While the map is on screen, the train rides from stop to stop, easing away from each one and into the next, and waits briefly at each. The line fills in behind it, and every stop it reaches fills with a check.
- At the last stop the terminus bar lights up and the Shipped badge shows. After a hold, the next release in
releasessets off from the first stop. - The train turns to follow the line on the bends, and the stop it waits at pulses.
- With reduced motion enabled, the release is drawn arrived and nothing moves.
- The map is one SVG that scales to its container. It lays out at
minWidthor wider (600px by default); in a narrower container it scrolls sideways and takes keyboard focus. - Screen readers hear every stop with its note, and where the spur leads.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
stations | { name: string; note?: string }[] | Six sample stops | The stops from first to last |
spur | { from: number; name: string; note?: string } | null | A rollback spur | A dashed dead end below and left of a lower stop |
releases | { id: string; title: string }[] | Three sample releases | The releases that ride the line, one after another |
label | string | "Shipping" | The word before the release in the corner |
doneLabel | string | "Shipped" | The badge at the last stop |
accent | string | "var(--foreground)" | Color of the ridden line, passed stops, and train |
animated | boolean | true | Ride the releases while the map is on screen |
minWidth | number | 600 | Narrowest layout width in pixels; below it, scroll |
ariaLabel | string | "Release line" | Names the map for screen readers |
className | string | - | Extra classes on the frame |