Concrete
surface
Primitive

Bubble

Compact conversational message surface.

Bubbles are message atoms. Use them for transcript content and let higher-level message components own avatars, actions, and tool state.

Concrete keeps conversational UI crisp.
Ship the primitive set.
Playground

Props in the URL.

Controls update query params directly, so every primitive state can be linked, rendered, and screenshotted deterministically.

Loading playground.
States

Rendered matrix.

Every state maps to the same render route through the `state` query param.

Concrete keeps conversational UI crisp.
Ship the primitive set.
Default

Inbound assistant message.

/render state
Concrete keeps conversational UI crisp.
Ship the primitive set.
Outbound

Outbound user message.

/render state
Props

Public contract.

NameTypeDefaultDescription
direction'inbound' | 'outbound'inboundControls neutral or ink-filled message treatment.
childrenReactNode-Bubble content.