android-design — pick the track first
Android has multiple stacks with different visual ceilings. Ask the user which one before any code.
What This Skill Can Do
- Choose the right Android track: strict Compose/Material, branded Compose, React Native, Flutter, or Compose Multiplatform.
- Design mobile task flows, onboarding, forms, settings, dashboards, media/product surfaces, foldables, tablets, and adaptive layouts.
- Preserve UX briefs, state coverage, navigation hierarchy, gesture/back behavior, loading/error/permission states, and accessibility.
- Apply Material 3 Expressive, dynamic color, edge-to-edge, predictive back, motion schemes, shape, typography, and responsive window-size classes.
- Add branded originality through content surfaces, composition, typography, and state treatment without breaking Android idioms.
Step 0 (MANDATORY) — Ask the user which track
Which track for this app?
1. System-like native (Jetpack Compose + Material 3 Expressive strict) — feels like Pixel Launcher, Google Calendar, Settings. Best for: utilities, system tools, productivity. Spring physics, shape morphing, wavy progress, dynamic color (Material You). Examples: Read You, Androidify sample, Files by Google.
2. Branded native (Compose + custom Material theme) — native chrome (M3E motion, predictive back, edge-to-edge) but bespoke content surface (custom typography, hero atmospheres, magazine layouts). Visual ceiling: high. Examples: Fitbit redesign, Google Calendar's editorial moments, Niantic apps.
3. React Native (New Architecture + Fabric + Hermes) — real Android views, decent native feel, JavaScript codebase, cross-platform with iOS. Material themable but won't get spring physics or shape morphing without manual work. Examples: Discord mobile, Coinbase, Microsoft Office.
4. Flutter — Skia-painted custom rendering. Cross-platform single codebase. Lags Material updates (no M3 Expressive parity, no real dynamic color). Visual ceiling: high if you ship your own design language; weak if mimicking Material. Examples: Google Pay, BMW My BMW, Toyota.
5. Compose Multiplatform (1.8+) — same Compose code, runs Android + iOS + Desktop + Web (Wasm experimental). Native on Android, Material-look on iOS (you must Cupertino-skin or accept). Best for: Kotlin shop wanting cross-platform from one codebase.
Which? Or describe priorities (Play Store launch, cross-platform reach, brand vs Material fit) and I'll pick.
If brief gives strong signal (e.g. "Pixel-style camera" → 1; "cross-platform with React team" → 3; "Kotlin shop, ship to all platforms" → 5), state your pick + reasoning in one sentence. If ambiguous, ask.
Step 0b — Once picked, route
| Track |
Reference docs |
Default stack |
| 1. System-like Compose |
../../references/material3-expressive.md |
Compose BOM 2026.04 + Material3 1.4 + adaptive layouts strict |
| 2. Branded Compose |
Same as 1 |
Same as 1 + custom display font + hero atmospheres + bespoke surfaces |
| 3. React Native |
../../references/web-fonts.md + cross-platform docs |
RN 0.78+ New Arch + Expo Router |
| 4. Flutter |
None for native fidelity |
Flutter 3+ stable |
| 5. Compose Multiplatform |
../../references/material3-expressive.md |
CMP 1.8 stable + shared Compose |
For tracks 3 and 4: web/cross-platform anti-slop rules apply. Read web references.
State the chosen aesthetic direction and track in one sentence at top of response.
Step 0c — UI decision brief
Before code, read:
../../references/ui-patterns/surface-taxonomy.md
../../references/ui-patterns/ui-decision-brief.md
../../references/ui-patterns/visual-hierarchy.md
../../references/ui-patterns/motion-budget.md
Write the UI decision brief and adapt it to the chosen Android track. Compact screens need thumb-reachable primary actions, sheets, edge-to-edge, and adaptive navigation; tablets/foldables need list-detail or supporting panes; operational tools should stay dense and scannable while preserving Material 3 Expressive motion, dynamic color, and predictive back.
Step 1 — Material 3 Expressive default (only if track 1 or 2)
Launched at I/O 2025. Default for Pixel 10 / Android 16 QPR1. Generated UI must adopt:
- Spring physics on every motion —
MotionScheme.expressive(). Never FastOutSlowIn on M3E surfaces.
- Shape morphing — 35 new shapes (squircle, pill, cookie, clover). Use
MaterialShapes.Cookie4Sided, Pill, etc. Buttons/chips/loaders morph between states.
- Emphasized typography — bigger, heavier headlines. Use
MaterialTheme.typography.displayLarge with intent.
- New components:
FloatingToolbar (pill-shaped, drifts with content)
ButtonGroup / SplitButton
FloatingActionButtonMenu
ContainedLoadingIndicator (cycles through M3E shapes)
- Wavy progress —
LinearWavyProgressIndicator, CircularWavyProgressIndicator with variable amplitude
- Large/Small/XL button sizes
- Tonal elevation — surface tone shifts, never
Modifier.shadow() for elevation
- Dynamic color (Material You) —
dynamicColorScheme() from wallpaper on Android 12+
Read ../../references/material3-expressive.md for the M3E adoption checklist.
Step 2 — Compose currency (BOM 2026.04.01)
implementation(platform("androidx.compose:compose-bom:2026.04.01"))
implementation("androidx.compose.material3:material3:1.4.0")
// or for shape-morphing chips:
implementation("androidx.compose.material3:material3:1.5.0-alpha18")
Use:
currentWindowAdaptiveInfo() + NavigationSuiteScaffold (auto-swaps Bar/Rail/Drawer by WindowSizeClass)
ListDetailPaneScaffold, SupportingPaneScaffold, NavigableListDetailPaneScaffold
SharedTransitionLayout { ... } for shared element transitions (stable)
PredictiveBackHandler / BackHandler — mandatory on Android 16, default ON Android 15+
LookaheadAnimationVisualDebugging for inspecting bounds during dev
Step 3 — Edge-to-edge is mandatory
Android 16 (API 36) deprecated windowOptOutEdgeToEdgeEnforcement. Every screen:
- Wraps in
Scaffold with content padding from insets
- Uses
WindowInsets.systemBars, .statusBars, .navigationBars
- Predictive back must be wired
- Status bar color cannot be set opaque — banned on Android 16
Step 4 — Adaptive layouts
- Compact (phone portrait) →
NavigationBar (3–5 items)
- Medium (foldable inner / tablet portrait) →
NavigationRail
- Expanded (tablet landscape / desktop) →
NavigationDrawer (modal or permanent) + ListDetailPaneScaffold
- Foldables: handle tabletop / book postures via
WindowInfoTracker
Step 5 — Typography & icons
- Default body: Roboto Flex (variable). Headlines: per-app brand expression — but stay within M3E weight/size scale.
- Material Symbols (variable axes: weight, fill, grade, optical size) — never FontAwesome/Lucide.
- Get Material Symbols from https://fonts.google.com/icons
Step 6 — Anti-slop ban list (Android-specific)
- iOS-style top nav bars / chevron-back headers
- Hamburger drawer when
NavigationBar (3–5 items) or NavigationRail fits
- Hard
Modifier.shadow(elevation = 8.dp) — use tonalElevation on Surface instead
- Custom back stacks ignoring system back / predictive animation
- Opaque colored status bars — banned on Android 16
- Bottom sheets without drag handle / non-draggable
- Static easing curves on M3E surfaces —
MotionScheme.expressive() only
- SF Symbols / Material Symbols-Outlined-only (use variable axes)
- Inter / SF Pro on Android — Roboto Flex / Google Sans / Material default
- Centered FAB layouts where docked FAB pattern is canonical
- Standard Material 3 baseline 2023 — must be M3 Expressive
- Web-style desktop dashboards squeezed into mobile Compose
- Decorative motion that hides progress, state, or navigation changes
Step 7 — Reference apps that nail M3 Expressive
- Pixel Launcher / Android 16 System UI — shape morph + springs
- Google Calendar — floating toolbar + tonal surfaces
- Fitbit (2025 redesign) —
ContainedLoadingIndicator cycling shapes; floating toolbar
- Pixel Camera 10.1 — wavy progress in capture
- Google Docs/Sheets/Slides homepages — M3E typography
- Chrome (M3E redesign) — adaptive nav
- Read You (community RSS, OSS) — canonical M3 + dynamic color
- Androidify sample app — official Compose M3E reference
Step 8 — Architecture defaults
- MVVM with
ViewModel + StateFlow + collectAsStateWithLifecycle()
- Hilt for DI
- Navigation Compose 3 with type-safe routes
- Coil 3 for image loading (replaces Glide for Compose-first apps)
- Ktor or Retrofit + KotlinX Serialization for networking
- Room for local persistence
Step 9 — Tokens & assets
Token JSON: see ../../assets/tokens/material3-expressive.json
Source: hashgraph-online/awesome-codex-plugins → plugins/f0d010c/stark/skills/android-design/SKILL.md
1---2name: android-design3description: Use when the user asks for an Android app, Compose UI, Material 3, Material You, Material 3 Expressive, Pixel-style app, foldable/adaptive layout, Play Store deliverable, React Native Android, Flutter Android, Compose Multiplatform, or any Android deliverable. Builds Android apps across system-like Compose, branded Compose, React Native, Flutter, and Compose Multiplatform while preserving UX decisions, state coverage, adaptive navigation, Material motion, accessibility, and product-specific visual direction. ALWAYS ask which track first. SKIP when the target is only iOS, Windows, or web-in-browser.4---567# android-design — pick the track first89Android has multiple stacks with different visual ceilings. **Ask the user which one before any code.**1011## What This Skill Can Do1213- Choose the right Android track: strict Compose/Material, branded Compose, React Native, Flutter, or Compose Multiplatform.14- Design mobile task flows, onboarding, forms, settings, dashboards, media/product surfaces, foldables, tablets, and adaptive layouts.15- Preserve UX briefs, state coverage, navigation hierarchy, gesture/back behavior, loading/error/permission states, and accessibility.16- Apply Material 3 Expressive, dynamic color, edge-to-edge, predictive back, motion schemes, shape, typography, and responsive window-size classes.17- Add branded originality through content surfaces, composition, typography, and state treatment without breaking Android idioms.1819## Step 0 (MANDATORY) — Ask the user which track2021> Which track for this app?22>23> **1. System-like native (Jetpack Compose + Material 3 Expressive strict)** — feels like Pixel Launcher, Google Calendar, Settings. Best for: utilities, system tools, productivity. Spring physics, shape morphing, wavy progress, dynamic color (Material You). Examples: Read You, Androidify sample, Files by Google.24>25> **2. Branded native (Compose + custom Material theme)** — native chrome (M3E motion, predictive back, edge-to-edge) but bespoke content surface (custom typography, hero atmospheres, magazine layouts). Visual ceiling: high. Examples: Fitbit redesign, Google Calendar's editorial moments, Niantic apps.26>27> **3. React Native (New Architecture + Fabric + Hermes)** — real Android views, decent native feel, JavaScript codebase, cross-platform with iOS. Material themable but won't get spring physics or shape morphing without manual work. Examples: Discord mobile, Coinbase, Microsoft Office.28>29> **4. Flutter** — Skia-painted custom rendering. Cross-platform single codebase. Lags Material updates (no M3 Expressive parity, no real dynamic color). Visual ceiling: high if you ship your own design language; weak if mimicking Material. Examples: Google Pay, BMW My BMW, Toyota.30>31> **5. Compose Multiplatform (1.8+)** — same Compose code, runs Android + iOS + Desktop + Web (Wasm experimental). Native on Android, Material-look on iOS (you must Cupertino-skin or accept). Best for: Kotlin shop wanting cross-platform from one codebase.32>33> Which? Or describe priorities (Play Store launch, cross-platform reach, brand vs Material fit) and I'll pick.3435If brief gives strong signal (e.g. "Pixel-style camera" → 1; "cross-platform with React team" → 3; "Kotlin shop, ship to all platforms" → 5), state your pick + reasoning in one sentence. If ambiguous, ask.3637## Step 0b — Once picked, route3839| Track | Reference docs | Default stack |40|---|---|---|41| 1. System-like Compose | `../../references/material3-expressive.md` | Compose BOM 2026.04 + Material3 1.4 + adaptive layouts strict |42| 2. Branded Compose | Same as 1 | Same as 1 + custom display font + hero atmospheres + bespoke surfaces |43| 3. React Native | `../../references/web-fonts.md` + cross-platform docs | RN 0.78+ New Arch + Expo Router |44| 4. Flutter | None for native fidelity | Flutter 3+ stable |45| 5. Compose Multiplatform | `../../references/material3-expressive.md` | CMP 1.8 stable + shared Compose |4647For tracks 3 and 4: web/cross-platform anti-slop rules apply. Read web references.4849State the chosen aesthetic direction and track in one sentence at top of response.5051## Step 0c — UI decision brief5253Before code, read:5455- `../../references/ui-patterns/surface-taxonomy.md`56- `../../references/ui-patterns/ui-decision-brief.md`57- `../../references/ui-patterns/visual-hierarchy.md`58- `../../references/ui-patterns/motion-budget.md`5960Write the UI decision brief and adapt it to the chosen Android track. Compact screens need thumb-reachable primary actions, sheets, edge-to-edge, and adaptive navigation; tablets/foldables need list-detail or supporting panes; operational tools should stay dense and scannable while preserving Material 3 Expressive motion, dynamic color, and predictive back.6162## Step 1 — Material 3 Expressive default (only if track 1 or 2)6364Launched at I/O 2025. Default for Pixel 10 / Android 16 QPR1. Generated UI must adopt:6566- **Spring physics on every motion** — `MotionScheme.expressive()`. Never `FastOutSlowIn` on M3E surfaces.67- **Shape morphing** — 35 new shapes (squircle, pill, cookie, clover). Use `MaterialShapes.Cookie4Sided`, `Pill`, etc. Buttons/chips/loaders morph between states.68- **Emphasized typography** — bigger, heavier headlines. Use `MaterialTheme.typography.displayLarge` with intent.69- **New components**:70 - `FloatingToolbar` (pill-shaped, drifts with content)71 - `ButtonGroup` / `SplitButton`72 - `FloatingActionButtonMenu`73 - `ContainedLoadingIndicator` (cycles through M3E shapes)74 - **Wavy progress** — `LinearWavyProgressIndicator`, `CircularWavyProgressIndicator` with variable amplitude75 - Large/Small/XL button sizes76- **Tonal elevation** — surface tone shifts, never `Modifier.shadow()` for elevation77- **Dynamic color (Material You)** — `dynamicColorScheme()` from wallpaper on Android 12+7879Read `../../references/material3-expressive.md` for the M3E adoption checklist.8081## Step 2 — Compose currency (BOM 2026.04.01)8283```kotlin84implementation(platform("androidx.compose:compose-bom:2026.04.01"))85implementation("androidx.compose.material3:material3:1.4.0")86// or for shape-morphing chips:87implementation("androidx.compose.material3:material3:1.5.0-alpha18")88```8990Use:91- `currentWindowAdaptiveInfo()` + `NavigationSuiteScaffold` (auto-swaps Bar/Rail/Drawer by WindowSizeClass)92- `ListDetailPaneScaffold`, `SupportingPaneScaffold`, `NavigableListDetailPaneScaffold`93- `SharedTransitionLayout { ... }` for shared element transitions (stable)94- `PredictiveBackHandler` / `BackHandler` — **mandatory** on Android 16, default ON Android 15+95- `LookaheadAnimationVisualDebugging` for inspecting bounds during dev9697## Step 3 — Edge-to-edge is mandatory9899Android 16 (API 36) deprecated `windowOptOutEdgeToEdgeEnforcement`. Every screen:100- Wraps in `Scaffold` with content padding from insets101- Uses `WindowInsets.systemBars`, `.statusBars`, `.navigationBars`102- Predictive back must be wired103- Status bar color cannot be set opaque — banned on Android 16104105## Step 4 — Adaptive layouts106107- **Compact** (phone portrait) → `NavigationBar` (3–5 items)108- **Medium** (foldable inner / tablet portrait) → `NavigationRail`109- **Expanded** (tablet landscape / desktop) → `NavigationDrawer` (modal or permanent) + `ListDetailPaneScaffold`110- **Foldables**: handle tabletop / book postures via `WindowInfoTracker`111112## Step 5 — Typography & icons113114- **Default body**: Roboto Flex (variable). Headlines: per-app brand expression — but stay within M3E weight/size scale.115- **Material Symbols** (variable axes: weight, fill, grade, optical size) — never FontAwesome/Lucide.116- Get Material Symbols from https://fonts.google.com/icons117118## Step 6 — Anti-slop ban list (Android-specific)119120- iOS-style top nav bars / chevron-back headers121- Hamburger drawer when `NavigationBar` (3–5 items) or `NavigationRail` fits122- Hard `Modifier.shadow(elevation = 8.dp)` — use `tonalElevation` on `Surface` instead123- Custom back stacks ignoring system back / predictive animation124- Opaque colored status bars — banned on Android 16125- Bottom sheets without drag handle / non-draggable126- Static easing curves on M3E surfaces — `MotionScheme.expressive()` only127- SF Symbols / Material Symbols-Outlined-only (use variable axes)128- Inter / SF Pro on Android — Roboto Flex / Google Sans / Material default129- Centered FAB layouts where docked FAB pattern is canonical130- Standard Material 3 baseline 2023 — must be M3 Expressive131- Web-style desktop dashboards squeezed into mobile Compose132- Decorative motion that hides progress, state, or navigation changes133134## Step 7 — Reference apps that nail M3 Expressive135136- **Pixel Launcher / Android 16 System UI** — shape morph + springs137- **Google Calendar** — floating toolbar + tonal surfaces138- **Fitbit (2025 redesign)** — `ContainedLoadingIndicator` cycling shapes; floating toolbar139- **Pixel Camera 10.1** — wavy progress in capture140- **Google Docs/Sheets/Slides homepages** — M3E typography141- **Chrome (M3E redesign)** — adaptive nav142- **Read You** (community RSS, OSS) — canonical M3 + dynamic color143- **Androidify** sample app — official Compose M3E reference144145## Step 8 — Architecture defaults146147- **MVVM** with `ViewModel` + `StateFlow` + `collectAsStateWithLifecycle()`148- **Hilt** for DI149- **Navigation Compose 3** with type-safe routes150- **Coil 3** for image loading (replaces Glide for Compose-first apps)151- **Ktor** or **Retrofit + KotlinX Serialization** for networking152- **Room** for local persistence153154## Step 9 — Tokens & assets155156- M3 token spec: https://m3.material.io/foundations/design-tokens/how-to-use-tokens157- Theme Builder (web): https://m3.material.io/theme-builder158- Theme Builder Figma plugin: https://www.figma.com/community/plugin/1034969338659738588159- M3 Figma kit: https://www.figma.com/community/file/1035203688168086460160- Material Symbols: https://fonts.google.com/icons161- M3E component catalog: https://github.com/meticha/material-3-expressive-catalog162163Token JSON: see `../../assets/tokens/material3-expressive.json`164165---166167**Source:** [`hashgraph-online/awesome-codex-plugins`](https://github.com/hashgraph-online/awesome-codex-plugins) → `plugins/f0d010c/stark/skills/android-design/SKILL.md`