Marker

Displays an inline status, system note, bordered row, or labeled separator in a conversation.

buridan add marker

Component Guide

Use the following to build the Marker component.

from components.ui.marker import marker

Source Code & Dependencies

For manual installation, copy each of the source codes below in their respective locations.

components/core/core.py

components/ui/marker.py

Examples

Variants

Use variant to switch between an inline marker, bordered row, and labeled separator.

A default marker for inline notes.
A separator marker
A border marker for row boundaries.
Variant Description
default An inline marker for status, notes, and actions.
border A default marker with a bottom border under the row.
separator A centered label with divider lines on each side.

Status

Set role="status" and include a Spinner for streaming or in-progress markers so updates are announced.

Compacting conversation
Running tests

Shimmer

Add the shimmer utility class to marker.content for an animated streaming-text effect. The utility ships with the buridan package — see the shimmer docs for installation.

Thinking...
Reading 4 files

Separator

Use the separator variant for labeled dividers, such as dates or section breaks, in a conversation.

Today
Worked for 42s
Conversation compacted

Border

Use the border variant for status rows that should keep the default marker alignment while separating the next row.

Switched to release-candidate
Reviewed 8 related files
Opened implementation notes

With Icon

Use marker.icon to render an icon alongside the content. Use flex-col to stack the icon above the content.

Switched to a new branch
Explored 4 files
Syncing completed

Turn a marker into a link or button with.

Accessibility

marker.root is presentational by default. The correct semantics depend on how you use it, so choose the role based on intent rather than relying on a single default.

Status and Progress

For streaming or progress markers such as "Thinking..." or a running tool, set role="status" so assistive tech announces the update as it appears. marker.root forwards role to the underlying element.

marker.root(
    marker.icon(spinner()),
    marker.content("Compacting conversation"),
    role="status",
)

Labeled Separators

A separator that carries text, such as a date or a section label, needs no role. The divider lines are decorative CSS pseudo-elements, and the text is announced as ordinary content.

marker.root(
    marker.content("Today"),
    variant="separator",
)

Note: Do not add role="separator" to a labeled divider. A separator takes its accessible name from aria-label, not from its text, and its contents are treated as presentational, so the visible label would not be announced. Reserve role="separator" for a divider with no meaningful text.

Bordered Markers

A bordered marker keeps the same semantics as the default marker. The bottom border is decorative, so choose role="status" or no role based on the marker's purpose.

marker.root(
    marker.icon(rx.icon("file-text", size=14)),
    marker.content("Opened implementation notes"),
    variant="border",
)

Decorative Icons

marker.icon is decorative and hidden from assistive tech with aria-hidden, so the adjacent marker.content carries the meaning. For an icon-only marker, provide an aria_label so it is not announced as empty.

marker.root(
    marker.icon(rx.icon("check", size=14)),
    aria_label="Synced",
)

Interactive Markers

When a marker links or triggers an action, render it as an rx.link or pass on_click so it is focusable and exposes the correct role.

rx.link(
    marker.root(
        marker.icon(rx.icon("file-text", size=14)),
        marker.content("Explored 4 files"),
    ),
    href="/files",
)

API Reference

marker.root

The root marker element.

Prop Type Default Description
variant "default" \| "border" \| "separator" "default" The marker layout.
class_name str "" Additional classes to apply to the root element.
**props dict Any valid HTML attribute (role, aria_label).

marker.icon

A decorative icon slot. Hidden from assistive tech with aria-hidden.

Prop Type Default Description
class_name str "" Additional classes to apply to the icon slot.

marker.content

The marker text content.

Prop Type Default Description
class_name str "" Additional classes to apply to the content slot.
**props dict Any valid HTML attribute forwarded to the span.