Compose Expert logo

Compose Expert

Community
aldefy
compose-expert

Compose and Compose Multiplatform expert for UI development across Android, Desktop, iOS, and Web. Use whenever the user mentions Compose APIs (@Composable, remember, LaunchedEffect, NavHost, MaterialTheme, LazyColumn, Modifier, recomposition), Compose Multiplatform (commonMain, expect/actual, Res.*, ComposeUIViewController, UIKitView, ComposeViewport), Android TV (tv-material, D-pad, focus, Carousel), Material 3 motion, atomic design systems, design-to-code workflows, Paging 3, or navigation. Activates Review Mode on GitHub PR URLs and review phrases ("review this PR", "what's wrong with this"). Auto-detects Compose projects on session_start. Backed by actual androidx/androidx and JetBrains/compose-multiplatform-core source receipts. See "## When this skill applies" in SKILL.md for the full trigger surface.

Overview

Publisheraldefy
Repositorycompose-skill
Skill namecompose-expert
Stars
596
Forks
39
Bundled files
33
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 33 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by aldefy on GitHub. Read the source before you install it.

Installation

Install the Compose Expert AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/aldefy/compose-skill/tree/master/skills/compose-expert
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/aldefy/compose-skill.git /tmp/compose-skill
mkdir -p .claude/skills
cp -r /tmp/compose-skill/skills/compose-expert .claude/skills/compose-expert
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Compose Expert in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Compose Expert on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Compose Expert is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Installation notice: This skill is now distributed as a plugin. If you copied files into ~/.claude/skills/ manually, you are on an unmaintained install path and will not receive updates. Migrate via:

/plugin marketplace add aldefy/compose-skill
/plugin install compose-expert

See MIGRATION.md for Codex and Copilot CLI instructions. This banner will remain through v2.x and escalate in v3.0.

When this skill applies

The frontmatter description: is intentionally short to satisfy Codex / Copilot CLI's 1024-character cap on that field (see issue #12). The full trigger surface lives here so it stays available to Claude after the skill loads.

Compose API mentions

@Composable, remember, mutableStateOf, derivedStateOf, rememberSaveable, LaunchedEffect, DisposableEffect, SideEffect, rememberCoroutineScope, Scaffold, NavHost, NavController, MaterialTheme, ColorScheme, Typography, LazyColumn, LazyRow, LazyVerticalGrid, HorizontalPager, Modifier, Modifier.Node, recomposition, CompositionLocal, Style, styleable, MutableStyleState, Material 3 Expressive, M3 Expressive, MaterialExpressiveTheme, ButtonGroup, SplitButton, FloatingActionButtonMenu, LoadingIndicator, HorizontalFloatingToolbar, NavDisplay, NavKey, rememberNavBackStack, NavigableListDetailPaneScaffold.

Compose Multiplatform / KMP

Compose Multiplatform, CMP, KMP, commonMain, expect, actual, ComposeUIViewController, Window composable, UIKitView, ComposeViewport, Res.drawable, Res.string, SkikoMain.

Android TV

tv-material, tv-foundation, Carousel, NavigationDrawer (TV), D-pad, focus indication, FocusRequester on TV, 10-foot UI, living room, tv compose, Android TV, Google TV, leanback migration.

Paging 3

PagingSource, Pager, PagingConfig, PagingData, LazyPagingItems, collectAsLazyPagingItems, RemoteMediator, LoadState, asSnapshot, TestPager, cachedIn.

Design system / design-to-code

atomic design, atoms, molecules, organisms, templates, design tokens, design system, component library, reusable component, Figma to Compose, design to compose, build this UI, implement this design, spec to code, redline.

Casual phrasing

"my compose screen is slow", "my recomposition is broken", "how do I pass data between screens", "how do I build a TV app", "Android UI", "Kotlin UI", "compose layout", "compose navigation", "compose animation", "compose styles", "desktop compose", "iOS compose", "compose web".

Review Mode triggers

Any GitHub PR URL matching github.com/.*/pull/\d+, or phrases: "review this PR", "review this diff", "review this code", "check this code", "check this diff", "what's wrong with this". On match, follow references/pr-review.md exclusively.

Session start

Auto-detect Compose projects on session_start — see references/auto-init.md.

Quick Routing

Use this table first. Match the user's signal to one reference file and read it before answering. source-code/ files are supporting evidence — load a references/*.md file first, then cite source-code/ for implementation proof when receipts matter.

