github GetStream/stream-chat-android v7.0.0

22 hours ago

Visual Redesign

v7 introduces a complete visual overhaul of the Compose UI components with a new design system built on StreamDesign.

New Design System

Area What Changed
Theming StreamColors, StreamTypography, StreamShapes → unified StreamDesign with Colors (63 tokens) and Typography (14 styles)
Feature Flags Scattered ChatTheme params → grouped in ChatUiConfig (translation, composer, channel list, polls, message list, message actions, media gallery, attachment picker)
Component Factory MessageContentFactory removed → single ChatComponentFactory for all customization
CompositionLocals ~15 individual locals → consolidated into LocalChatUiConfig, LocalReactionResolver

Redesigned Components

Component Changes
Channel List Swipeable items with action buttons, loading shimmer, updated selected channel menu
Channel Screen Renamed: MessagesScreenChannelScreen. Forwarded callback params (link click, user avatar click, mention click, poll callbacks) removed — customize via ChatComponentFactory
Channel Header Renamed: MessageListHeaderChannelHeader. Styling params removed
Message List Inline typing indicator, redesigned system messages, updated date/unread separators. Slot params (itemContent etc.) removed — customize via ChatComponentFactory
Message Composer Split into leading/center/trailing content. Floating style option. Internal audio recording. Inline edit with save button
Message Actions Renamed: SelectedMessageMenuMessageActions, MessageMenuMessageActions. MessageOptionItemVisibilityMessageActionsOptionsVisibility
Attachment Picker Rebuilt as AttachmentPicker (singular). Mode-based: GalleryPickerMode, FilePickerMode, CameraPickerMode, PollPickerMode, CommandPickerMode. AttachmentsPickerTabFactory removed
Reactions Emoji-only by default via ReactionResolver. New ReactionsMenu (was SelectedReactionsMenu). reactionSorting moved to ChatUiConfig.messageList
Avatars GroupAvatar/ImageAvatar/InitialsAvatar → consolidated into Avatar / UserAvatar / ChannelAvatar. Crossfade removed
Polls New creation and results screens. maxVotes nullable
Thread List Redesigned screen with updated indicators. Slot params removed
Channel Info Member options with bottom sheet actions. Hide-channel option removed

API Surface Trimmed

v7 significantly tightens the public API. Previously many composables exposed slot parameters, styling parameters, and forwarded callbacks. These are now removed in favor of ChatComponentFactory for customization and ChatUiConfig for behavior flags. Also:

  • Messages and Channels composables are now internal
  • ChannelViewModelFactory constructor params grouped into MessageListOptions and ComposerOptions

Simplified Architecture

Module Consolidation

Removed:

stream-chat-android-offline      → merged into client
stream-chat-android-state        → merged into client
stream-chat-android-ui-utils     → merged into ui-common
stream-chat-android-ai-assistant → use stream-chat-android-ai repo

Client Setup

// v6
val offlinePlugin = StreamOfflinePluginFactory(appContext = context)
val statePlugin = StreamStatePluginFactory(config = StatePluginConfig(), appContext = context)

ChatClient.Builder(apiKey, context)
    .withPlugins(offlinePlugin, statePlugin)
    .build()

// v7 — plugins removed, built-in by default
ChatClient.Builder(apiKey, context)
    .config(ChatClientConfig())  // optional, sensible defaults
    .build()

Config Renames

v6 v7 Purpose
StatePluginConfig + StreamOfflinePluginFactory ChatClientConfig Client behavior (offline, presence, sync)
Multiple theme fields ChatUiConfig Compose UI feature flags
ChatClientConfig ChatApiConfig (internal) Low-level API/URL config, not public anymore

Breaking Changes at a Glance

Category Details
Removed modules stream-chat-android-offline, stream-chat-android-state, stream-chat-android-ui-utils, stream-chat-android-ai-assistant
Renamed/moved classes ~30 (highlights: MessagesScreenChannelScreen, MessageListHeaderChannelHeader, MessageMenu / SelectedMessageMenuMessageActions, MessagesViewModelFactoryChannelViewModelFactory, SelectedReactionsMenuReactionsMenu, AttachmentsPickerAttachmentPicker)
Removed APIs withPlugins(), MessageContentFactory, AttachmentsPickerTabFactory, ReactionIconFactory, StreamShapes, StreamColors (individual), MessageComposerTheme, MessageOptionsTheme, ChannelOptionsTheme, ReactionOptionsTheme, StreamRippleConfiguration, DeletedMessageVisibility, hide-channel feature, per-user read counts; many composable slot/styling/callback params from ChannelList, MessageList, PinnedMessageList, ThreadList, MessageContent, ChannelListHeader, ChannelHeader, PollCreationHeader, ChannelScreen
New APIs ChatComponentFactory, ChatClientConfig, ChatUiConfig, StreamDesign, ReactionResolver, AttachmentPickerMode, MessageListOptions, ComposerOptions

Migration

See the Migration guide for step-by-step instructions.

Quick Start

  1. Remove stream-chat-android-offline and stream-chat-android-state dependencies
  2. Replace withPlugins(...) with config(ChatClientConfig()) (or omit entirely for defaults)
  3. Update ChatTheme — replace individual params with StreamDesign and ChatUiConfig
  4. Replace renamed types: MessagesScreenChannelScreen, MessageListHeaderChannelHeader, MessageMenu / SelectedMessageMenuMessageActions, AttachmentsPickerAttachmentPicker, SelectedReactionsMenuReactionsMenu, MessagesViewModelFactoryChannelViewModelFactory
  5. Move custom rendering from MessageContentFactory to ChatComponentFactory
  6. Move slot/callback customization on MessageList/ChannelScreen etc. to ChatComponentFactory
  7. Group ChannelViewModelFactory constructor params into MessageListOptions and ComposerOptions
  8. Run ./gradlew build and fix remaining import changes

Full changelog and diff available at v6.37.1...v7.0.0

Don't miss a new stream-chat-android release

NewReleases is sending notifications on new releases.