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 (74 tokens) and Typography (13 styles)
|
| Feature Flags | Scattered ChatTheme params → grouped in ChatUiConfig (translation, composer, channel list, polls, etc.)
|
| 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 |
| Message List | Inline typing indicator, redesigned system messages, updated date/unread separators |
| Message Composer | Split into leading/center/trailing content. Floating style option. Internal audio recording. Inline edit with save button |
| Attachment Picker | Rebuilt as AttachmentPicker. Mode-based: GalleryPickerMode, FilePickerMode, CameraPickerMode, PollPickerMode, CommandPickerMode. Tab factory removed
|
| Reactions | Emoji-only by default via ReactionResolver. New ReactionsMenu (was SelectedReactionsMenu)
|
| Avatars | GroupAvatar/ImageAvatar/InitialsAvatar → AvatarStack + AvatarPlaceholder. Crossfade removed
|
| Polls | New creation and results screens. maxVotes nullable
|
| Thread List | Redesigned screen with updated indicators |
| Channel Info | Member options with bottom sheet actions |
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 |
| Removed APIs | withPlugins(), MessageContentFactory, AttachmentsPickerTabFactory, ReactionIconFactory, StreamShapes, StreamColors (individual)
|
| New APIs | ChatComponentFactory, ChatClientConfig, ChatUiConfig, StreamDesign, ReactionResolver, AttachmentPickerMode
|
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 remove entirely for defaults) - Update
ChatTheme— replace individual params withStreamDesignandChatUiConfig - Replace
AttachmentsPicker→AttachmentPicker,SelectedReactionsMenu→ReactionsMenu - Move custom rendering from
MessageContentFactorytoChatComponentFactory - Run
./gradlew buildand fix remaining import changes
Full changelog and diff available on v6.35.0...v7.0.0-beta