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: MessagesScreen → ChannelScreen. Forwarded callback params (link click, user avatar click, mention click, poll callbacks) removed — customize via ChatComponentFactory
|
| Channel Header | Renamed: MessageListHeader → ChannelHeader. 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: SelectedMessageMenu → MessageActions, MessageMenu → MessageActions. MessageOptionItemVisibility → MessageActionsOptionsVisibility
|
| 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:
MessagesandChannelscomposables are nowinternalChannelViewModelFactoryconstructor params grouped intoMessageListOptionsandComposerOptions
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: MessagesScreen → ChannelScreen, MessageListHeader → ChannelHeader, MessageMenu / SelectedMessageMenu → MessageActions, MessagesViewModelFactory → ChannelViewModelFactory, SelectedReactionsMenu → ReactionsMenu, AttachmentsPicker → AttachmentPicker)
|
| 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
- Remove
stream-chat-android-offlineandstream-chat-android-statedependencies - Replace
withPlugins(...)withconfig(ChatClientConfig())(or omit entirely for defaults) - Update
ChatTheme— replace individual params withStreamDesignandChatUiConfig - Replace renamed types:
MessagesScreen→ChannelScreen,MessageListHeader→ChannelHeader,MessageMenu/SelectedMessageMenu→MessageActions,AttachmentsPicker→AttachmentPicker,SelectedReactionsMenu→ReactionsMenu,MessagesViewModelFactory→ChannelViewModelFactory - Move custom rendering from
MessageContentFactorytoChatComponentFactory - Move slot/callback customization on
MessageList/ChannelScreenetc. toChatComponentFactory - Group
ChannelViewModelFactoryconstructor params intoMessageListOptionsandComposerOptions - Run
./gradlew buildand fix remaining import changes
Full changelog and diff available at v6.37.1...v7.0.0