Timeline Component
A visual timeline component built with semantic HTML and Tailwind CSS for presenting chronological events and process steps. Display history, milestones, and ordered content with vertical and horizontal layouts. Supports icons, dates, and connecting lines for engaging storytelling UIs.
Timeline components display a sequence of events, milestones, or narrative progression in chronological order. Built with semantic HTML, timelines help users understand historical progression and project phases. The Frutjam timeline system supports multiple directions, colors, and item styles—ideal for project history, release notes, and journey maps.
| Class | Type | Description |
|---|---|---|
| timeline | Base | Ordered list of chronological events |
| timeline-item | Modifier | Individual event row — place on each <li> |
| timeline-start | Modifier | Content placed before the timeline axis |
| timeline-middle | Modifier | Dot centered on the timeline axis |
| timeline-end | Modifier | Content placed after the timeline axis |
| timeline-horizontal | Modifier | Horizontal layout |
| timeline-vertical | Modifier | Vertical layout (default) |
| timeline-snap-start | Modifier | Hides the start column — dot aligns to the left edge |
| timeline-snap-end | Modifier | Hides the end column — dot aligns to the right edge |
| timeline-primary | Color | Primary color dot and connector — place on timeline-item |
| timeline-secondary | Color | Secondary color dot and connector — place on timeline-item |
| timeline-accent | Color | Accent color dot and connector — place on timeline-item |
| timeline-neutral | Color | Neutral color dot and connector — place on timeline-item |
| timeline-info | Color | Info color dot and connector — place on timeline-item |
| timeline-success | Color | Success color dot and connector — place on timeline-item |
| timeline-warning | Color | Warning color dot and connector — place on timeline-item |
| timeline-error | Color | Error color dot and connector — place on timeline-item |
Basic Usage
-
Jan 2024Project startedInitial commit pushed
-
Apr 2024Beta releasedOpen testing begins
-
Todayv2.0 launchedTailwind v4 rewrite
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <ul class="timeline timeline-vertical"> <li class="timeline-item"> <div class="timeline-start text-sm opacity-60">Jan 2024</div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Project started</div> <div class="text-sm opacity-60">Initial commit pushed</div> </div> </li> <li class="timeline-item"> <div class="timeline-start text-sm opacity-60">Apr 2024</div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Beta released</div> <div class="text-sm opacity-60">Open testing begins</div> </div> </li> <li class="timeline-item"> <div class="timeline-start text-sm opacity-60">Today</div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">v2.0 launched</div> <div class="text-sm opacity-60">Tailwind v4 rewrite</div> </div> </li> </ul> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <ul className="timeline timeline-vertical"> <li className="timeline-item"> <div className="timeline-start text-sm opacity-60">Jan 2024</div> <div className="timeline-middle"></div> <div className="timeline-end"> <div className="font-semibold">Project started</div> <div className="text-sm opacity-60">Initial commit pushed</div> </div> </li> <li className="timeline-item"> <div className="timeline-start text-sm opacity-60">Apr 2024</div> <div className="timeline-middle"></div> <div className="timeline-end"> <div className="font-semibold">Beta released</div> <div className="text-sm opacity-60">Open testing begins</div> </div> </li> <li className="timeline-item"> <div className="timeline-start text-sm opacity-60">Today</div> <div className="timeline-middle"></div> <div className="timeline-end"> <div className="font-semibold">v2.0 launched</div> <div className="text-sm opacity-60">Tailwind v4 rewrite</div> </div> </li> </ul> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <ul class="timeline timeline-vertical"> <li class="timeline-item"> <div class="timeline-start text-sm opacity-60">Jan 2024</div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Project started</div> <div class="text-sm opacity-60">Initial commit pushed</div> </div> </li> <li class="timeline-item"> <div class="timeline-start text-sm opacity-60">Apr 2024</div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Beta released</div> <div class="text-sm opacity-60">Open testing begins</div> </div> </li> <li class="timeline-item"> <div class="timeline-start text-sm opacity-60">Today</div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">v2.0 launched</div> <div class="text-sm opacity-60">Tailwind v4 rewrite</div> </div> </li> </ul> |
Timeline with Colors
Add a color modifier to each timeline-item to color its dot and the connector line trailing from it.
-
Step 1Primary
-
Step 2Secondary
-
Step 3Success
-
Step 4Warning
-
Step 5Error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <ul class="timeline timeline-vertical"> <li class="timeline-item timeline-primary"> <div class="timeline-start text-sm opacity-60">Step 1</div> <div class="timeline-middle"></div> <div class="timeline-end"><div class="font-semibold">Primary</div></div> </li> <li class="timeline-item timeline-secondary"> <div class="timeline-start text-sm opacity-60">Step 2</div> <div class="timeline-middle"></div> <div class="timeline-end"><div class="font-semibold">Secondary</div></div> </li> <li class="timeline-item timeline-success"> <div class="timeline-start text-sm opacity-60">Step 3</div> <div class="timeline-middle"></div> <div class="timeline-end"><div class="font-semibold">Success</div></div> </li> <li class="timeline-item timeline-warning"> <div class="timeline-start text-sm opacity-60">Step 4</div> <div class="timeline-middle"></div> <div class="timeline-end"><div class="font-semibold">Warning</div></div> </li> <li class="timeline-item timeline-error"> <div class="timeline-start text-sm opacity-60">Step 5</div> <div class="timeline-middle"></div> <div class="timeline-end"><div class="font-semibold">Error</div></div> </li> </ul> |
Alternating Sides
Alternate content between timeline-start and timeline-end on each item to create a zigzag layout.
-
Design phaseJan 2024
-
DevelopmentMar 2024
-
TestingMay 2024
-
LaunchJun 2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <ul class="timeline timeline-vertical"> <li class="timeline-item timeline-primary"> <div class="timeline-start"> <div class="font-semibold">Design phase</div> <div class="text-sm opacity-60">Jan 2024</div> </div> <div class="timeline-middle"></div> <div class="timeline-end"></div> </li> <li class="timeline-item timeline-secondary"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Development</div> <div class="text-sm opacity-60">Mar 2024</div> </div> </li> <li class="timeline-item timeline-accent"> <div class="timeline-start"> <div class="font-semibold">Testing</div> <div class="text-sm opacity-60">May 2024</div> </div> <div class="timeline-middle"></div> <div class="timeline-end"></div> </li> <li class="timeline-item timeline-success"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Launch</div> <div class="text-sm opacity-60">Jun 2024</div> </div> </li> </ul> |
Two-Toned Connectors
Each item's connector line inherits its color, creating seamless transitions between differently-colored steps.
-
PlannedBacklog item created
-
In ProgressDevelopment started
-
In ReviewAwaiting approval
-
DoneShipped to production
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <ul class="timeline timeline-vertical timeline-snap-start"> <li class="timeline-item timeline-info"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Planned</div> <div class="text-sm opacity-60">Backlog item created</div> </div> </li> <li class="timeline-item timeline-primary"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">In Progress</div> <div class="text-sm opacity-60">Development started</div> </div> </li> <li class="timeline-item timeline-warning"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">In Review</div> <div class="text-sm opacity-60">Awaiting approval</div> </div> </li> <li class="timeline-item timeline-success"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Done</div> <div class="text-sm opacity-60">Shipped to production</div> </div> </li> </ul> |
Start Side Only
Place content only in timeline-start with an empty timeline-end to push everything to the left of the axis.
-
Requirements gatheredJan 2024
-
Prototype builtFeb 2024
-
ShippedMar 2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <ul class="timeline timeline-vertical timeline-snap-end"> <li class="timeline-item timeline-primary"> <div class="timeline-start"> <div class="font-semibold">Requirements gathered</div> <div class="text-sm opacity-60">Jan 2024</div> </div> <div class="timeline-middle"></div> <div class="timeline-end"></div> </li> <li class="timeline-item timeline-secondary"> <div class="timeline-start"> <div class="font-semibold">Prototype built</div> <div class="text-sm opacity-60">Feb 2024</div> </div> <div class="timeline-middle"></div> <div class="timeline-end"></div> </li> <li class="timeline-item timeline-success"> <div class="timeline-start"> <div class="font-semibold">Shipped</div> <div class="text-sm opacity-60">Mar 2024</div> </div> <div class="timeline-middle"></div> <div class="timeline-end"></div> </li> </ul> |
End Side Only
Use timeline-snap-start to push the dot to the left edge with all content on the right.
-
Launched betaFebruary 2024
-
Public releaseApril 2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <ul class="timeline timeline-vertical timeline-snap-start"> <li class="timeline-item timeline-primary"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Launched beta</div> <div class="text-sm opacity-60">February 2024</div> </div> </li> <li class="timeline-item timeline-secondary"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Public release</div> <div class="text-sm opacity-60">April 2024</div> </div> </li> </ul> |
Rich Card Content
Wrap content in a border rounded-box p-3 block to give each timeline event a card-like appearance.
-
Jan 15, 2024Project Kickoff
Team assembled, goals defined, and roadmap approved by stakeholders.
-
Mar 1, 2024Alpha Released
Internal testing began with 12 pilot users across 3 departments.
-
Jun 10, 2024v1.0 General Availability
Public launch with full documentation, support, and SLA guarantees.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <ul class="timeline timeline-vertical timeline-snap-start"> <li class="timeline-item timeline-primary"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="border rounded-box p-3 mb-2"> <div class="text-xs opacity-60 mb-1">Jan 15, 2024</div> <div class="font-semibold">Project Kickoff</div> <p class="text-sm opacity-70 mt-1">Team assembled, goals defined, and roadmap approved by stakeholders.</p> </div> </div> </li> <li class="timeline-item timeline-secondary"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="border rounded-box p-3 mb-2"> <div class="text-xs opacity-60 mb-1">Mar 1, 2024</div> <div class="font-semibold">Alpha Released</div> <p class="text-sm opacity-70 mt-1">Internal testing began with 12 pilot users across 3 departments.</p> </div> </div> </li> <li class="timeline-item timeline-success"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="border rounded-box p-3 mb-2"> <div class="text-xs opacity-60 mb-1">Jun 10, 2024</div> <div class="font-semibold">v1.0 General Availability</div> <p class="text-sm opacity-70 mt-1">Public launch with full documentation, support, and SLA guarantees.</p> </div> </div> </li> </ul> |
Snap Start
Use timeline-snap-start on the list to hide the start column and align the dot to the left edge.
-
Launched betaFebruary 2024
-
Public releaseApril 2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <ul class="timeline timeline-vertical timeline-snap-start"> <li class="timeline-item timeline-primary"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Launched beta</div> <div class="text-sm opacity-60">February 2024</div> </div> </li> <li class="timeline-item timeline-secondary"> <div class="timeline-start"></div> <div class="timeline-middle"></div> <div class="timeline-end"> <div class="font-semibold">Public release</div> <div class="text-sm opacity-60">April 2024</div> </div> </li> </ul> |
Snap End
Use timeline-snap-end on the list to hide the end column and align the dot to the right edge.
-
Launched betaFebruary 2024
-
Public releaseApril 2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <ul class="timeline timeline-vertical timeline-snap-end"> <li class="timeline-item timeline-primary"> <div class="timeline-start"> <div class="font-semibold">Launched beta</div> <div class="text-sm opacity-60">February 2024</div> </div> <div class="timeline-middle"></div> <div class="timeline-end"></div> </li> <li class="timeline-item timeline-secondary"> <div class="timeline-start"> <div class="font-semibold">Public release</div> <div class="text-sm opacity-60">April 2024</div> </div> <div class="timeline-middle"></div> <div class="timeline-end"></div> </li> </ul> |