ADR 0005: Material 3 Expressive Adoption Strategy¶
Status¶
Proposed
Context¶
Material 3 Expressive APIs were introduced as experimental in the Compose BOM around early 2026 and are targeting stable promotion in late 2026. They introduce several capabilities relevant to a design system library:
- Shape morphing: 35 built-in shapes with native
ShapeMorphanimation support, enabling animated shape transitions (e.g., FAB expand, button press) with no custom drawing code. - Button groups and toggle buttons: new composables for grouped, mutually-exclusive or multi-select button patterns.
- Expressive FAB and menus: richer motion defaults and larger surface area variants.
- Motion defaults: physics-based spring curves baked into M3 component transitions.
The current AppTheme token system (ADR 0001) exposes semantic shape tokens via
AppTheme.shapes. Adopting M3 Expressive shapes means expanding that surface.
Decision¶
-
Track experimental M3 Expressive APIs in
:catalogand:sampleonly until they are promoted to stable in a non-alpha/betaCompose BOM release. -
When stable, extend
AppTheme.shapeswith amorphablesub-bundle (or equivalent token names) that exposesShapeMorph-compatible shape tokens alongside the existingCornerBasedShapetokens. Keep both surfaces so consumers on older BOM versions are not broken. -
Adopt expressive button and FAB variants in
:componentswhen stable, exposed as new composables (not replacements for existing ones) to preserve API stability per the library's1.0.0posture. -
Do not adopt experimental M3 Expressive APIs in
:componentspublic API before they are stable. Experimental APIs may change between alpha releases, which would force binary-breaking updates. -
Shape token names must remain implementation-independent (
AppTheme.shapes.small, notAppTheme.shapes.expressiveSmall) to decouple the token surface from M3 version specifics.
Consequences¶
:cataloggains previews for expressive shapes and button groups as they ship in alpha BOM releases, giving early visibility without API commitment.- The
AppTheme.shapestoken bundle will expand with a new morph-capable surface once M3 Expressive is stable; that is an additive, non-breaking change. - New expressive component composables will be added alongside existing ones rather than replacing them; existing consumers see no breakage.
- Tracking alpha adoption in
:catalog/:samplerequires opting in to the@ExperimentalMaterial3ExpressiveApiannotation; that annotation must not leak into:componentspublic API.