{"id":51203397,"url":"https://github.com/Meet-Miyani/compose-skill","last_synced_at":"2026-07-16T11:01:16.577Z","repository":{"id":344389807,"uuid":"1181618430","full_name":"Meet-Miyani/compose-skill","owner":"Meet-Miyani","description":"AI agent skill for Jetpack Compose \u0026 Compose Multiplatform (KMP/CMP). MVI architecture, Navigation 3, Koin/Hilt, Ktor, Room, DataStore, Paging 3, Coil, coroutines/Flow, animations, performance, accessibility, testing, and cross-platform patterns. Works with Codex, Cursor, Claude Code.","archived":false,"fork":false,"pushed_at":"2026-03-29T05:05:29.000Z","size":702,"stargazers_count":117,"open_issues_count":0,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-02T01:52:59.234Z","etag":null,"topics":["agent-skills","ai","android","claude-code","cmp","codex","compose-multiplatform","cursor","datastore","hilt","jetpack-compose","kmp","koin","kotlin-multiplatform","ktor","llm","mvi","mvi-architecture","navigation","room"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Meet-Miyani.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-14T11:47:18.000Z","updated_at":"2026-04-01T08:48:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Meet-Miyani/compose-skill","commit_stats":null,"previous_names":["meet-miyani/compose-skill"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Meet-Miyani/compose-skill","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meet-Miyani%2Fcompose-skill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meet-Miyani%2Fcompose-skill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meet-Miyani%2Fcompose-skill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meet-Miyani%2Fcompose-skill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Meet-Miyani","download_url":"https://codeload.github.com/Meet-Miyani/compose-skill/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meet-Miyani%2Fcompose-skill/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35541271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-16T02:00:06.687Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-skills","ai","android","claude-code","cmp","codex","compose-multiplatform","cursor","datastore","hilt","jetpack-compose","kmp","koin","kotlin-multiplatform","ktor","llm","mvi","mvi-architecture","navigation","room"],"created_at":"2026-06-28T02:00:29.740Z","updated_at":"2026-07-16T11:01:16.571Z","avatar_url":"https://github.com/Meet-Miyani.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/compose-multiplatform-icon.svg\" width=\"100\" alt=\"Compose Multiplatform icon\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003ecompose-skill\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eMake your AI coding tool actually understand Compose.\u003c/strong\u003e\u003cbr\u003e\n  A comprehensive agent skill for Jetpack Compose and Compose Multiplatform (KMP/CMP).\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#installation\"\u003e\u003cimg src=\"https://img.shields.io/badge/setup-5_min-brightgreen?style=flat-square\" alt=\"setup 5 min\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://developer.android.com/develop/ui/compose\"\u003e\u003cimg src=\"https://img.shields.io/badge/Jetpack_Compose-1.8+-4285F4?style=flat-square\u0026logo=jetpackcompose\u0026logoColor=white\" alt=\"Jetpack Compose 1.8+\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kotlinlang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Kotlin-2.0+-7F52FF?style=flat-square\u0026logo=kotlin\u0026logoColor=white\" alt=\"Kotlin 2.0+\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.jetbrains.com/compose-multiplatform/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Compose_Multiplatform-1.7+-000000?style=flat-square\u0026logo=jetbrains\u0026logoColor=white\" alt=\"Compose Multiplatform 1.7+\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://agentskills.io/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Agent_Skills-standard-8B5CF6?style=flat-square\" alt=\"Agent Skills standard\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## What This Skill Does\n\nThis is an **AI agent skill** — not a library, not documentation. Install it once, and your AI coding agent (Codex, Cursor, Claude Code) gains production-grade knowledge of the entire Compose app development lifecycle: architecture, UI, state, navigation, networking, persistence, performance, accessibility, cross-platform, build configuration, distribution, and code review.\n\nThe skill covers **Android**, **iOS**, **Desktop**, and **Web** targets with the same architectural principles.\n\n## What's Covered\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\u003cstrong\u003e🏗️ Architecture \u0026 State\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\u003cstrong\u003e🎨 Compose UI\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\u003cstrong\u003e🌐 Data \u0026 Networking\u003c/strong\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd valign=\"top\"\u003e\n      MVI with Event, State, Effect\u003cbr\u003e\n      Unidirectional data flow\u003cbr\u003e\n      ViewModel patterns\u003cbr\u003e\n      State modeling (4 buckets)\u003cbr\u003e\n      Clean code \u0026 anti-patterns\n    \u003c/td\u003e\n    \u003ctd valign=\"top\"\u003e\n      Three-phase model \u0026 side effects\u003cbr\u003e\n      Coil 3 image loading\u003cbr\u003e\n      Lists, grids, pagers \u0026 keying\u003cbr\u003e\n      Shared element animations\u003cbr\u003e\n      Material 3 theming \u0026 adaptive\n    \u003c/td\u003e\n    \u003ctd valign=\"top\"\u003e\n      Ktor HTTP client \u0026 auth flows\u003cbr\u003e\n      DTO-to-domain mapping\u003cbr\u003e\n      Room Database (KMP)\u003cbr\u003e\n      DataStore (Preferences \u0026 Typed)\u003cbr\u003e\n      Paging 3 with MVI\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003ctd colspan=\"3\"\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cstrong\u003e🧭 Navigation \u0026 DI\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cstrong\u003e⚡ Performance \u0026 Quality\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cstrong\u003e📱 Cross-Platform\u003c/strong\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd valign=\"top\"\u003e\n      Navigation 3 \u0026amp; Nav 2\u003cbr\u003e\n      Tabs, scenes, deep links\u003cbr\u003e\n      Koin (CMP) \u0026 Hilt (Android)\u003cbr\u003e\n      ViewModel scoping\n    \u003c/td\u003e\n    \u003ctd valign=\"top\"\u003e\n      Recomposition minimization\u003cbr\u003e\n      Compiler Metrics \u0026 profiles\u003cbr\u003e\n      Turbine testing\u003cbr\u003e\n      Macrobenchmark \u0026 UI tests\u003cbr\u003e\n      Accessibility \u0026 WCAG\n    \u003c/td\u003e\n    \u003ctd valign=\"top\"\u003e\n      KMP \u003ccode\u003ecommonMain\u003c/code\u003e sharing\u003cbr\u003e\n      \u003ccode\u003eexpect/actual\u003c/code\u003e patterns\u003cbr\u003e\n      iOS interop (SKIE)\u003cbr\u003e\n      CMP resources \u0026 localization\u003cbr\u003e\n      Gradle/AGP 9+, CI/CD, signing\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Without vs With compose-skill\n\n| Concern | Without | With |\n|:--------|:--------|:-----|\n| **State management** | Scattered `mutableStateOf` in composables | Single `StateFlow\u003cState\u003e` owned by ViewModel |\n| **Business logic** | Mixed into UI layer | Isolated in ViewModel's `onEvent()` handler |\n| **One-shot actions** | Boolean flags in state | `Channel\u003cEffect\u003e` for navigation, snackbar |\n| **Recomposition** | Frequent, hard to diagnose | Minimized via state shape and read boundaries |\n| **Navigation** | Ad-hoc calls from composables | Semantic effects, route layer executes |\n| **Networking** | Inconsistent error handling | Ktor + `Result`/`ApiResult` wrapper, DTO mappers |\n| **Persistence** | Raw SharedPreferences | DataStore + Room with MVI integration |\n| **Accessibility** | Missing or incorrect semantics | `contentDescription`, touch targets, WCAG contrast |\n| **Cross-platform** | Android-only or inconsistent | `commonMain` with `expect/actual` for platform APIs |\n| **Build config** | Hardcoded versions | Version catalog, AGP 9+ patterns, conventions |\n| **Testing** | Manual UI testing | ViewModel event→state→effect via Turbine |\n| **Code review** | Inconsistent patterns | Anti-pattern detection with documented fixes |\n\n## Installation\n\nPick your agent and run **one command**. The clone target becomes the skill folder — agents detect `SKILL.md` at the root automatically.\n\n\u003e **Only three things matter for the skill to work:** `SKILL.md`, `agents/`, and `references/`. Everything else in this repo (README, LICENSE, scripts, assets, .github) is for documentation, validation, and CI — the agent never reads them. If you prefer a minimal install, you only need those three.\n\n\u003e **Why is `SKILL.md` at the root?** All three agents (Codex, Cursor, Claude Code) look for `SKILL.md` at the **top level** of the skill directory. This repo is structured so that cloning it directly into the skill path gives you a ready-to-use skill — no moving files or extra nesting required.\n\n\u003e Skill installation paths may change as agents evolve. The locations below are accurate at the time of writing — for the latest instructions, refer to each agent's official docs or ask your agent *\"How do I add a skill?\"*\n\u003e - [Codex Skills docs](https://developers.openai.com/codex/skills/) · [Cursor Skills docs](https://www.cursor.com/docs/context/skills) · [Claude Code Skills docs](https://code.claude.com/docs/en/slash-commands)\n\n### Quick Install (copy-paste)\n\n| Client | User-global | Per-repo |\n|:-------|:------------|:---------|\n| **Codex** | `~/.codex/skills/compose-skill` | `.codex/skills/compose-skill` |\n| **Cursor** | `~/.cursor/skills/compose-skill` | `.cursor/skills/compose-skill` |\n| **Claude Code** | `~/.claude/skills/compose-skill` | `.claude/skills/compose-skill` |\n| **Other agents** | Upload `SKILL.md`, `agents/`, and `references/` as project knowledge | — |\n\n```bash\n# Replace \u003cpath\u003e with the install location from the table above\ngit clone https://github.com/Meet-Miyani/compose-skill.git \u003cpath\u003e\n\n# Examples:\ngit clone https://github.com/Meet-Miyani/compose-skill.git ~/.cursor/skills/compose-skill\ngit clone https://github.com/Meet-Miyani/compose-skill.git .codex/skills/compose-skill\n```\n\n## Common Mistakes\n\n| Problem | Fix |\n|:--------|:----|\n| Folder named `compose-skill-main` | Rename to `compose-skill` (GitHub ZIP downloads add `-main`) |\n| `SKILL.md` not at root of skill folder | Don't nest inside another directory — clone directly into the skill path |\n| Skill not detected after install | Restart the agent / IDE |\n\n## Verify Activation\n\n| Client | How to verify |\n|:-------|:--------------|\n| **Codex** | Run `/skills` — `compose-skill` appears in the list |\n| **Cursor** | **Settings → Rules** — skill appears under *Agent Decides* |\n| **Claude Code** | Run `/skills` or ask *\"What skills are available?\"* |\n\n## Usage\n\nOnce installed, the skill activates **automatically** when your prompt matches its triggers (`@Composable`, `StateFlow`, `ViewModel`, `KMP`, `Ktor`, `recomposition`, `DataStore`, etc.). You can also invoke it **explicitly** — the syntax varies by client:\n\n| Client | Explicit invocation | Automatic |\n|:-------|:-------------------|:----------|\n| **Codex CLI** | `$compose-skill` in your prompt | Yes |\n| **Codex IDE extension** | `$compose-skill` in chat | Yes |\n| **Codex App** | `/compose-skill` in chat | Yes |\n| **Cursor** | `/compose-skill` in Agent chat | Yes |\n| **Claude Code** | `/compose-skill` in chat | Yes |\n\n### Invocation Examples\n\n**Codex CLI / IDE extension** — dollar-sign prefix:\n```text\n$compose-skill Refactor this screen to MVI with proper state modeling.\n```\n\n**Codex App / Cursor / Claude Code** — slash prefix:\n```text\n/compose-skill How do I set up Paging 3 with MVI in a KMP project?\n```\n\n## Skill Structure\n\n```text\ncompose-skill/\n│\n│   ## Required (the skill itself) ─────────────────────\n├── SKILL.md                            # Skill definition — agent reads this\n├── agents/\n│   └── openai.yaml                     # Codex UI metadata\n└── references/                         # 37 deep-dive reference files\n    │                                   #   (loaded on-demand by SKILL.md)\n    ├── architecture.md\n    ├── coroutines-flow.md\n    ├── compose-essentials.md\n    ├── material-design.md\n    ├── image-loading.md\n    ├── lists-grids.md\n    ├── paging.md\n    ├── paging-offline.md\n    ├── paging-mvi-testing.md\n    ├── navigation.md\n    ├── navigation-3.md\n    ├── navigation-2.md\n    ├── navigation-3-di.md\n    ├── navigation-2-di.md\n    ├── navigation-migration.md\n    ├── performance.md\n    ├── animations.md\n    ├── ui-ux.md\n    ├── testing.md\n    ├── room-database.md\n    ├── datastore.md\n    ├── networking-ktor.md\n    ├── networking-ktor-auth.md\n    ├── networking-ktor-testing.md\n    ├── networking-ktor-architecture.md\n    ├── dependency-injection.md\n    ├── koin.md\n    ├── hilt.md\n    ├── cross-platform.md\n    ├── resources.md\n    ├── ios-swift-interop.md\n    ├── accessibility.md\n    ├── clean-code.md\n    ├── anti-patterns.md\n    ├── gradle-build.md\n    └── ci-cd-distribution.md\n│\n│   ## Optional (repo extras) ──────────────────────────\n├── README.md                           # This file (not read by agents)\n├── LICENSE                             # MIT License\n├── assets/\n│   └── compose-multiplatform-icon.svg  # Logo for README\n└── scripts/\n    └── validate.sh                     # Skill scanner / validation tool\n```\n\n## Reference Guide\n\nThe `references/` directory contains 37 deep-dive files that the skill loads on-demand. Here's what each one covers in detail:\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eKotlin Foundations\u003c/strong\u003e\u003c/summary\u003e\n\n| Reference | What's Inside |\n|:----------|:-------------|\n| **coroutines-flow.md** | StateFlow vs SharedFlow vs Channel decision table, Flow operators (`flatMapLatest`, `combine`, `debounce`, `catch`), Dispatchers (IO/Default/Main), structured concurrency (`viewModelScope`, `supervisorScope`), exception handling, `CancellationException`, `stateIn`/`shareIn`, backpressure (`buffer`/`conflate`/`collectLatest`), `callbackFlow`, Mutex/Semaphore, testing with Turbine |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eArchitecture\u003c/strong\u003e\u003c/summary\u003e\n\n| Reference | What's Inside |\n|:----------|:-------------|\n| **architecture.md** | ViewModel/event-handling pipeline, state modeling, Channel vs SharedFlow for effects, domain layer rules, inter-feature communication (event bus, feature API contracts), module dependency rules, GOOD/BAD code examples |\n| **clean-code.md** | Avoiding overengineering, file organization, naming conventions, disciplined vs bloated MVI comparison |\n| **anti-patterns.md** | Cross-cutting anti-pattern quick-reference table with \"why it hurts\" and \"better replacement\" for each, plus routing index to domain-specific anti-patterns in other reference files |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCompose APIs\u003c/strong\u003e\u003c/summary\u003e\n\n| Reference | What's Inside |\n|:----------|:-------------|\n| **material-design.md** | M3 theme setup (dynamic color, dark/light, color roles), typography/shapes, component decisions (Scaffold, TopAppBar, NavigationBar/Rail/Suite, BottomSheet, Snackbar, Dialog), adaptive layouts (window size classes, canonical layouts), M2→M3 migration |\n| **image-loading.md** | Coil 3 setup for Compose/CMP, `AsyncImage`/`rememberAsyncImagePainter`/`SubcomposeAsyncImage` decision guide, placeholder/error/fallback/crossfade, memory/disk/network cache policy, transformations vs `Modifier.clip`, SVG (`coil-svg`), `Res.getUri` resource loading |\n| **compose-essentials.md** | Three phases model, state primitives, side effects (`LaunchedEffect`, `DisposableEffect`, `rememberUpdatedState`), modifier ordering, `graphicsLayer`, slot pattern, `CompositionLocal`, `collectAsStateWithLifecycle` |\n| **lists-grids.md** | LazyColumn/LazyRow, keys, `contentType`, grids, pager, scroll state, nested scrolling, list anti-patterns |\n| **paging.md** | PagingSource, Pager + ViewModel setup (PagingData as separate Flow, never in UiState), `cachedIn`, filter/search with `flatMapLatest`, `LazyPagingItems` (all lazy layouts), LoadState handling, PagingData transformations, `PagingSource.invalidate()` |\n| **paging-offline.md** | RemoteMediator offline-first with Room, `initialize()` (`LAUNCH_INITIAL_REFRESH` vs `SKIP_INITIAL_REFRESH`), remote keys, Pager wiring |\n| **paging-mvi-testing.md** | MVI dual-flow pattern (PagingData separate from UiState), route collection, PagingSource unit tests, `asSnapshot`, `TestPager`, anti-patterns table |\n| **navigation.md** | Shared navigation concepts: Nav 2 vs Nav 3 decision guide, MVI navigation rules (both versions), anti-patterns table, routing to version-specific files |\n| **navigation-3.md** | Nav 3 full reference: route definition, back stack persistence, `NavDisplay` full API, top-level tabs (`NavigationSuiteScaffold`), ViewModel scoping with entry decorators, Scenes (dialog, bottom sheet, list-detail, Material Adaptive), animations, back stack manipulation, deep links, CMP polymorphic serialization |\n| **navigation-2.md** | Nav 2 full reference: `NavHost`/`NavController`, type-safe routes (2.8+), string routes, top-level tabs (`NavigationBar` + `currentBackStackEntryAsState` + `saveState`/`restoreState`), deep links (`NavDeepLink`), navigate with results (`SavedStateHandle`), nested graphs, animations (`enterTransition`/`exitTransition`), conditional navigation (auth guards), predictive back |\n| **navigation-3-di.md** | Nav 3 + DI wiring: Hilt `hiltViewModel` in entry blocks + `@AssistedInject` + multibinding entry providers, Koin `navigation\u003cT\u003e` DSL + `koinEntryProvider()`, modularization api/impl split, entry-scoped VMs via decorators |\n| **navigation-2-di.md** | Nav 2 + DI wiring: Hilt `hiltViewModel` in composable destinations + graph-scoped VMs via `getBackStackEntry` + `SavedStateHandle`, Koin `koinViewModel` + `koinNavViewModel` + `sharedKoinViewModel` for graph-scoped sharing |\n| **navigation-migration.md** | Nav 2 to Nav 3 migration: conceptual shift table, step-by-step migration (routes → NavKey, controller → backStack, NavHost → NavDisplay, graph VMs → entry decorators, deep links, tabs), incremental strategy, coexistence |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePerformance \u0026 Quality\u003c/strong\u003e\u003c/summary\u003e\n\n| Reference | What's Inside |\n|:----------|:-------------|\n| **performance.md** | Three phases, primitive state specializations, `TextFieldState`, Strong Skipping Mode, stability config, Compose Compiler Metrics, baseline profiles, API decision table, 20 recomposition rules, diagnostic checklist |\n| **animations.md** | Complete animation API reference: decision tree, `AnimationSpec` (spring/tween/keyframes), `animate*AsState`, `Animatable` (sequential, concurrent, gesture-driven), `updateTransition`, `AnimatedVisibility`, `AnimatedContent`, shared element transitions with navigation and Coil, swipe-to-dismiss, Canvas/custom drawing, `graphicsLayer`, performance optimization |\n| **ui-ux.md** | Loading states, skeleton/shimmer, preserving content during refresh, inline validation, perceived performance |\n| **accessibility.md** | `contentDescription` rules, `Modifier.semantics` (role, stateDescription, heading), `mergeDescendants`, `clearAndSetSemantics`, touch targets (48dp), WCAG color contrast, custom interactive elements, custom accessibility actions |\n| **testing.md** | Turbine for StateFlow testing, ViewModel event→state→effect testing, validation/UI tests, Macrobenchmark, lean test matrix by app scale |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eData \u0026 Persistence\u003c/strong\u003e\u003c/summary\u003e\n\n| Reference | What's Inside |\n|:----------|:-------------|\n| **datastore.md** | KMP + Android setup, Preferences DataStore keys/read/write, Typed DataStore with JSON serialization, singleton enforcement, corruption handling, SharedPreferences migration, MVI integration, DI wiring, testing, anti-patterns |\n| **room-database.md** | Entity design, performance-oriented DAOs, indexes, relationships (`@Embedded`/`@Relation`/`@Junction`), TypeConverters, transactions, migrations, MVI integration, anti-patterns |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eNetworking, DI \u0026 Cross-Platform\u003c/strong\u003e\u003c/summary\u003e\n\n| Reference | What's Inside |\n|:----------|:-------------|\n| **networking-ktor.md** | HttpClient configuration, platform engines, plugins (ContentNegotiation, Retry, Timeout, Logging, ContentEncoding), custom plugins (`createClientPlugin`), DTOs, mappers, API service (CRUD, multipart), repository pattern, proxy/SSL |\n| **networking-ktor-auth.md** | Bearer token auth with refresh, WebSockets (frames, serialization converter, session), SSE (Server-Sent Events) |\n| **networking-ktor-testing.md** | MockEngine setup (success, error, request assertions, multiple responses), engine injection, Koin/Hilt DI integration, testing anti-patterns |\n| **networking-ktor-architecture.md** | `Result` vs `ApiResult` decision, `safeRequest` wrapper, exception classification, plugin composition strategy, client factory design, response observation plugin, debug vs production, architecture anti-patterns |\n| **dependency-injection.md** | DI decision guide (Hilt vs Koin), shared concepts |\n| **koin.md** | Koin setup for CMP and Android, module organization, `koinViewModel`, `koinInject`, Koin + Nav 3 (`navigation\u003cT\u003e`, `koinEntryProvider`), scoped navigation, MVI ViewModel integration, testing |\n| **hilt.md** | Android-only Hilt setup, `@HiltViewModel`, `hiltViewModel()`, modules (`@Provides`/`@Binds`), scopes, Navigation Compose integration, MVI pattern with Hilt, testing |\n| **cross-platform.md** | `commonMain` vs platform placement, interfaces vs `expect/actual`, platform bridge patterns (interface+DI, expect/actual, typealias), lifecycle, state restoration, resources, accessibility |\n| **ios-swift-interop.md** | Kotlin→Swift naming, nullability/collection bridging, SKIE setup, suspend→async, Flow→AsyncSequence, sealed class mapping, SwiftUI/UIKit interop (`ComposeUIViewController`, `UIKitView`), iOS API design rules |\n| **resources.md** | Android `R` vs CMP `Res` comparison, `composeResources/` directory structure, Gradle setup, drawable/string/plural/font/raw-file APIs with code examples, qualifiers (language, theme, density), localization, generated resource maps, Android assets interop (`Res.getUri`), MVI integration |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eBuild, Distribution \u0026 CI/CD\u003c/strong\u003e\u003c/summary\u003e\n\n| Reference | What's Inside |\n|:----------|:-------------|\n| **gradle-build.md** | AGP 9+ project structure, version catalog (`[versions]`/`[libraries]`/`[plugins]`/`[bundles]`), bundle patterns, composite builds (`includeBuild` + `dependencySubstitution`), private Maven repos, `settings.gradle.kts`, `gradle.properties`, module-level build scripts, `compileSdk { version = release(N) }`, KSP/Room/Koin wiring, convention plugins guidance |\n| **ci-cd-distribution.md** | GitHub Actions workflows (Android APK, Desktop multi-OS DMG/MSI/DEB), desktop app module setup (`compose.desktop`), iOS Xcode framework integration, signing/notarization (Android/macOS/iOS), adding JVM desktop target to existing CMP project, Gradle task reference table |\n\n\u003c/details\u003e\n\n## Example Prompts\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eArchitecture \u0026 State\u003c/strong\u003e\u003c/summary\u003e\n\n```text\nRefactor this Compose screen to MVI.\nHow should I structure a KMP feature module with Compose UI and ViewModel?\nAudit this feature against the compose-skill and list anti-patterns first, then apply minimal fixes.\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eUI \u0026 Performance\u003c/strong\u003e\u003c/summary\u003e\n\n```text\nI have too much recomposition in this form screen. What should I change?\nOptimize recomposition in this screen and explain each state-shape change.\nAdd shared element transitions between my list and detail screens.\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eData \u0026 Networking\u003c/strong\u003e\u003c/summary\u003e\n\n```text\nSet up Ktor with bearer token auth and refresh for my KMP project.\nShould this be SharedFlow or Channel for one-off effects?\nHow do I use DataStore for user preferences in a KMP app?\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCross-Platform \u0026 Distribution\u003c/strong\u003e\u003c/summary\u003e\n\n```text\nHow do I expose this Kotlin StateFlow to Swift using SKIE?\nSet up GitHub Actions to build DMG, MSI, and DEB for my desktop app.\nAdd iOS target to my existing Compose Multiplatform project.\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAccessibility \u0026 Quality\u003c/strong\u003e\u003c/summary\u003e\n\n```text\nReview this screen for accessibility issues.\nHow do I make my custom interactive component accessible?\nSet up ViewModel tests with Turbine for this feature.\n```\n\u003c/details\u003e\n\n## Official Documentation\n\n| Resource | Link |\n|:---------|:-----|\n| Jetpack Compose | [developer.android.com/compose](https://developer.android.com/develop/ui/compose) |\n| Compose Multiplatform | [jetbrains.com/compose-multiplatform](https://www.jetbrains.com/compose-multiplatform/) |\n| Kotlin Coroutines | [kotlinlang.org/coroutines](https://kotlinlang.org/docs/coroutines-overview.html) |\n| StateFlow \u0026 SharedFlow | [kotlinlang.org/flow](https://kotlinlang.org/docs/flow.html#stateflow-and-sharedflow) |\n| ViewModel | [developer.android.com/viewmodel](https://developer.android.com/topic/libraries/architecture/viewmodel) |\n| Navigation 3 | [developer.android.com/navigation](https://developer.android.com/develop/ui/compose/navigation) |\n| Coil | [coil-kt.github.io/coil](https://coil-kt.github.io/coil/) |\n| Paging 3 | [developer.android.com/paging](https://developer.android.com/topic/libraries/architecture/paging/v3-overview) |\n| Room | [developer.android.com/room](https://developer.android.com/training/data-storage/room) |\n| DataStore | [developer.android.com/datastore](https://developer.android.com/topic/libraries/architecture/datastore) |\n| Ktor Client | [ktor.io/docs/client](https://ktor.io/docs/client.html) |\n| Koin | [insert-koin.io](https://insert-koin.io/docs/reference/koin-compose/compose/) |\n| Hilt | [developer.android.com/hilt](https://developer.android.com/training/dependency-injection/hilt-android) |\n| Agent Skills Standard | [agentskills.io](https://agentskills.io/) |\n\n## Contributing\n\nContributions are welcome! Whether it's fixing a typo, improving a reference doc, or adding coverage for a new Compose API — all help is appreciated.\n\n1. **Fork** the repository\n2. **Create a branch** for your change (`git checkout -b improve-navigation-docs`)\n3. **Make your changes** — keep reference files focused and under 500 lines where possible\n4. **Run the scanner** to verify everything passes:\n   ```bash\n   ./scripts/validate.sh\n   ```\n5. **Open a pull request** with a clear description of what changed and why\n\n### Guidelines\n\n- Follow the [agentskills.io specification](https://agentskills.io/specification) for any structural changes\n- Keep `SKILL.md` body under 500 lines — move detailed content to `references/`\n- Every reference file in `references/` should be linked from `SKILL.md`\n- Use code examples that compile and follow the skill's MVI conventions\n- Don't add dependencies — the skill is pure markdown and bash\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n---\n\n\u003cp align=\"center\"\u003e\n  Built for \u003ca href=\"https://developer.android.com/develop/ui/compose\"\u003eJetpack Compose\u003c/a\u003e and \u003ca href=\"https://www.jetbrains.com/compose-multiplatform/\"\u003eCompose Multiplatform\u003c/a\u003e.\u003cbr\u003e\n  Works with \u003ca href=\"https://developers.openai.com/codex\"\u003eCodex\u003c/a\u003e, \u003ca href=\"https://www.cursor.com\"\u003eCursor\u003c/a\u003e, \u003ca href=\"https://code.claude.com\"\u003eClaude Code\u003c/a\u003e, and any \u003ca href=\"https://agentskills.io/\"\u003eAgent Skills\u003c/a\u003e-compatible tool.\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMeet-Miyani%2Fcompose-skill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMeet-Miyani%2Fcompose-skill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMeet-Miyani%2Fcompose-skill/lists"}