State, recomposition, side effects

  • remember, rememberSaveable, mutableStateOf vs mutableIntStateOf, state hoisting → references/state-management.md
  • derivedStateOf, snapshotFlow, StateFlow in UI, recomposition scope boundaries → references/state-management.md (secondary: references/performance.md)
  • LaunchedEffect, SideEffect, DisposableEffect, rememberUpdatedState, rememberCoroutineScope → references/side-effects.md
  • Recomposition frequency, "my screen recomposes too often", stability, @Stable/@Immutable, Compose compiler metrics, baseline profiles, strong skipping → references/performance.md
  • CompositionLocal, ambient values, theming propagation, LocalContext misuse, custom locals → references/composition-locals.md

Animation and motion

  • animate*AsState, AnimatedVisibility, Crossfade, updateTransition, Animatable, rememberInfiniteTransition → references/animation.md
  • Shared element transitions, gesture-driven animation, Modifier.graphicsLayer, Canvas drawing, custom motion spec → references/animation.md (secondary: references/modifiers.md for graphicsLayer)
  • M3 motion tokens, MotionTokens, MotionScheme, animation duration tokens, M3 easing curves → references/material3-motion.md

Layout, lists, modifiers

  • LazyColumn, LazyRow, LazyVerticalGrid, LazyHorizontalGrid, key/itemKey, contentType, LazyListState, scroll state, sticky headers → references/lists-scrolling.md
  • HorizontalPager, VerticalPager, PagerState → references/lists-scrolling.md
  • Modifier chain ordering, custom layout, Layout, SubcomposeLayout, layout modifier, draw modifier, Painter, Modifier.Node → references/modifiers.md

Navigation

  • NavHost, NavController, back stack, deep links, type-safe @Serializable routes, navigation graph, nested graphs → references/navigation.md
  • Migrating from Nav 2 to Nav 3, NavDisplay, NavKey, rememberNavBackStack, NavBackStackEntry changes → references/navigation-migration.md
  • Choosing between Nav 2 and Nav 3, type-safe navigation decision, KMP navigation → references/navigation-migration.md (secondary: references/navigation.md)
  • Advanced Nav 3: returning results between destinations, auth-gated/conditional navigation, animated/shared-element transitions in NavDisplay, adaptive list-detail (NavigableListDetailPaneScaffold), multiple/per-tab back stacks → references/navigation-migration.md

Paging

  • PagingSource, PagingData, Pager setup, PagingConfig, pagingDataFlow, invalidation → references/paging.md
  • LazyPagingItems, collectAsLazyPagingItems, itemKey, itemContentType, LoadState in UI, retry/refresh → references/paging.md
  • RemoteMediator, offline-first paging, network + cache paging, loadState.source.refresh → references/paging-offline.md
  • Paging with MVI, dual-flow pattern, paging tests (asSnapshot, TestPager), CombinedLoadStates, paging anti-patterns → references/paging-mvi-testing.md

Theming and design systems

  • MaterialTheme, ColorScheme, Typography, Shapes, dynamic color, M3 tokens, color roles → references/theming-material3.md
  • Material 3 Expressive, MaterialExpressiveTheme, ButtonGroup, SplitButton, FloatingActionButtonMenu, LoadingIndicator (wavy), HorizontalFloatingToolbar, @ExperimentalMaterial3ExpressiveApi → references/theming-material3.md (motion: references/material3-motion.md)
  • Atom, molecule, organism, template, component hierarchy, design system structure, reusable components, design tokens → references/atomic-design.md
  • Figma → Compose, screenshot → composable, design token translation, spec-to-code, redline interpretation → references/design-to-compose.md
  • Style {}, MutableStyleState, Modifier.styleable() (experimental Foundation Styles API) → references/styles-experimental.md

Multiplatform and platform-specific

  • iOS/Desktop/Web CMP targets, expect/actual, commonMain, Res.drawable, Res.string, platform-specific composables → references/multiplatform.md
  • ComposeUIViewController (iOS), Window/Tray/MenuBar (Desktop), UIKitView, ComposeViewport (Web), platform interop → references/platform-specifics.md
  • TV Compose, androidx.tv, D-pad focus, FocusRequester on TV, Carousel, NavigationDrawer (TV), 10-foot UI, leanback migration → references/tv-compose.md

Interop and accessibility

  • Compose inside XML, AndroidView, ComposeView, AbstractComposeView, hybrid migration, View → Compose interop → references/view-composition.md
  • Accessibility, Modifier.semantics, TalkBack, touch target size, contentDescription, WCAG, traversal order → references/accessibility.md

Production, review, migration

  • Production crash, ANR, Compose stack trace, remember leak, zero-size DrawScope, duplicate keys, stale derivedStateOf → references/production-crash-playbook.md
  • PR review, code review, "review this diff", composable anti-patterns, smell detection, GitHub PR URL → references/pr-review.md
  • Deprecated Compose API, "removed in version X", migration from old API, replaced symbols → references/deprecated-patterns.md
  • Experimental opt-in, @OptIn, @ExperimentalFoundationStyleApi, unstable API usage → references/styles-experimental.md (for Styles); for general guidance, the relevant topic file
  • Session start, project detection, auto-init → references/auto-init.md

