Align Compose theming with Figma Design System via unified StreamDesign tokens#6182
Merged
andremion merged 20 commits intoFeb 25, 2026
Merged
Conversation
Contributor
PR checklist ✅All required conditions are satisfied:
🎉 Great job! This PR is ready for review. |
Contributor
SDK Size Comparison 📏
|
03a1679 to
56ba919
Compare
a9ed908 to
6c4a3b9
Compare
gpunto
reviewed
Feb 24, 2026
…library and samples
270c755 to
5913230
Compare
gpunto
approved these changes
Feb 25, 2026
|
Contributor
|
🚀 Available in v7.0.0-beta |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Goal
Align the Compose SDK theming with the Figma Chat SDK Design System by introducing a unified
StreamDesignnamespace for all design tokens (colors, typography, dimensions), removing legacy abstractions that no longer have Figma backing, and eliminating redundant intermediate component themes superseded byChatComponentFactory.Implementation
The theming layer was refactored in several incremental phases:
StreamDesignnamespace — ConsolidatedStreamColors,StreamTypography,StreamShapes, andStreamDimensinto nested data classes under a singleStreamDesignobject. Primitive tokens (StreamPrimitiveColors,StreamTokens) remaininternal; integrators work exclusively with semantic tokens viaStreamDesign.Colors,StreamDesign.Typography, andStreamDesign.Dimens.Colors alignment — Removed 23 legacy XML-backed color delegates (e.g.
textHighEmphasis,barsBackground,primaryAccent) fromStreamDesign.Colors, replaced them with ~100 Figma-aligned semantic tokens, and migrated ~280 call sites across all modules. Default factories are now pure Kotlin (no morecolorResource()calls).Typography alignment — Removed 13 legacy typography properties (e.g.
title1,body,footnote,singleEmoji) and replaced them with 12 Figma-aligned tokens (e.g.headingLarge,bodyDefault,metadataEmphasis). Special styles (bodyItalic,emojiOnly) are inlined at call sites with TODO markers for future dedicated tokens.Component theme removal — Deleted 5 intermediate themes (
AttachmentPickerTheme,MessageDateSeparatorTheme,MessageUnreadSeparatorTheme,AttachmentsPreviewTheme,AudioRecordingAttachmentPreviewTheme) whose properties were either unused or trivially derivable fromStreamDesigntokens. Styling was inlined at call sites.Shapes removal — Removed
StreamDesign.Shapesentirely (no Figma backing, superseded byChatComponentFactory). Deleted 3 dead properties (myMessageBubble,otherMessageBubble,quotedAttachment), inlined the 8 used shapes at ~35 call sites usingStreamTokensradius references.Typealias removal — Removed all deprecated typealiases (
StreamColors,StreamTypography,StreamDimens,StreamShapes) and their deprecated factory shims (defaultColors(),defaultTypography(),defaultDimens()). All code now usesStreamDesign.*types directly.classDiagram class StreamDesign { <<object>> } class Colors { <<@Immutable data class>> } class Typography { <<@Immutable data class>> } class Dimens { <<@Immutable data class>> } class StreamPrimitiveColors { <<internal object>> } class StreamTokens { <<internal object>> } class ChatTheme { <<Composable>> } StreamDesign *-- Colors : nested StreamDesign *-- Typography : nested StreamDesign *-- Dimens : nested Colors ..> StreamPrimitiveColors : references internally Colors ..> StreamTokens : references internally Typography ..> StreamTokens : references internally ChatTheme ..> Colors : provides via CompositionLocal ChatTheme ..> Typography : provides via CompositionLocal ChatTheme ..> Dimens : provides via CompositionLocalTesting
Smoke-test the Compose sample app in both light and dark mode. Walk through the core flows — channel list, message list, message composer, attachment picker, reactions, and polls — and confirm the UI renders correctly with no visual regressions or crashes.