Heading fonts

Choose a Google Fonts family. The selected font loads from Google Fonts; Inter and Geist Serif are bundled locally.

Search Reflow

Keyboard shortcuts

Use these keys while you are not typing in a field.

Search⌘K
Cycle themeT
Cycle accentA
Cycle heading fontF
Cycle radiusR
Cycle sizeS
Cycle iconsI
Cycle hoverH
Toggle navigation[
Toggle properties]
Previous / next demo slide←→
Show shortcuts?
Skip to content
Open navigationClose navigation

Make them yours

Theme
SystemT
Accent
BlueA
Heading font
InterF
Radius
RoundedR
Size
DefaultS
Icons
LucideI
Hover
FluidH

Playground variant

ChatMessage

ChatMessage

A chat message with user or assistant alignment and optional attachments.

Installation

Import from the Reflow workspace package.

Conversation

Open demo
What does “good design” actually mean? Everyone says it, no one defines it.
Wednesday 6:06 PM
Good design is mostly invisible — you only notice it when it’s missing. It’s less about how something looks and more about how effortlessly it lets you do what you came to do.
So function over form?
Wednesday 6:07 PM
Not quite. Form is part of function — something that feels good to use is, in a real sense, working better. The split between the two is mostly a myth.
That reframes it completely.
Wednesday 6:08 PM

Roles

Right-aligned accent bubble.
Left-aligned, no background.

Attachments

  • avatar.svg
Can you use this as my new avatar?
Looks great — it’ll crop cleanly into the circle.

API Reference

Public props for the Reflow implementation. Native controls also accept their standard HTML attributes and Remix event mixes.

ChatMessage

PropTypeDefaultDescription
transitionIdstring—Matches a sent message to its originating queued message for a shared transition.
role*"user" | "assistant"—Position and treatment of the chat message.
childrenRemixNode—Content rendered inside the component.
attachmentsreadonly ChatAttachment[]—Files displayed before the message body.
labelstring—Accessible name of the message.
size"default" | "compact"—Control density or icon-button dimensions.
timestring—Timestamp displayed below a user message.
actionsRemixNode—Actions displayed beside the message or composer.
animatebooleantrueEnables entry animation.

ChatAttachment

PropTypeDefaultDescription
name*string—Visible filename of the attachment.
urlstring—URL opened when the attachment is activated.
detailstring—File type, size, or other secondary information.
typestring—Single or multiple expansion mode.
previewUrlstring—Image URL used for a visual attachment preview.