A beautiful, accessible, and customizable timeline component built on top of shadcn/ui with React and Tailwind CSS.
The same as shadcn/ui, all components are free to use for personal and commercial.
Just copy and paste to your project and customize to your needs. The code is yours.
- 🎨 Customizable appearance with different sizes and colors
 - ♿️ Fully accessible with ARIA attributes
 - 🔄 Loading and error states
 - 🎭 Smooth animations with Framer Motion
 - 📱 Responsive design
 - 🎯 TypeScript support
 - 🌐 SSR Compatible
 - 📚 Full Storybook documentation and examples
 
# Clone the repository
git clone https://github.com/timDeHof/shadcn-timeline.git
# Install dependencies
npm install
# Run Storybook locally
npm run storybookimport { Timeline, TimelineItem } from '@/components/timeline';
import { Check } from 'lucide-react';
export default function Example() {
  return (
    <Timeline>
      <TimelineItem
        date={new Date('2024-01-01')}
        title="Feature Released"
        description="New timeline component is now available"
        icon={<Check />}
        status="completed"
      />
      <TimelineItem
        date={new Date('2024-01-02')}
        title="In Progress"
        description="Working on documentation"
        status="in-progress"
      />
      <TimelineItem
        date={new Date('2024-01-03')}
        title="Upcoming"
        description="Planning future updates"
        status="pending"
      />
    </Timeline>
  );
}| Prop | Type | Default | Description | 
|---|---|---|---|
| size | 'sm' | 'md' | 'lg' | 'md' | Size of the timeline | 
| iconsize | 'sm' | 'md' | 'lg' | 'md' | Size of icons | 
| Prop | Type | Default | Description | 
|---|---|---|---|
| date | Date | string | number | - | Date of the event | 
| title | string | - | Title of the event | 
| description | string | - | Description of the event | 
| icon | ReactNode | - | Custom icon | 
| iconColor | 'primary' | 'secondary' | 'muted' | 'accent' | 'primary' | Color theme of the icon | 
| status | 'completed' | 'in-progress' | 'pending' | 'completed' | Current status | 
| loading | boolean | false | Show loading state | 
| error | string | - | Show error state | 
| Prop | Type | Default | Description | 
|---|---|---|---|
| date | Date | string | number | - | Date to display | 
| format | string | Intl.DateTimeFormatOptions | - | Date formatting options | 
| className | string | - | Additional CSS classes | 
The component is fully SSR compatible and handles hydration properly. Date formatting is handled on the client side to prevent hydration mismatches.
To run Storybook locally:
npm run storybookThis will start Storybook on http://localhost:6006
Run the test suite:
# Run tests
npm run test
# Run Storybook tests
npm run test-storybook
# Run Storybook tests with coverage
npm run test-storybook:coverage- Open an issue if you believe you've encountered a bug.
 - Make a Pull request if you want to add a new feature/make quality of life improvements/ fix bugs.
 
MIT