Source-code receipts (cite, don't route to)

  • "Show me the actual implementation", "where in androidx is this", internal Compose mechanics → load the topic reference first, then cite the matching references/source-code/*.md file:
    • Runtime/state internals (Composer, Snapshot, Effects, Remember) → references/source-code/runtime-source.md
    • UI/layout/measurement/draw internals → references/source-code/ui-source.md
    • Foundation (LazyList, Pager, Clickable, Scrollable, BasicTextField) → references/source-code/foundation-source.md
    • Material3 components → references/source-code/material3-source.md
    • Navigation Compose internals → references/source-code/navigation-source.md
    • CMP entry points (Window, ComposeUIViewController, UIKitView, ComposeViewport) → references/source-code/cmp-source.md

Compose Expert Skill

Non-opinionated, practical guidance for writing correct, performant Compose code — across Android, Desktop, iOS, and Web. Covers Jetpack Compose and Compose Multiplatform. Backed by analysis of actual source code from androidx/androidx and JetBrains/compose-multiplatform-core.

Review Mode

Activate when the input contains a GitHub PR URL (github.com/.+/pull/\d+) or explicit review phrases: "review this PR", "review this diff", "check this code", "what's wrong with this".

When Review Mode activates:

  1. Do not follow the generation workflow below
  2. Read references/pr-review.md and follow its workflow exclusively
  3. Output a structured local review report — do not post to GitHub

Workflow

When helping with Compose code, follow this checklist:

1. Understand the request

  • What Compose layer is involved? (Runtime, UI, Foundation, Material3, Navigation)
  • Is this a state problem, layout problem, performance problem, or architecture question?
  • Is this Android-only or Compose Multiplatform (CMP)?

2. Analyze the design (if visual reference provided)

  • If the user shares a Figma frame, screenshot, or design spec, consult references/design-to-compose.md
  • Decompose the design into a composable tree using the 5-step methodology
  • Map design tokens to MaterialTheme, spacing to CompositionLocals
  • Identify animation needs and consult references/animation.md for recipes

3. Consult the right reference

Read the relevant reference file(s) from references/ before answering:

TopicReference File
@State, remember, mutableStateOf, state hoisting, derivedStateOf, snapshotFlowreferences/state-management.md
Structuring composables, slots, extraction, previewreferences/view-composition.md — for design system structure, also see references/atomic-design.md
Modifier ordering, custom modifiers, Modifier.Nodereferences/modifiers.md
LaunchedEffect, DisposableEffect, SideEffect, rememberCoroutineScopereferences/side-effects.md
CompositionLocal, LocalContext, LocalDensity, custom localsreferences/composition-locals.md
LazyColumn, LazyRow, LazyGrid, Pager, keys, content typesreferences/lists-scrolling.md
NavHost, type-safe routes, deep links, shared element transitionsreferences/navigation.md
animate*AsState, AnimatedVisibility, Crossfade, transitionsreferences/animation.md — for M3 token selection, also see references/material3-motion.md
MaterialTheme, ColorScheme, dynamic color, Typography, shapesreferences/theming-material3.md — for motion, see references/material3-motion.md; for design tokens, see references/atomic-design.md
Recomposition skipping, stability, baseline profiles, benchmarkingreferences/performance.md
Semantics, content descriptions, traversal order, testingreferences/accessibility.md
Removed/replaced APIs, migration paths from older Compose versionsreferences/deprecated-patterns.md
Styles API (experimental): Style {}, MutableStyleState, Modifier.styleable()references/styles-experimental.md
Figma/screenshot decomposition, design tokens, spacing, modifier orderingreferences/design-to-compose.md
Production crash patterns, defensive coding, state/performance rulesreferences/production-crash-playbook.md
Compose Multiplatform, expect/actual, resources (Res.*), migrationreferences/multiplatform.md
Desktop (Window, Tray, MenuBar), iOS (UIKitView), Web (ComposeViewport)references/platform-specifics.md
TV Compose: Surface, Carousel, NavigationDrawer, Cards, focus, D-padreferences/tv-compose.md
M3 motion tokens, MotionTokens, MotionScheme, animation duration, easingreferences/material3-motion.md
PR URL, code review, "review this PR", "what's wrong with this"references/pr-review.md
Session start, project detectionreferences/auto-init.md
Atomic design, design system, reusable component, component library, design tokensreferences/atomic-design.md

4. Apply and verify

  • Write code that follows the patterns in the reference
  • Flag any anti-patterns you see in the user's existing code
  • Suggest the minimal correct solution — don't over-engineer

4a. Component building mode

When the request involves building a component (composable that renders UI):

  • Consult references/atomic-design.md
  • Classify the component level (atom, molecule, organism, template)
  • Apply the "Ask" prompt from Section 5 before scaffolding code
  • Ensure the component satisfies the atom contract (modifier, slots, tokens, defaults)

5. Cite the source

When referencing Compose internals, point to the exact source file:

// See: compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt

Key Principles

  1. Compose thinks in three phases: Composition → Layout → Drawing. State reads in each phase only trigger work for that phase and later ones.

  2. Recomposition is frequent and cheap — but only if you help the compiler skip unchanged scopes. Use stable types, avoid allocations in composable bodies.

  3. Modifier order matters. Modifier.padding(16.dp).background(Color.Red) is visually different from Modifier.background(Color.Red).padding(16.dp).

  4. State should live as low as possible and be hoisted only as high as needed. Don't put everything in a ViewModel just because you can.

  5. Side effects exist to bridge Compose's declarative world with imperative APIs. Use the right one for the job — misusing them causes bugs that are hard to trace.

  6. Compose Multiplatform shares the runtime but not the platform. UI code in commonMain is portable. Platform-specific APIs (LocalContext, BackHandler, Window) require expect/actual or conditional source sets.

Source Code Receipts

Beyond the guidance docs, this skill bundles the actual source code from androidx/androidx (branch: androidx-main) and JetBrains/compose-multiplatform-core (branch: jb-main). When you need to verify how something works internally, or the user asks "show me the actual implementation", read the raw source from references/source-code/:

ModuleSource ReferenceKey Files Inside
Runtimereferences/source-code/runtime-source.mdComposer.kt, Recomposer.kt, State.kt, Effects.kt, CompositionLocal.kt, Remember.kt, SlotTable.kt, Snapshot.kt
UIreferences/source-code/ui-source.mdAndroidCompositionLocals.android.kt, Modifier.kt, Layout.kt, LayoutNode.kt, ModifierNodeElement.kt, DrawModifier.kt
Foundationreferences/source-code/foundation-source.mdLazyList.kt, LazyGrid.kt, BasicTextField.kt, Clickable.kt, Scrollable.kt, Pager.kt
Material3references/source-code/material3-source.mdMaterialTheme.kt, ColorScheme.kt, Button.kt, Scaffold.kt, TextField.kt, NavigationBar.kt
Navigationreferences/source-code/navigation-source.mdNavHost.kt, ComposeNavigator.kt, NavGraphBuilder.kt, DialogNavigator.kt
CMPreferences/source-code/cmp-source.mdWindow.kt, ComposeUIViewController.kt, UIKitView.kt, ComposeViewport.kt, ResourceReader.kt

Two-layer approach

  1. Start with guidance — read the topic-specific reference (e.g., references/state-management.md)
  2. Go deeper with source — if the user wants receipts or you need to verify, read from references/source-code/

Source tree map

androidx/androidx (branch: androidx-main)
├── compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/
├── compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/
├── compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/
├── compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/
├── compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/
├── compose/navigation/navigation-compose/src/commonMain/kotlin/androidx/navigation/compose/
├── tv/tv-material/src/main/java/androidx/tv/material3/
└── tv/tv-foundation/src/main/java/androidx/tv/foundation/

compose-multiplatform-core (branch: jb-main)
├── compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/
├── compose/ui/ui/src/iosMain/kotlin/androidx/compose/ui/window/
├── compose/ui/ui/src/webMain/kotlin/androidx/compose/ui/window/
├── compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/
└── compose/foundation/foundation/src/skikoMain/kotlin/androidx/compose/foundation/

compose-multiplatform (resources library)
└── components/resources/library/src/commonMain/

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Compose Expert AI skill do?

Compose and Compose Multiplatform expert for UI development across Android, Desktop, iOS, and Web. Use whenever the user mentions Compose APIs (@Composable, remember, LaunchedEffect, NavHost, MaterialTheme, LazyColumn, Modifier, recomposition), Compose Multiplatform (commonMain, expect/actual, Res.*, ComposeUIViewController, UIKitView, ComposeViewport), Android TV (tv-material, D-pad, focus, Carousel), Material 3 motion, atomic design systems, design-to-code workflows, Paging 3, or navigation. Activates Review Mode on GitHub PR URLs and review phrases ("review this PR", "what's wrong with t...

Why use Compose Expert on TypingMind?

Because you install it once and use it with any model. Compose Expert is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Compose Expert in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/aldefy/compose-skill/tree/master/skills/compose-expert. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Compose Expert?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Compose Expert?

As many as you like. As long as a model supports skills, you can use Compose Expert with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Compose Expert AI skill free?

It is published on GitHub by aldefy. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