# Channel

`Channel` is the main entry point for customization and hosts most of the contexts and logic used by the React Native SDK. [MessageList](/chat/docs/sdk/react-native/v8/ui-components/message-list/), [MessageInput](/chat/docs/sdk/react-native/v8/ui-components/message-input/), and [Thread](/chat/docs/sdk/react-native/v8/ui-components/thread/) require it.

## Best Practices

- Create and watch channels once, then reuse the instance across renders.
- Render `Channel` under `OverlayProvider` and `Chat` to ensure all contexts are available.
- Customize UI by replacing specific components instead of re-implementing core logic.
- Keep custom components lightweight to avoid performance regressions in lists.
- Use channel props for behavior changes before reaching for custom overrides.

## Basic Usage

`Channel` takes a StreamChat `channel` instance. Create one via [creating channels](/chat/docs/javascript/creating_channels/) or read it from [`ChannelList`](/chat/docs/sdk/react-native/v8/core-components/channel-list/) via the [`onSelect`](/chat/docs/sdk/react-native/v8/core-components/channel-list#required-onselect/) callback.

```tsx {7-17,22,25}
import { useEffect, useState } from "react";
import { StreamChat } from "stream-chat";
import {
  Channel,
  Chat,
  MessageInput,
  MessageList,
  OverlayProvider,
} from "stream-chat-react-native";

const client = StreamChat.getInstance("api_key");

export const App = () => {
  const [channel, setChannel] = useState();

  useEffect(() => {
    const createAndWatchChannel = async () => {
      const newChannel = client.channel("messaging", "channel_id");
      await newChannel.watch();
      setChannel(newChannel);
    };

    createAndWatchChannel();
  }, []);

  return (
    <OverlayProvider>
      <Chat client={client}>
        <Channel channel={channel}>
          <MessageList />
          <MessageInput />
        </Channel>
      </Chat>
    </OverlayProvider>
  );
};
```

## Context Providers

`Channel` provides `ChannelContext`, `KeyboardContext`, `MessageInputContext`, `MessagesContext`, `PaginatedMessageListContext`, `AttachmentPickerContext`, `MessageComposerContext`, `ThreadContext`, and `TypingContext` via their hooks.

| Context                       | Hook                             |
| ----------------------------- | -------------------------------- |
| `ChannelContext`              | `useChannelContext`              |
| `KeyboardContext`             | `useKeyboardContext`             |
| `MessageInputContext`         | `useMessageInputContext`         |
| `MessagesContext`             | `useMessagesContext`             |
| `PaginatedMessageListContext` | `usePaginatedMessageListContext` |
| `AttachmentPickerContext`     | `useAttachmentPickerContext`     |
| `MessageComposerContext`      | `useMessageComposerAPIContext`   |
| `ThreadContext`               | `useThreadContext`               |
| `TypingContext`               | `useTypingContext`               |

## UI Customizations

`Channel` is the entry point for most UI customization. Replace components via props and they will be used throughout the SDK where applicable.

Customizing the message avatar can be done easily by providing a custom component to the appropriate prop.

```tsx
import { Image } from "react-native";
import { Channel, useMessageContext } from "stream-chat-react-native";

const CustomAvatar = () => {
  const { message } = useMessageContext();

  return <Image source={{ uri: message.user?.image }} />;
};

<Channel MessageAvatar={CustomAvatar} />;
```

<tabs>

<tabs-item value="messages" label="Messages">

![](@chat-sdk/react-native/v8/_assets/ui-components/channel/visual_guide_1.png)

</tabs-item>

<tabs-item value="attachments" label="Attachments">

![](@chat-sdk/react-native/v8/_assets/ui-components/channel/visual_guide_2.png)

</tabs-item>

<tabs-item value='indicators'>

![](@chat-sdk/react-native/v8/_assets/ui-components/channel/visual_guide_3.png)

</tabs-item>

<tabs-item value='input'>

![](@chat-sdk/react-native/v8/_assets/ui-components/channel/visual_guide_4.png)

</tabs-item>

</tabs>

## Props

### channel

Channel instance from the Stream Chat client.

| Type                                                |
| --------------------------------------------------- |
| [Channel](/chat/docs/javascript/creating_channels/) |


### keyboardVerticalOffset

Distance from the top of the screen to the top of the `Channel` component (often your header height).

| Type   |
| ------ |
| number |

### additionalKeyboardAvoidingViewProps

Extra props passed to [KeyboardAvoidingView](https://reactnative.dev/docs/keyboardavoidingview#props).

| Type   |
| ------ |
| Object |

### additionalTextInputProps

Extra props passed to the underlying [TextInput](https://reactnative.dev/docs/textinput#props) in [`MessageInput`](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type   |
| ------ |
| object |


### additionalPressableProps

Extra props passed to the underlying [Pressable](https://reactnative.dev/docs/pressable#props) used in message components like [`MessageContent`](/chat/docs/sdk/react-native/v8/ui-components/message-content/).

| Type   |
| ------ |
| object |


### allowConcurrentAudioPlayback

Allow multiple audio players to play at once. Disabled by default. Available since v8.9.0.

| Type    |
| ------- |
| Boolean |

### allowThreadMessagesInChannel

Show the _Show thread message in channel_ button in thread `MessageInput`.

| Type    | Default |
| ------- | ------- |
| boolean | true    |

### asyncMessagesLockDistance

Pixels the user must drag upward to lock recording and lift their finger without stopping it.

| Type   | Default |
| ------ | ------- |
| Number | 50      |

### asyncMessagesMinimumPressDuration

Minimum press duration (ms) on the record button to start voice recording.

| Type   | Default |
| ------ | ------- |
| Number | 500     |

### asyncMessagesMultiSendEnabled

When enabled, recordings don’t send immediately. They stack in the composer so users can send multiple voice recordings in one message.

| Type    | Default |
| ------- | ------- |
| Boolean | true    |

### asyncMessagesSlideToCancelDistance

Pixels the user must drag toward the leading side to cancel voice recording.

| Type   | Default |
| ------ | ------- |
| Number | 100     |

### audioRecordingEnabled

Enable or disable audio recording.

| Type    | Default |
| ------- | ------- |
| Boolean | false   |

### attachmentPickerErrorText

Error text for [`AttachmentPickerError`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx).

| Type   | Default                                                                 |
| ------ | ----------------------------------------------------------------------- |
| String | "Please enable access to your photos and videos so you can share them." |

### attachmentPickerErrorButtonText

Button text in [`AttachmentPickerError`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx) that opens the app’s OS settings.

| Type   | Default                        |
| ------ | ------------------------------ |
| String | "Allow access to your Gallery" |

### attachmentPickerBottomSheetHeight

Height of the attachment picker bottom sheet when open.

| Type   | Default              |
| ------ | -------------------- |
| Number | 40% of Window Height |

### attachmentSelectionBarHeight

Height of the attachment selection bar in the attachment picker.

| Type   | Default |
| ------ | ------- |
| Number | 52      |

### attachmentPickerBottomSheetHandleHeight

Height of the attachment picker bottom sheet handle.

| Type   | Default |
| ------ | ------- |
| Number | 20      |

### bottomInset

Height of items located below the `MessageInput` when present. This inset determines the underlying shift to the `MessageList` when it is opened.

<admonition type="tip">

This can also be set via the `setBottomInset` function provided by the `useAttachmentPickerContext` hook.

</admonition>

| Type   | Default |
| ------ | ------- |
| Number | 0       |

### compressImageQuality

Image compression quality before upload.

<admonition type="note">

On iOS, values >= 0.8 usually keep quality while reducing size. A value of 0.8 can roughly halve file size vs 1.0.

</admonition>

| Type                              | Default              |
| --------------------------------- | -------------------- |
| number 0 to 1 (1 is best quality) | iOS: 0.8, Android: 1 |

### customMessageSwipeAction

Custom action executed when the user swipes a message.

| Type                                                                      | Default                               |
| ------------------------------------------------------------------------- | ------------------------------------- |
| `({channel, message}: {channel: Channel, message: LocalMessage}) => void` | The default action is swipe to reply. |

### deletedMessagesVisibilityType

Controls visibility of deleted messages in the channel.

- `always`: Visible to both sender and receiver.
- `never`: Visible to no one.
- `sender`: Visible only to the sender.
- `receiver`: Visible only to the receiver.

| Type                                          | Default |
| --------------------------------------------- | ------- |
| enum('always', 'never', 'receiver', 'sender') | 'both'  |

### disableKeyboardCompatibleView

Enable or disable the underlying [KeyboardAvoidingView](https://reactnative.dev/docs/keyboardavoidingview#enabled).

| Type    | Default |
| ------- | ------- |
| boolean | false   |

### disableTypingIndicator

Disable the typing indicator in `MessageList`.

| Type    | Default |
| ------- | ------- |
| boolean | false   |

### dismissKeyboardOnMessageTouch

Dismiss the keyboard when the user touches a message in the list.

| Type    | Default |
| ------- | ------- |
| boolean | false   |

### doFileUploadRequest

Override the file upload request when a user selects a file. Must return a `Promise`.

<admonition type="note">

Use this to store files in your own CDN.

</admonition>

| Type     |
| -------- |
| Function |

This matches the definition of `UploadRequestFn` from the `stream-chat` package.

```ts
export type UploadRequestFn = (
  fileLike: FileReference | FileLike,
) => Promise<MinimumUploadRequestResult>;
```

### doMarkReadRequest

Override the mark read request.

<admonition type="note">

This prop should only be used for advanced functionality in which you want to conditionally allow mark-read requests.

Do not use this function to disable read receipts.
If you would like to disable read-receipts, this can be done via _Read Events_ on the dashboard.

</admonition>

#### Example

```tsx
const doMarkReadRequest = (channel) => {
  if (/** Some custom logic here */) {
    channel.markRead();
  }
};
```

| Type     |
| -------- |
| Function |

| Parameter                                | Description      |
| ---------------------------------------- | ---------------- |
| `channel`                                | channel instance |
| `setChannelUnreadUiState` \| `undefined` | `(state) =>void` |

### doSendMessageRequest

Override the send message request.
This function must return a Promise equivalent to `client.sendMessage`.

<admonition type="note">

Use this only if you need to alter the message object before sending.

</admonition>

#### Example

```tsx
const doSendMessageRequest = (channelId, messageObject) => {
  if (/** Some custom logic here */) {
    messageObject.isSpecial = true;
  }
  return channel.sendMessage(messageObject);
}
```

| Type     |
| -------- |
| function |

| Parameter     | Description         |
| ------------- | ------------------- |
| channelId     | string              |
| messageObject | object              |
| options       | object \| undefined |

### doUpdateMessageRequest

Override the update message request.
This function must return a Promise equivalent to `client.updateMessage`.

<admonition type="note">

Use this only if you need to alter the message object before updating.

</admonition>

```tsx
const doUpdateMessageRequest = (channelId, messageObject) => {
  const numberOfUpdates = (messageObject.numberOfUpdates ?? 0) + 1;
  const messageToSend = { ...messageObject, numberOfUpdates };
  return client.updateMessage(messageToSend);
};
```

| Type     |
| -------- |
| function |

| Parameter     | Description         |
| ------------- | ------------------- |
| channelId     | string              |
| messageObject | object              |
| options       | object \| undefined |

### enableMessageGroupingByUser

**Note:** Available in SDK version >= [v3.9.0](https://github.com/GetStream/stream-chat-react-native/v8/releases).

If false, consecutive messages from the same user won’t be grouped.

| Type    | Default |
| ------- | ------- |
| boolean | true    |

### enableSwipeToReply

If true, users can swipe to reply to a message.

| Type    | Default |
| ------- | ------- |
| Boolean | `true`  |

### enforceUniqueReaction

Limits reactions to one per user. Selecting a new reaction replaces the previous one (similar to iMessage).

| Type    | Default |
| ------- | ------- |
| boolean | false   |

### forceAlignMessages

Forces all messages to align left or right. By default, received messages are left and sent messages are right.

| Type                       | Default |
| -------------------------- | ------- |
| 'left' \| 'right' \| false | false   |

### `formatDate`

Format function for dates in message status and deleted message components.

| Type     |
| -------- |
| function |

| Parameter | Description                                                                                                                                                    |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| date      | date to format provided as a string, [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), or number (Unix Timestamp) |

### getMessagesGroupStyles

Messages are grouped so UI elements like avatars only appear for the last message in a group. Messages are grouped when the same user sends them within a time window (controlled by `MaxTimeBetweenGroupedMessages` on `Channel`). Use `getMessagesGroupStyles` to override group position logic (`top`, `bottom`, `middle`, `single`), which affects UI like timestamps and avatars.

Default logic lives in [`getGroupStyles`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageList/utils/getGroupStyles.ts). Access the computed styles via `MessageContext.groupStyles` in custom components.

| Type     |
| -------- |
| function |

### globalUnreadCountLimit

Maximum number of unread messages to show as a count on a channel before adding a `+`.
The max allowable is 255, which when reached displays as `255+`.

| Type   | Default |
| ------ | ------- |
| number | 255     |

### giphyVersion

Giphy image version to render. See the [Image Object](https://developers.giphy.com/docs/api/schema#image-object) keys for options.

| Type   | Default        |
| ------ | -------------- |
| string | 'fixed_height' |

### `handleAttachButtonPress`

Customize behavior when the [AttachButton](/chat/docs/sdk/react-native/v8/ui-components/attach-button/) is pressed in the message input.

| Type         |
| ------------ |
| `() => void` |

### `handleBan`

Called when the _Ban User_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `handleCopy`

Called when the _Copy Message_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `handleDelete`

Called when the _Delete Message_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `handleDeleteForMe`

Called when the _Delete Message for me_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `handleEdit`

Called when the _Edit Message_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `handleFlag`

Called when the _Flag Message_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `handleMarkUnread`

Called when the _Mark Unread_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `handleMute`

Called when the _Mute User_ action is triggered from the message actions list. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### handlePinMessage

Called when the _Pin to Conversation_ or _Unpin from Conversation_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### handleReaction

Called when a reaction is selected in the message menu (add or remove). It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| Function |

| Parameter      | Description                              |
| -------------- | ---------------------------------------- |
| `message`      | Message the action is called on.         |
| `reactionType` | String designating the type of reaction. |

### handleQuotedReply

Called when the _Reply_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `handleRetry`

Called when the _Retry_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### handleThreadReply

Called when the _Thread Reply_ action is triggered. It does not override default behavior. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type     |
| -------- |
| function |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### `hasCameraPicker`

Enable the camera picker in [`MessageInput`](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type    | Default |
| ------- | ------- |
| Boolean | `true`  |

### `hasCommands`

Enable commands in [`MessageInput`](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type    | Default |
| ------- | ------- |
| boolean | true    |

### hasFilePicker

Enable the file picker in [`MessageInput`](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type    | Default |
| ------- | ------- |
| Boolean | `true`  |

### hasImagePicker

Enable the image picker in [`MessageInput`](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type    | Default |
| ------- | ------- |
| Boolean | `true`  |

### hideDateSeparators

Hide inline date separators in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/).

| Type    | Default |
| ------- | ------- |
| boolean | false   |

### hideStickyDateHeader

**Note:** Available in SDK version >= [v3.9.0](https://github.com/GetStream/stream-chat-react-native/v8/releases).

Hide the sticky date header in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/).

| Type    | Default |
| ------- | ------- |
| boolean | false   |

### initialScrollToFirstUnreadMessage

Load the channel starting at the first unread message.

| Type    | Default |
| ------- | ------- |
| boolean | false   |

### isAttachmentEqual

Returns true if rendering `nextAttachment` would produce the same result as `prevAttachment`, otherwise false.

| Type     |
| -------- |
| function |

| Parameter      | Description                                |
| -------------- | ------------------------------------------ |
| prevAttachment | previous message attachment to be compared |
| nextAttachment | next message attachment to be compared     |

### `keyboardBehavior`

Behavior for the keyboard passed to the underlying [KeyboardAvoidingView](https://reactnative.dev/docs/keyboardavoidingview#behavior).

| Type                                |
| ----------------------------------- |
| 'height' \| 'position' \| 'padding' |

### legacyImageViewerSwipeBehaviour

**Note:** Available in SDK version >= [v3.9.0](https://github.com/GetStream/stream-chat-react-native/v8/releases).

Enable/disable legacy image viewer behavior.

When true, the image viewer lets you swipe through all loaded images in the channel. This adds JS thread work to track and pre-populate images for smooth transitions.

| Type    | Default |
| ------- | ------- |
| boolean | false   |

### `loadingMore`

Override the `loadingMore` value supplied by the channel query logic.

| Type    |
| ------- |
| Boolean |

### `loadingMoreRecent`

Override the `loadingMoreRecent` value supplied by the channel query logic.

| Type    |
| ------- |
| Boolean |

### markdownRules

Rules for [simple-markdown](https://github.com/Khan/simple-markdown#adding-a-simple-extension).

| Type   |
| ------ |
| object |

### `markReadOnMount`

Enable/disable marking the channel as read when `Channel` mounts.

| Type    |
| ------- |
| Boolean |

### maxMessageLength

Maximum message length. The default comes from the [channel config](/chat/docs/javascript/channel_features/).

| Type   |
| ------ |
| number |

### maxTimeBetweenGroupedMessages

Maximum time (ms) between consecutive messages from the same user to keep them grouped.

| Type   | Default  |
| ------ | -------- |
| number | infinite |

### `messageId`

Load the channel at a specified message instead of the most recent message.

| Type   |
| ------ |
| string |

### `messageActions`

An array of actions, or a function returning an array, shown in the message menu. See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type              | Default                                                                                                                                     |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Array \| Function | [messageActions](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Message/utils/messageActions.ts) |

| Parameter    | Description                                                         |
| ------------ | ------------------------------------------------------------------- |
| `actionInfo` | An object containing the original actions and relevant message data |

### messageContentOrder

Order for rendering message content.

| Type  | Default                                                     |
| ----- | ----------------------------------------------------------- |
| array | ['quoted_reply', 'gallery', 'files', 'text', 'attachments'] |

### messageSwipeToReplyHitSlop

Defines the `hitSlop` area for the message swipe-to-reply gesture.

| Type                                                                 | Default                                   |
| -------------------------------------------------------------------- | ----------------------------------------- |
| Object`{ top: number, left: number, bottom: number, right: number }` | `{left: screenWidth, right: screenWidth}` |

### `messageTextNumberOfLines`

Number of lines for message text in the Message Overlay.

| Type   | Default |
| ------ | ------- |
| number | 5       |

### myMessageTheme

[Theme](/chat/docs/sdk/react-native/v8/customization/theming/) applied to the current user’s messages.

| Type   |
| ------ |
| object |

<admonition type="warning">

Memoize this object or pass a stable reference.

</admonition>


### newMessageStateUpdateThrottleInterval

**Note:** Available in SDK version >= [v3.9.0](https://github.com/GetStream/stream-chat-react-native/v8/releases).

Throttle interval (ms) for channel state updates when new messages arrive. Default is 500 ms. For high concurrency, increase (for example 1000 ms) to reduce JS thread load.

| Type   | Default |
| ------ | ------- |
| number | 500     |

### numberOfLines

Maximum number of lines the underlying [`TextInput`](https://reactnative.dev/docs/textinput) in [`MessageInput`](/chat/docs/sdk/react-native/v8/ui-components/message-input/) can expand to.

| Type   | Default |
| ------ | ------- |
| number | 5       |

### numberOfAttachmentImagesToLoadPerCall

Number of images loaded per `CameraRoll.getPhotos` call.

| Type   | Default |
| ------ | ------- |
| Number | 60      |

### numberOfAttachmentPickerImageColumns

Number of columns in the image picker.

| Type   | Default |
| ------ | ------- |
| Number | 3       |

### onLongPressMessage

Called when a user long-presses a message. The default opens the message menu.

| Type     |
| -------- |
| function |

| Parameter | Description                   |
| --------- | ----------------------------- |
| payload   | `{ actionHandlers, message }` |

### onPressMessage

Called when a user presses a message.

<admonition type="warning">

The default handler behaves differently for reactions and attachments. Handle those cases if you override it.

</admonition>

| Type     |
| -------- |
| function |

| Parameter | Description                                   |
| --------- | --------------------------------------------- |
| payload   | `{ additionalInfo, actionHandlers, message }` |

`additionalInfo` provides extra data for certain emitters (for example, user details for `textMention`).

For example:

```tsx
    <Channel
      onPressMessage={({ additionalInfo, defaultHandler, emitter }) => {

          if (emitter === 'textMention') {
            console.log(additionalInfo?.user);
            return;
          }

          if (emitter === 'card' || emitter === 'textLink') {
            console.log(additionalInfo?.url);
            return;
          }

          if (emitter === 'fileAttachment') {
            console.log(additionalInfo?.attachment);
            return;
          }

          defaultHandler?.();
      }}
    >
```

<admonition type="note">

`additionalInfo` may change as we add more emitter use cases.

</admonition>

### onPressInMessage

Called on touch start, before [`onPressMessage`](#onpressmessage).

| Type     |
| -------- |
| function |

| Parameter | Description                   |
| --------- | ----------------------------- |
| payload   | `{ actionHandlers, message }` |

### overrideOwnCapabilities

Override the current user’s capabilities (normally derived from permissions, channel type, and channel settings). These capabilities enable or disable UI features. See:

/chat/docs/javascript/chat_permission_policies/

Example:

```tsx
<Channel
  overrideOwnCapabilities={{
    uploadFile: false,
    sendLinks: false
  }}
```

Available keys:

- `banChannelMembers` When false, "Block User" is hidden in the message menu.
- `deleteAnyMessage` When false, "Delete Message" is hidden for received messages.
- `deleteOwnMessage` When false, "Delete Message" is hidden for own messages.
- `flagMessage` When false, "Flag Message" is hidden.
- `pinMessage` When false, "Pin Message" is hidden.
- `quoteMessage` When false, "Reply" is hidden.
- `readEvents` When false, read receipts aren’t rendered.
- `sendLinks` When false, users can’t send URLs.
- `sendMessage` When false, `SendMessageDisallowedIndicator` replaces the input.
- `sendReaction` When false, the reaction selector is hidden.
- `sendReply` When false, "Thread Reply" is hidden.
- `sendTypingEvents` When false, typing events aren’t sent.
- `updateAnyMessage` When false, "Edit Message" is hidden for received messages.
- `updateOwnMessage` When false, "Edit Message" is hidden for own messages.
- `uploadFile` When false, `AttachButton` is hidden in `MessageInput`.

| Type   |
| ------ |
| object |

### reactionListPosition

Position of the reaction list in the message component. Default is above the message content.

| Type              | Default value |
| ----------------- | ------------- |
| `top` \| `bottom` | 'top'         |

### selectReaction

Full override of the message reaction handler. It must return a function that accepts `reactionType` (string). See [customize message actions](/chat/docs/sdk/react-native/v8/guides/customize-message-actions/).

| Type             |
| ---------------- |
| function \| null |

| Parameter | Description                     |
| --------- | ------------------------------- |
| message   | message the action is called on |

### setInputRef

Callback function to set the [ref](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) on the underlying `TextInput` in [`MessageInput`](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type     |
| -------- |
| function |

| Parameter | Description          |
| --------- | -------------------- |
| ref       | ref of the TextInput |

### `shouldShowUnreadUnderlay`

Enable/disable the unread underlay background in the message list.

| Type                   | Default |
| ---------------------- | ------- |
| `boolean`\|`undefined` | `true`  |

### stateUpdateThrottleInterval

**Note:** Available in SDK version >= [v3.9.0](https://github.com/GetStream/stream-chat-react-native/v8/releases).

Throttle interval (ms) for channel state updates (excluding new messages). Default is 500 ms. For high concurrency, increase (for example 1000 ms) to reduce JS thread load.

| Type   | Default |
| ------ | ------- |
| number | 500     |

### supportedReactions

List of reactions users can add to messages. See [customizing reactions](/chat/docs/sdk/react-native/v8/guides/message-customization#message-with-custom-reactions/).

| Type  | Default                                                                                                                                                                |
| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Array | [reactionData](https://github.com/GetStream/stream-chat-react-native/v8/blob/182f1047a1417da64047a12f9a6cfaf1252cfbd8/package/src/components/Channel/Channel.tsx#L129) |


### `thread`

Can be a `LocalMessage` or [`ThreadType`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/contexts/threadContext/ThreadContext.tsx). Setting it indicates a thread is open. Both types are interchangeable.

With [`Thread`](/chat/docs/sdk/react-native/v8/ui-components/thread/), this displays the thread. With the standard [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/), it keeps singleton components in [`OverlayProvider`](/chat/docs/sdk/react-native/v8/core-components/overlay-provider/) in sync.

<admonition type="note">

Set `thread` on all `Channel` components when a thread is open.

</admonition>

| Type   |
| ------ |
| object |


### `threadList`

Indicates the `Channel` is rendering a thread. Used to avoid concurrency issues between the main channel and thread.

| Type    |
| ------- |
| boolean |

### `openPollCreationDialog`

Called when the poll creation button is clicked in the attachment picker. Use it to override the default modal UI.

If overridden, a `payload` is passed with `sendMessage` from [`MessageInputContext`](/chat/docs/sdk/react-native/v8/contexts/message-input-context/) for use in [`CreatePoll`](/chat/docs/sdk/react-native/v8/ui-components/create-poll/).

| Type     |
| -------- |
| function |

| Parameter | Description       |
| --------- | ----------------- |
| payload   | `{ sendMessage }` |

### `closePollCreationDialog`

Function called whenever the close button is pressed on the poll creation modal. Has no effect if [`PollCreateContent`](/chat/docs/sdk/react-native/v8/core-components/channel#createpollcontent/) is custom.

| Type     |
| -------- |
| function |

### `hasCreatePoll`

Controls whether the poll creation button is visible.

| Type    |
| ------- |
| boolean |

### `topInset`

Distance from the top of the screen the attachment picker should open to when expanded. This is often set to the header height.

<admonition type="tip">

This can also be set via the `setTopInset` function provided by the `useAttachmentPickerContext` hook.

</admonition>

| Type   | Default |
| ------ | ------- |
| Number | 0       |

### `maximumMessageLimit`

<admonition type="note">

This component is available since version `8.6.2` of the SDK.

</admonition>

A prop that limits how many messages are kept in memory.

Useful for high-traffic channels (for example, a livestream) where retaining every message in memory is unnecessary.

Behavior notes:

- It affects how the underlying `MessageList` works
- When the limit is exceeded, the oldest messages are pruned (in memory only)
- Messages are not pruned if you are near the top of the `MessageList`
- Pagination still works for messages removed from memory

| Type   |
| ------ |
| number |

## UI Components Props

### AttachButton

Renders the attach button next to the input box.

| Type          | Default                                                                       |
| ------------- | ----------------------------------------------------------------------------- |
| ComponentType | [`AttachButton`](/chat/docs/sdk/react-native/v8/ui-components/attach-button/) |

### Attachment

Renders attachments in `MessageList`.

Available props:

- `attachment` `{object}`

| Type          | Default                                                                  |
| ------------- | ------------------------------------------------------------------------ |
| ComponentType | [`Attachment`](/chat/docs/sdk/react-native/v8/ui-components/attachment/) |

### AttachmentActions

Renders additional attachment actions (for example, Giphy send/shuffle/cancel).

| Type          | Default                                                                                                                                         |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [AttachmentActions](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Attachment/AttachmentActions.tsx) |


### AudioAttachment

Renders the audio attachment.

| Type          | Default                                                                             |
| ------------- | ----------------------------------------------------------------------------------- |
| ComponentType | [`AudioAttachment`](/chat/docs/sdk/react-native/v8/ui-components/audio-attachment/) |

### AudioAttachmentUploadPreview

Customize the audio attachment upload preview in `MessageInput`.

| Type          | Default                                                                                                                                                                                                   |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`AudioAttachmentUploadPreview`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/components/AttachmentPreview/AudioAttachmentUploadPreview.tsx) |

### AudioRecorder

Custom UI for audio recorder controls in [MessageInput](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type          | Default                                                                                                                                     |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`AudioRecorder`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageInput/AudioRecorder.tsx) |

### AudioRecordingInProgress

Custom UI for an in-progress audio recording in [MessageInput](/chat/docs/sdk/react-native/v8/ui-components/message-input/) (waveform, duration, etc.).

| Type          | Default                                                                                                                                                                                    |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [`AudioRecordingInProgress`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageInput/components/AudioRecorder/AudioRecordingInProgress.tsx) |

### AudioRecordingLockIndicator

Custom lock indicator for audio recording in [MessageInput](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type          | Default                                                                                                                                                                                          |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [`AudioRecordingLockIndicator`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.tsx) |

### AudioRecordingPreview

Custom UI to preview and play an audio recording in [MessageInput](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type          | Default                                                                                                                                                                              |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [`AudioRecordingPreview`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageInput/components/AudioRecorder/AudioRecordingPreview.tsx) |

### AudioRecordingWaveform

Custom waveform UI for audio recording in [MessageInput](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type          | Default                                                                                                                                                                                |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`AudioRecordingWaveform`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageInput/components/AudioRecorder/AudioRecordingWaveform.tsx) |

### AutoCompleteSuggestionHeader

Renders the autocomplete suggestion header.

| Type          | Default                                                                                                        |
| ------------- | -------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`AutoCompleteSuggestionHeader`](/chat/docs/sdk/react-native/v8/ui-components/autocomplete-suggestion-header/) |

### AutoCompleteSuggestionItem

Renders an autocomplete suggestion item.

| Type          | Default                                                                                                    |
| ------------- | ---------------------------------------------------------------------------------------------------------- |
| ComponentType | [`AutoCompleteSuggestionItem`](/chat/docs/sdk/react-native/v8/ui-components/autocomplete-suggestion-item/) |

### AutoCompleteSuggestionList

Renders the autocomplete suggestion list.

| Type          | Default                                                                                                    |
| ------------- | ---------------------------------------------------------------------------------------------------------- |
| ComponentType | [`AutoCompleteSuggestionList`](/chat/docs/sdk/react-native/v8/ui-components/autocomplete-suggestion-list/) |

### AttachmentPickerBottomSheetHandle

Bottom sheet handle component for the attachment picker.

| Type          | Default                                                                                                                                                                                                              |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`AttachmentPickerBottomSheetHandle`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx) |

### AttachmentPickerSelectionBar

Renders the attachment picker selection bar (image, file, camera icons).

| Type          | Default                                                                                                                                                                                                    |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`AttachmentPickerSelectionBar`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/AttachmentPicker/components/AttachmentPickerSelectionBar.tsx) |

### AttachmentPickerIOSSelectMorePhotos

Renders the “select more photos” option for limited gallery access on iOS.

| Type          | Default                                                                                                                                                                                                               |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`AttachmentPickerIOSSelectMorePhotos`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerIOSSelectMorePhotos.tsx) |

### AttachmentPickerError

Error component shown when the app lacks permission to access photos.

| Type          | Default                                                                                                                                                                                   |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`AttachmentPickerError`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx) |

### AttachmentPickerErrorImage

Image component used by [`AttachmentPickerError`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx).

| Type          | Default                                                                                                                                                                                             |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`AttachmentPickerErrorImage`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerErrorImage.tsx) |

### AttachmentUploadPreviewList

Renders previews of attached files and images in `MessageInput`.

| Type          | Default                                                                                                       |
| ------------- | ------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`AttachmentUploadPreviewList`](/chat/docs/sdk/react-native/v8/ui-components/attachment-upload-preview-list/) |

### AttachmentUploadProgressIndicator

Renders upload progress for images/files in the message input.

| Type          | Default                                                                                                                                                                                                           |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [AttachmentUploadProgressIndicator](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.tsx) |

### CameraSelectorIcon

Camera selector icon in the attachment selector bar.

| Type          | Default                                                                                                                                                                             |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`CameraSelectorIcon`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/CameraSelectorIcon.tsx) |

### CooldownTimer

Renders a countdown timer for message send cooldowns in `MessageInput`.

| Type          | Default                                                                                                                                        |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`CooldownTimer`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/CooldownTimer.tsx) |

### Card

Renders custom attachment types. See [Custom Attachment](/chat/docs/sdk/react-native/v8/guides/custom-attachment/).

| Type          | Default                                                      |
| ------------- | ------------------------------------------------------------ |
| ComponentType | [`Card`](/chat/docs/sdk/react-native/v8/ui-components/card/) |

### CardCover

Renders the main body of [`Card`](/chat/docs/sdk/react-native/v8/ui-components/card/) attachments. See [Custom Attachment](/chat/docs/sdk/react-native/v8/guides/custom-attachment/).

| Type          |
| ------------- |
| ComponentType |

### CardFooter

Renders the footer for [`Card`](/chat/docs/sdk/react-native/v8/ui-components/card/) attachments. See [Custom Attachment](/chat/docs/sdk/react-native/v8/guides/custom-attachment/).

| Type          |
| ------------- |
| ComponentType |

### CardHeader

Renders the header for [`Card`](/chat/docs/sdk/react-native/v8/ui-components/card/) attachments. See [Custom Attachment](/chat/docs/sdk/react-native/v8/guides/custom-attachment/).

| Type          |
| ------------- |
| ComponentType |

### CommandsButton

Renders the button next to the input box that opens the commands list.

| Type          | Default                                                                           |
| ------------- | --------------------------------------------------------------------------------- |
| ComponentType | [`CommandsButton`](/chat/docs/sdk/react-native/v8/ui-components/commands-button/) |

### CommandInput

Renders the message input in an active command state.

| Type          | Default                                                                       |
| ------------- | ----------------------------------------------------------------------------- |
| ComponentType | [`CommandInput`](/chat/docs/sdk/react-native/v8/ui-components/command-input/) |

### DateHeader

Renders the sticky date header in `MessageList`.

| Type          | Default                                                                                                                            |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [DateHeader](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageList/DateHeader.tsx) |

### EmptyStateIndicator

Renders when the channel has no messages.

| Type          | Default                                                                                                                                             |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [EmptyStateIndicator](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Indicators/EmptyStateIndicator.tsx) |

### FileAttachmentIcon

Renders the file icon for `file` attachments.

| Type          | Default                                                                                                                            |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`FileIcon`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/Attachment/FileIcon.tsx) |


### FileAttachment

Renders `file` attachments in `MessageList`.

| Type          | Default                                                                           |
| ------------- | --------------------------------------------------------------------------------- |
| ComponentType | [`FileAttachment`](/chat/docs/sdk/react-native/v8/ui-components/file-attachment/) |

### FileAttachmentGroup

Renders a group of `file` attachments when a message has multiple files.

| Type          | Default                                                                                      |
| ------------- | -------------------------------------------------------------------------------------------- |
| ComponentType | [`FileAttachmentGroup`](/chat/docs/sdk/react-native/v8/ui-components/file-attachment-group/) |

### FileSelectorIcon

File selector icon in the attachment selector bar.

| Type          | Default                                                                                                                                                                         |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`FileSelectorIcon`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/FileSelectorIcon.tsx) |

### ImageSelectorIcon

Image selector icon in the attachment selector bar.

| Type          | Default                                                                                                                                                                           |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`ImageSelectorIcon`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/ImageSelectorIcon.tsx) |

### VideoRecorderSelectorIcon

Video recorder selector icon in the attachment selector bar.

| Type          | Default                                                                                                                                                                                           |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`VideoRecorderSelectorIcon`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/VideoRecorderSelectorIcon.tsx) |

### FileAttachmentUploadPreview

Customize the file attachment upload preview in `MessageInput`.

| Type          | Default                                                                                                                                                                                                 |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`FileAttachmentUploadPreview`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/components/AttachmentPreview/FileAttachmentUploadPreview.tsx) |

### ImageAttachmentUploadPreview

Customize the image attachment upload preview in `MessageInput`.

| Type          | Default                                                                                                                                                                                                   |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`ImageAttachmentUploadPreview`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/components/AttachmentPreview/ImageAttachmentUploadPreview.tsx) |

### VideoAttachmentUploadPreview

Customize the video attachment upload preview in `MessageInput`.

| Type          | Default                                                                                                                                                                                                   |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`VideoAttachmentUploadPreview`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/components/AttachmentPreview/VideoAttachmentUploadPreview.tsx) |

### ImageOverlaySelectedComponent

Indicator shown for selected images in the image picker.

| Type          | Default                                                                                                                                                                                                   |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | `undefined` \| [`ImageOverlaySelectedComponent`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/AttachmentPicker/components/ImageOverlaySelectedComponent.tsx) |

### FlatList

`FlatList` component used by `MessageList`.

| Type          | Default                                                                                                                            |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [flat-list-mvcp](https://github.com/GetStream/flat-list-mvcp#maintainvisiblecontentposition-prop-support-for-android-react-native) |

### Gallery

Renders `image` attachments in `MessageList`.

| Type          | Default                                                            |
| ------------- | ------------------------------------------------------------------ |
| ComponentType | [`Gallery`](/chat/docs/sdk/react-native/v8/ui-components/gallery/) |


### Giphy

Renders Giphy attachments in `MessageList`.

| Type          | Default                                                        |
| ------------- | -------------------------------------------------------------- |
| ComponentType | [`Giphy`](/chat/docs/sdk/react-native/v8/ui-components/giphy/) |

### ImageLoadingFailedIndicator

Renders when an image fails to load in `Gallery`.

| Type          | Default                       |
| ------------- | ----------------------------- |
| ComponentType | `ImageLoadingFailedIndicator` |

### ImageLoadingIndicator

Renders while an image is loading in `Gallery`.

| Type          | Default                 |
| ------------- | ----------------------- |
| ComponentType | `ImageLoadingIndicator` |

### InlineDateSeparator

Renders inline date separators between messages more than a day apart.

| Type          | Default                                                                                                                                              |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [InlineDateSeparator](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageList/InlineDateSeparator.tsx) |

### InlineUnreadIndicator

Renders an inline separator in `MessageList` to mark the last read message.

| Type          | Default                                                                                                                                                  |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [InlineUnreadIndicator](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageList/InlineUnreadIndicator.tsx) |

### Input

Renders the UI for the enclosed `MessageInput`.
See [Customizing Message Input](/chat/docs/sdk/react-native/v8/guides/message-input-customization/).

| Type          |
| ------------- |
| ComponentType |

### InputButtons

Renders action buttons (CommandsButton and AttachButton) on the left side of the `MessageInput`.

| Type          | Default                                                                                                                                      |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`InputButtons`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/InputButtons.tsx) |

### InputEditingStateHeader

Renders the header when editing a message in the input.

| Type          | Default                                                                                               |
| ------------- | ----------------------------------------------------------------------------------------------------- |
| ComponentType | [`InputEditingStateHeader`](/chat/docs/sdk/react-native/v8/ui-components/input-editing-state-header/) |

### InputReplyStateHeader

Renders the reply header in the message input.

| Type          | Default                                                                                           |
| ------------- | ------------------------------------------------------------------------------------------------- |
| ComponentType | [`InputReplyStateHeader`](/chat/docs/sdk/react-native/v8/ui-components/input-reply-state-header/) |

### KeyboardCompatibleView

Override the default `KeyboardCompatibleView`. You likely won't need this; use these props instead:

- [`keyboardVerticalOffset`](#required-keyboardverticaloffset)
- [`disableKeyboardCompatibleView`](#disablekeyboardcompatibleview)

| Type          | Default                                                                                                                                                               |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [KeyboardCompatibleView](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/KeyboardCompatibleView/KeyboardCompatibleView.tsx) |

### LoadingErrorIndicator

Full-screen error indicator when the channel fails to load.

| Type          | Default                                                                                                                                                 |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [LoadingErrorIndicator](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Indicators/LoadingErrorIndicator.tsx) |

### LoadingIndicator

Renders a full-screen loading indicator when a channel is loading.

| Type          | Default                                                                                                                                       |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [LoadingIndicator](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Indicators/LoadingIndicator.tsx) |

### MessageActionList

Renders the message action list in the message menu.

| Type          | Default                                                                                                                                                           |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageActionList`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageMenu/MessageActionList.tsx) \| `undefined` |

### MessageActionListItem

Renders a message action item within the action list.

| Type          | Default                                                                                                                                                                   |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageActionListItem`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageMenu/MessageActionListItem.tsx) \| `undefined` |

### MessageAvatar

Renders the sender avatar in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/). Only shown for other users’ messages.

| Type          | Default                                                                                                                                                 |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageAvatar`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/Message/MessageSimple/MessageAvatar.tsx) |


### MessageBounce

Renders the bounce action handler for bounced messages in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/).

| Type          | Default                                                                         |
| ------------- | ------------------------------------------------------------------------------- |
| ComponentType | [`MessageBounce`](/chat/docs/sdk/react-native/v8/ui-components/message-bounce/) |

### MessageContent

Renders message content (status, attachments, reactions, etc.) in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/).

| Type          | Default                                                                           |
| ------------- | --------------------------------------------------------------------------------- |
| ComponentType | [`MessageContent`](/chat/docs/sdk/react-native/v8/ui-components/message-content/) |

### MessageDeleted

Renders a deleted message.

| Type          | Default                                                                           |
| ------------- | --------------------------------------------------------------------------------- |
| ComponentType | [`MessageDeleted`](/chat/docs/sdk/react-native/v8/ui-components/message-deleted/) |

### MessageEditedTimestamp

Renders the “edited” label in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/). Only shown for other users’ messages.

| Type          | Default                                                                                                                                                                   |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageEditedTimestamp`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/Message/MessageSimple/MessageEditedTimestamp.tsx) |

### MessageError

Customize the message error component.

| Type          | Default                                                                       |
| ------------- | ----------------------------------------------------------------------------- |
| ComponentType | [`MessageError`](/chat/docs/sdk/react-native/v8/ui-components/message-error/) |

### MessageFooter

Renders the message footer in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/).

| Type          | Default                                                                         |
| ------------- | ------------------------------------------------------------------------------- |
| ComponentType | [`MessageFooter`](/chat/docs/sdk/react-native/v8/ui-components/message-footer/) |

### MessageHeader

Renders the header for a message in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/).

| Type          |
| ------------- |
| ComponentType |

### MessageMenu

Customize the message menu used for actions and reactions.

| Type          | Default                                                                                                                                               |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageMenu`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageMenu/MessageMenu.tsx) \| `undefined` |

### MessagePinnedHeader

Renders the pinned message label in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/).

| Type          |
| ------------- |
| ComponentType |

### MessageReplies

Shows thread reply count and avatars of users who replied.

| Type          | Default                                                                           |
| ------------- | --------------------------------------------------------------------------------- |
| ComponentType | [`MessageReplies`](/chat/docs/sdk/react-native/v8/ui-components/message-replies/) |

### MessageRepliesAvatars

Renders avatars of users who replied in the thread.

| Type          | Default                                                                                          |
| ------------- | ------------------------------------------------------------------------------------------------ |
| ComponentType | [`MessageRepliesAvatars`](/chat/docs/sdk/react-native/v8/ui-components/message-replies-avatars/) |

### MessageSimple

Renders a message in [`MessageList`](/chat/docs/sdk/react-native/v8/ui-components/message-list/).

See [Customizing Message UI](/chat/docs/sdk/react-native/v8/guides/message-customization/).

| Type          | Default                                                                         |
| ------------- | ------------------------------------------------------------------------------- |
| ComponentType | [`MessageSimple`](/chat/docs/sdk/react-native/v8/ui-components/message-simple/) |

### MessageStatus

Renders message status (time and read receipts).

| Type          | Default                                                                         |
| ------------- | ------------------------------------------------------------------------------- |
| ComponentType | [`MessageStatus`](/chat/docs/sdk/react-native/v8/ui-components/message-status/) |

### MessageSwipeContent

Renders content when the user swipes a message.

| Type          | Default                                                                                                                                                                            |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageSwipeContent`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/Message/MessageSimple/MessageSwipeContent.tsx) \| `undefined` |

### MessageSystem

Renders `system` messages that inform users about channel changes. System messages are part of history and have `type: "system"`.

System messages appear when:

- [A user gets added to or removed from channel](/chat/docs/javascript/channel_members/)
- [A user accepts invite to join a channel](/chat/docs/javascript/channel_invites/#accepting-an-invite/)
- [Channel is updated](<https:/getstream.io/chat/docs/javascript/channel_update/#full-update-(overwrite)>)

| Type          | Default                                                                         |
| ------------- | ------------------------------------------------------------------------------- |
| ComponentType | [`MessageSystem`](/chat/docs/sdk/react-native/v8/ui-components/message-system/) |

### MessageText

Renders message text. By default, the SDK uses [Simple Markdown](https://github.com/Khan/simple-markdown#adding-a-simple-extension). If you override this, you must handle markdown rendering yourself.

| Type          | Default                                                                                                                                            |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [renderText](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Message/MessageSimple/utils/renderText.tsx) |

### MessageReactionPicker

Reaction selector shown in the message menu on long-press.

| Type          | Default                                                                                                                                                                      |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageReactionPicker`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageMenu/MessageReactionPicker.tsx) \| `undefined` |

### MessageUserReactionsAvatar

Renders an avatar in message user reactions within the message menu.

| Type          | Default                                                                                                                                                                                |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageUserReactionsAvatar`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageMenu/MessageUserReactionsAvatar.tsx) \| `undefined` |

### MessageUserReactionsItem

Customize an individual user reaction item in `MessageMenu`’s `MessageUserReactions` (avatar, reaction type, user name, etc.).

| Type          | Default                                                                                                                                                                            |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageUserReactionsItem`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageMenu/MessageUserReactionsItem.tsx) \| `undefined` |

### MessageUserReactions

Renders the reactions list in the message menu.

| Type          | Default                                                                                                                                                                    |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`MessageUserReactions`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageMenu/MessageUserReactions.tsx) \| `undefined` |

### MoreOptionsButton

Renders the MessageInput “more options” button (for AttachButton, CommandsButton, etc.).

| Type          | Default                                                                                  |
| ------------- | ---------------------------------------------------------------------------------------- |
| ComponentType | [`MoreOptionsButton`](/chat/docs/sdk/react-native/v8/ui-components/more-options-button/) |

### NetworkDownIndicator

Renders an indicator at the top of the channel when the network/connection is down.

| Type          | Default                                                                                                                                                |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [NetworkDownIndicator](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageList/NetworkDownIndicator.tsx) |

### ReactionListBottom

Renders the reactions list below the message bubble.

| Type          | Default                                                                                                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [`ReactionListBottom`](https://github.com/GetStream/stream-chat-react-native/v8/tree/develop/package/src/components/Message/MessageSimple/ReactionList/ReactionListBottom.tsx) |

### ReactionListTop

Renders the reactions list above the message bubble.

| Type          | Default                                                                                                                                                                  |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [`ReactionListTop`](https://github.com/GetStream/stream-chat-react-native/v8/tree/develop/package/src/components/Message/MessageSimple/ReactionList/ReactionListTop.tsx) |

### Reply

Renders a preview of the parent message for quoted replies.

| Type          | Default                                                                                                                 |
| ------------- | ----------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`Reply`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/Reply/Reply.tsx) |


### ScrollToBottomButton

Renders a button that scrolls the message list to the bottom.

| Type          | Default                                                                                         |
| ------------- | ----------------------------------------------------------------------------------------------- |
| ComponentType | [`ScrollToBottomButton`](/chat/docs/sdk/react-native/v8/ui-components/scroll-to-bottom-button/) |

### SendButton

Renders the send message button inside `MessageInput`.

| Type          | Default                                                                                                                                  |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`SendButton`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/SendButton.tsx) |

### SendMessageDisallowedIndicator

Renders an indicator when the current user can’t send messages.

| Type          | Default                                                                                                             |
| ------------- | ------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`SendMessageDisallowedIndicator`](/chat/docs/sdk/react-native/v8/ui-components/send-message-disallowed-indicator/) |

### ShowThreadMessageInChannelButton

Renders a checkbox in `Thread` that sets `show_in_channel` to true when checked.

| Type          | Default                                                                                                                                                                              |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [`ShowThreadMessageInChannelButton`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/ShowThreadMessageInChannelButton.tsx) |

### StartAudioRecordingButton

Custom mic button for audio recording in [MessageInput](/chat/docs/sdk/react-native/v8/ui-components/message-input/).

| Type          | Default                                                                                                                                                                                 |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`StartAudioRecordingButton`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageInput/components/AudioRecorder/AudioRecordingButton.tsx) |

### TypingIndicator

Renders the typing indicator in `MessageList`.

| Type          | Default                                                                                                                                           |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`TypingIndicator`](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageList/TypingIndicator.tsx) |

### TypingIndicatorContainer

Renders the container for the typing indicator in `MessageList`.

| Type          | Default                                                                                                                                                        |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [TypingIndicatorContainer](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/MessageList/TypingIndicatorContainer.tsx) |

### UnreadMessagesNotification

Renders the floating unread indicator when the first unread message is off-screen.

| Type          | Default                                                                                                                                                                 |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`UnreadMessagesNotification`](https://github.com/GetStream/stream-chat-react-native/v8/tree/develop/package/src/components/MessageList/UnreadMessagesNotification.tsx) |

### UrlPreview

Renders URL previews in `MessageList`.

| Type          | Default                                                      |
| ------------- | ------------------------------------------------------------ |
| ComponentType | [`Card`](/chat/docs/sdk/react-native/v8/ui-components/card/) |

### CreatePollContent

A custom UI component used to render the entire poll creation form. It has access to the [`CreatePollContext`](/chat/docs/sdk/react-native/v8/contexts/create-poll-context/) values by default through the `useCreatePollContext` hook.

| Type          | Default                                                                                                                                     |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`CreatePollContent`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Poll/CreatePollContent.tsx) |


### PollContent

A `Component` prop used to render the content of the `Poll` component in `MessageList`.

The component has full access to the entire `Poll` reactive state through the `usePollState` hook.

| Type          | Default                                                                                                                  |
| ------------- | ------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [`PollContent`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Poll/Poll.tsx) |

#### Props

##### `PollHeader`

A `Component` prop used to render the header of the `PollContent` component.

| Type          | Default                                                                                                                 |
| ------------- | ----------------------------------------------------------------------------------------------------------------------- |
| ComponentType | [`PollHeader`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Poll/Poll.tsx) |

##### `PollButtons`

A `Component` prop used to render the buttons of the `PollContent` component.

| Type          | Default                                                                                                                  |
| ------------- | ------------------------------------------------------------------------------------------------------------------------ |
| ComponentType | [`PollButtons`](https://github.com/GetStream/stream-chat-react-native/v8/blob/main/package/src/components/Poll/Poll.tsx) |

### StreamingMessageView

Custom UI for an AI-generated message.

| Type      | Default                                                                                                                                                             |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| component | [StreamingMessageView](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/Message/MessageSimple/StreamingMessageView.tsx) |

### StopMessageStreamingButton

Custom button to stop AI generation, shown instead of `SendButton` in `MessageInput`.

| Type      | Default                                                                                                                                                                |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| component | [StopMessageStreamingButton](https://github.com/GetStream/stream-chat-react-native/v8/blob/develop/package/src/components/MessageInput/StopMessageStreamingButton.tsx) |


---

This page was last updated at 2026-04-17T17:33:44.607Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/sdk/react-native/v8/core-components/channel/](https://getstream.io/chat/docs/sdk/react-native/v8/core-components/channel/).