Timeline

Ordered sequence of events with status markers and a connector line

Category: display · WCAG 2.2-AA · timeline, steps, history, progress, events

Variants

States

Props

PropTypeDefaultDescription
items{ id: string; title: ReactNode; description?: ReactNode; time?: string; icon?: ReactNode; status?: "complete" | "current" | "upcoming"; tone?: "neutral" | "info" | "success" | "warning" | "danger" }[]The items to render.
orientation'vertical' | 'horizontal'verticalAxis the entries flow along: `vertical` stacks them down the page (the usual reading order), `horizontal` runs them across.

Design tokens

When to use

When not to use

How to build an accessible Timeline in React →

Examples

Vertical timeline with statuses

<Timeline
  items={[
    { id: '1', title: 'Order placed', time: '09:00', status: 'complete' },
    { id: '2', title: 'Shipped', time: '12:30', status: 'current' },
    { id: '3', title: 'Delivered', status: 'upcoming' },
  ]}
/>

Activity feed coloured by entry type

In a feed every entry is equally done, so `tone` — not `status` — is what separates them. Keep the meaning in the text too; colour alone is not perceivable.

<Timeline
  items={[
    { id: '1', title: 'p99 latency 4.2s', description: 'ALERT · monitor', time: '14:28', tone: 'danger' },
    { id: '2', title: 'Rolling back deploy 4821', description: 'NOTE · bo', time: '14:49', tone: 'neutral' },
    { id: '3', title: 'Status changed to monitoring', description: 'STATUS · ana', time: '15:12', tone: 'info' },
    { id: '4', title: 'Merged 2 edits from kim', description: 'MERGE · sync', time: '15:14', tone: 'success' },
  ]}
/>

Related components

← Back to docs