Skip to main content

Architecture

The UI Kit provides a set of independent, composable React components that wire together into complete chat layouts. A typical two-panel layout uses four core components:
  • CometChatConversations — sidebar listing recent conversations
  • CometChatMessageHeader — toolbar showing avatar, name, status, and typing indicator
  • CometChatMessageList — scrollable message feed with reactions, receipts, and threads
  • CometChatMessageComposer — rich text input with attachments, mentions, and voice notes
Data flow: selecting a conversation yields a CometChat.User or CometChat.Group object. Pass that object as a prop (user or group) to the message components. They handle SDK calls internally — the composer sends messages, the list receives them via real-time listeners. All components must be rendered inside a <CometChatProvider> which initializes the SDK connection and provides shared context (theme, locale, events).

Flat API

Every feature component can be rendered in a single line. Pass props directly, the component handles its own layout internally.
This is the quickest way to get started. The component renders all its default sub-components (header, list, empty state, loading state, etc.) automatically.

Compound Composition

For full layout control, use the compound pattern. Each feature component is a namespace with sub-components:
Key principles:
  • Root initializes state, fetches data, and provides context to children.
  • Sub-components read from context and render when their state is active.
  • Omit a sub-component to hide it, no boolean props needed.
  • Add custom elements anywhere inside Root alongside the sub-components.
Both APIs produce the same result. The flat API is shorthand for rendering Root with all sub-components in their default order.

Component Categories

Components are organized into three categories:

Feature Components

Feature components integrate with the CometChat SDK for data fetching, real-time events, and state management. They follow the compound pattern and support both flat and compound APIs. Feature components:
  • Own their data lifecycle (fetch, paginate, refresh)
  • Subscribe to real-time SDK events (new messages, presence changes, typing indicators)
  • Manage complex state via hooks and reducers
  • Provide context to their sub-components

Base Components

Base components are pure UI building blocks with no SDK integration. They accept props and render UI — no network calls, no real-time events. Feature components compose these internally. Base components use a plain namespace object (compound sub-components) but don’t have the callable flat API shorthand. Examples: Avatar, Button, Date, ContextMenu, SearchBar, ConfirmDialog, Popover, MediaRecorder, MessageBubble, Reactions.

Bubble Components (Plugins)

Message bubble components (TextBubble, ImageBubble, FileBubble, AudioBubble, VideoBubble, StickerBubble, PollBubble, etc.) are part of the Plugin system. Each plugin handles a specific message type and provides the bubble component that renders it. Bubble components are documented in the Plugins section alongside their parent plugin. See Plugins Overview for how to customize message rendering.

Feature Components

All feature components are imported from @cometchat/chat-uikit-react.

Conversations and Lists

Messages

Calling

Search and AI


Base Components

Base components are imported from @cometchat/chat-uikit-react. They don’t have individual doc pages — use the source types and Storybook for reference.

Component API Pattern

All components share a consistent API surface for customization.

Actions (Callbacks)

Callback props fire on user interactions. Override them to customize behavior:

Filters (RequestBuilder)

List components accept RequestBuilder props to control which data loads:
Pass the builder instance — not the result of .build().

View Props

View props replace the visual content inside a component slot while keeping the default behavior wired:
For deeper control, use compound composition to replace entire slots including their behavior.

CSS Styling

Components use CSS custom properties (design tokens). Override them on the .cometchat root or on component-specific selectors:
Component class names follow BEM convention: .cometchat-component-name__element--modifier.

Next Steps

Theming

Customize colors, fonts, and spacing with CSS variables

Plugins

Customize message rendering with the plugin system

Event System

Subscribe to real-time events across components

Guides

Task-oriented tutorials for common patterns