Timeline
Timelines display a list of events in chronological order, showing the sequence and relationship between events over time.
9:00 Created
10:30 Reviewed
12:15 Approved
Usage
forge-timeline connects a series of forge-timeline-item children with a vertical line through their markers. Each item’s main content goes in its default slot, with start and end slots on either side, a marker slot for the indicator, and a detail slot below for extra context. Use forge-timeline-break between items to visually separate non-sequential groups. Reach for a plain list instead when order and time aren’t meaningful to the content.
Rules
Basic usage
Each forge-timeline-item shows a default circular marker, and its main content goes in the default slot.
A timeline of items connected by a vertical line through their markers.
<forge-timeline>
<forge-timeline-item>
Project kickoff meeting completed
</forge-timeline-item>
<forge-timeline-item>
Initial design mockups reviewed
</forge-timeline-item>
<forge-timeline-item>
API endpoints finalized
</forge-timeline-item>
<forge-timeline-item>
Code review session
</forge-timeline-item>
</forge-timeline>Icons
Slot a forge-icon into marker to replace an item’s default circular indicator. Treat the icon as decorative, since the item’s own content should carry the meaning.
Timeline items with an icon in the marker slot in place of the default marker.
<forge-timeline>
<forge-timeline-item>
<forge-icon slot="marker" name="check_circle">
</forge-icon>
<span>
Feature deployment completed successfully
</span>
</forge-timeline-item>
<forge-timeline-item>
<forge-icon slot="marker" name="schedule">
</forge-icon>
<span>
Scheduled maintenance at 3:00 PM
</span>
</forge-timeline-item>
<forge-timeline-item>
<forge-icon slot="marker" name="star">
</forge-icon>
<span>
Product launch
</span>
</forge-timeline-item>
</forge-timeline>
<script type="module">
import { IconRegistry } from "@tylertech/forge/icon";
import { tylIconSchedule } from "@tylertech/tyler-icons";
IconRegistry.define([tylIconSchedule]);
</script>Badges
Slot a forge-badge into marker for a short text label, and theme the item and badge together to reflect its status.
Timeline items with a badge in the marker slot, themed to match each item's status.
<forge-timeline>
<forge-timeline-item>
<forge-badge slot="marker">
New
</forge-badge>
<span>
Feature Added
</span>
</forge-timeline-item>
<forge-timeline-item theme="error">
<forge-badge slot="marker" theme="error">
Error
</forge-badge>
<span>
Build Failed
</span>
</forge-timeline-item>
<forge-timeline-item theme="success">
<forge-badge slot="marker" theme="success">
Done
</forge-badge>
<span>
Tests Passed
</span>
</forge-timeline-item>
</forge-timeline>Breaks
Add a forge-timeline-break between items to show a gap, separating non-sequential groups of events.
A break separating recent activity from earlier activity.
<forge-timeline>
<forge-timeline-item>
<span>
Recent Activity
</span>
</forge-timeline-item>
<forge-timeline-item>
<span>
Code Review
</span>
</forge-timeline-item>
<forge-timeline-break>
</forge-timeline-break>
<forge-timeline-item>
<span>
Previous Activity
</span>
</forge-timeline-item>
<forge-timeline-item>
<span>
Initial Commit
</span>
</forge-timeline-item>
</forge-timeline>Sidebar lines
An item’s sidebar defaults to auto, which draws its connecting line above and below its marker, automatically omitting whichever side doesn’t apply to the first or last item. Set sidebar to start, end, both, or none to control this manually — useful for implying items exist before or after what’s actually rendered.
Each sidebar value on a timeline item: auto, none, start, end, and both.
<forge-timeline>
<forge-timeline-item>
<span>
Auto sidebars
</span>
</forge-timeline-item>
<forge-timeline-item sidebar="none">
<span>
No sidebars
</span>
</forge-timeline-item>
<forge-timeline-item sidebar="start">
<span>
Start sidebar
</span>
</forge-timeline-item>
<forge-timeline-item sidebar="end">
<span>
End sidebar
</span>
</forge-timeline-item>
<forge-timeline-item sidebar="both">
<span>
Both sidebars
</span>
</forge-timeline-item>
</forge-timeline>Theme
Set theme on an item to color its default marker. Use the marker slot instead when the item needs an icon or badge.
Timeline items using each marker theme.
<forge-timeline>
<forge-timeline-item theme="primary">
<span>
Primary
</span>
</forge-timeline-item>
<forge-timeline-item theme="success">
<span>
Success
</span>
</forge-timeline-item>
<forge-timeline-item theme="warning">
<span>
Warning
</span>
</forge-timeline-item>
<forge-timeline-item theme="error">
<span>
Error
</span>
</forge-timeline-item>
<forge-timeline-item theme="info">
<span>
Info
</span>
</forge-timeline-item>
</forge-timeline>Detail
Put extra context for an item in its detail slot, below its main content. Wrap the detail in a forge-card when it needs visual grouping, like a summary with badges.
Timeline items with extra context in the detail slot, one of them in a card.
<forge-timeline>
<forge-timeline-item theme="success">
<forge-icon slot="marker" name="check_circle">
</forge-icon>
<strong>
Deployment Successful
</strong>
<forge-card slot="detail">
<div>
Version 2.0.0 has been successfully deployed to production. All services are running normally and health checks are passing.
</div>
<div class="mt-xsmall flex gap-xsmall">
<forge-badge>
Production
</forge-badge>
<forge-badge theme="success">
v2.0.0
</forge-badge>
</div>
</forge-card>
</forge-timeline-item>
<forge-timeline-item>
<forge-icon slot="marker" name="schedule">
</forge-icon>
<strong>
Maintenance Scheduled
</strong>
<div slot="detail">
Database migration scheduled for tonight at 2:00 AM EST. Expected downtime: 30 minutes.
</div>
</forge-timeline-item>
<forge-timeline-item>
<strong>
Code Review Completed
</strong>
<div slot="detail">
Pull request #456 has been reviewed and approved by 3 team members.
</div>
</forge-timeline-item>
</forge-timeline>
<script type="module">
import { IconRegistry } from "@tylertech/forge/icon";
import { tylIconSchedule } from "@tylertech/tyler-icons";
IconRegistry.define([tylIconSchedule]);
</script>Timestamps
Place a timestamp as a direct child of the timeline to show it as a date heading for the items below it. Inside an item, a timestamp renders inline with the content, and separator adds a dot between them. Put item timestamps in the start slot when they should line up across items.
Timestamps as date headings between items, and as times before, after, or inside an item's detail.
<forge-timeline>
<forge-timestamp datetime="2024-03-15">
</forge-timestamp>
<forge-timeline-item>
<span>
Timestamp after
</span>
<forge-timestamp datetime="2024-03-15T14:30:00" format="HH:mm" separator="start">
</forge-timestamp>
</forge-timeline-item>
<forge-timeline-item>
<forge-timestamp datetime="2024-03-15T12:15:00" format="HH:mm" separator="end">
</forge-timestamp>
<span>
Timestamp before
</span>
</forge-timeline-item>
<forge-timestamp datetime="2024-03-14">
</forge-timestamp>
<forge-timeline-item>
<span>
No timestamp separator
</span>
<forge-timestamp datetime="2024-03-14T16:45:00" format="HH:mm">
</forge-timestamp>
</forge-timeline-item>
<forge-timeline-item>
<span>
Timestamp in detail
</span>
<div slot="detail">
Posted at
<forge-timestamp datetime="2024-03-14T16:45:00" format="HH:mm">
</forge-timestamp>
</div>
</forge-timeline-item>
</forge-timeline>Timelines display a list of events in chronological order.
import "@tylertech/forge/timeline";| Name | Description |
|---|---|
(default) | The default slot for timeline items. |
| Name | Description |
|---|---|
::part(root) | The root element. |
| Name | Description |
|---|---|
--forge-timeline-gap | The spacing between timeline items. |
--forge-timeline-timestamp-margin | The block margin around slotted timestamps. |
Structure
A timeline is rendered as a semantic list — role="list" on the timeline itself, role="listitem" on each timeline item — so assistive technology announces it as a real list of events, not arbitrary markup.
Markers and breaks
Marker icons should be decorative, since the surrounding item content already provides the necessary context — don’t make a marker icon the only place meaning lives. A forge-timeline-break is purely visual and is marked aria-hidden="true" for that reason; it carries no content of its own to announce.
Color contrast
When using theme to color a marker, make sure that color still meets WCAG contrast requirements against its background.