<Devsly/>
NotebookLM Watermark Remover
Remove the NotebookLM watermark from PDF slide exports — free, unlimited, and 100% in your browser.
View
NotebookLM Video Watermark Remover
Remove the NotebookLM watermark from every frame of your MP4 and auto-trim the end card — free and unlimited.
View
Gemini Watermark Remover
Remove the Gemini (Veo) sparkle watermark from every frame of your AI-generated MP4 — free and unlimited.
View
MCP https://devsly.io/mcp MCP Tools Best Skills API Docs

Keyboard Shortcuts

Navigation

Quick Search
⌘ / Ctrl + K
Toggle Dark Mode
⌘ / Ctrl + D
Close Dialogs
Esc

Tool Actions

Execute / Process
⌘ / Ctrl + Enter
Clear Input
⌘ / Ctrl + Shift + C
Copy Output
⌘ / Ctrl + Shift + X

Editor

Select All
⌘ / Ctrl + A
Undo
⌘ / Ctrl + Z
Redo
⌘ / Ctrl + Shift + Z

Updated 4mo ago

by skydoves

compose-performance-skills

⚡️ A curated library of Agent Skills focused on Jetpack Compose performance.

Works with
  • Claude

515 GitHub stars (515)

+6 in 20 days

Stars gained per day · daily snapshots since Sep 26
Stars gained per day, Sep 26 to Oct 16: +6 in total; the busiest day was Sep 29 with +1 stars.Sep 27: 0 starsSep 28: 0 starsSep 29: +1 starsSep 30: +1 starsOct 1: 0 starsOct 2: 0 starsOct 3: 0 starsOct 4: 0 starsOct 5: 0 starsOct 6: 0 starsOct 7: 0 starsOct 8: +1 starsOct 9: +1 starsOct 10: +1 starsOct 11: 0 starsOct 12: +1 starsOct 13: +1 starsOct 14: 0 starsOct 15: −1 starsOct 16: 0 stars
Stars gained between daily snapshots
PeriodNew stars
Sep 270
Sep 280
Sep 29+1
Sep 30+1
Oct 10
Oct 20
Oct 30
Oct 40
Oct 50
Oct 60
Oct 70
Oct 8+1
Oct 9+1
Oct 10+1
Oct 110
Oct 12+1
Oct 13+1
Oct 140
Oct 15−1
Oct 160
  • 26 skills (26 skills found in its SKILL.md files)
  • 19 forks (19 forks)
  • 4mo ago last update (Last updated 4mo ago)

Install

Skills CLI

npx skills add skydoves/compose-performance-skills

Asks which skills and agents to install. Just one: npx skills add skydoves/compose-performance-skills --skill auditing-compose-performance — add -g for every project.

Claude Code

git clone https://github.com/skydoves/compose-performance-skillscp -r "compose-performance-skills/audit/auditing-compose-performance" ~/.claude/skills/

Copies the auditing-compose-performance skill into ~/.claude/skills/ for every project (use .claude/skills/ for one project). Repeat for the other skills listed below.

Plugin

/plugin marketplace add skydoves/compose-performance-skills

Run inside Claude Code if the repository ships a plugin marketplace, then pick plugins from /plugin.

Skills can run code on your machine — read the SKILL.md first.

What it does

In the author's own words, from each skill's SKILL.md.

  • auditing-compose-performance

    Use this skill to run an end-to-end Jetpack Compose performance audit when the symptom is broad ("the app feels sluggish", "scroll is rough everywhere", "we're starting a perf sprint", "what should we fix first?"). Orchestrates the four-phase Measure → Diagnose → Fix → Verify loop by sequencing the 25 focused skills (release-mode setup, R8, Baseline Profiles, Compose Compiler reports, stability i…

    audit/auditing-compose-performance/SKILL.md on GitHub (opens in a new tab)
  • configuring-r8-for-compose

    Use this skill to configure R8 correctly for a Jetpack Compose application — full mode by default, `proguard-android-optimize.txt`, resource shrinking on, and minimal keep rules because Compose ships consumer ProGuard rules. Covers AGP 8.0+ R8 full mode default, R8's Compose-aware optimizations (lambda grouping, `sourceInformation()` stripping, composable arg constant-folding, `ComposerImpl` devi…

    build/configuring-r8-for-compose/SKILL.md on GitHub (opens in a new tab)
  • iterating-with-ai-and-mcp

    Use this skill to drive Compose HotSwan from an AI agent (Claude Code, Cursor, any MCP client) so the agent can edit a Kotlin file, trigger a hot reload, capture a device screenshot, evaluate the result against a design intent, and iterate without a human in the loop. Covers the seven HotSwan MCP tools (hotswan_get_status, hotswan_reload, hotswan_take_screenshot, hotswan_start_snapshot, hotswan_s…

    hot-reload/iterating-with-ai-and-mcp/SKILL.md on GitHub (opens in a new tab)
  • preserving-state-across-reloads

    Use this skill to keep Jetpack Compose state alive across HotSwan hot reloads by understanding the three escalating tiers Compose HotSwan uses (tier 1 targeted recomposition, tier 2 composition reset, tier 3 Activity.recreate) and choosing edits and state holders that stay inside tier 1 where scroll position, lazy items, dialog state, and per-composable remember values all survive. Explains which…

    hot-reload/preserving-state-across-reloads/SKILL.md on GitHub (opens in a new tab)
  • setting-up-compose-hotswan

    Use this skill to install and verify Compose HotSwan end to end so a developer goes from zero to working sub-second hot reload on a real device or emulator in one session. Covers the JetBrains IDE plugin install, the `com.github.skydoves.compose.hotswan.compiler` Gradle plugin wiring, the canonical `hotSwanCompiler { enabled = true; debugOnly = true }` DSL block, the HotSwan tool window flow, and…

    hot-reload/setting-up-compose-hotswan/SKILL.md on GitHub (opens in a new tab)
  • understanding-hot-reload-limits

    Use this skill to teach Claude exactly which Kotlin and Compose changes hot-reload under Compose HotSwan and which trigger a full incremental rebuild fallback. Root cause is Android Runtime (ART) class schema immutability; only method bodies are mutable at runtime, so any change to fields, signatures, constructors, interfaces, inline functions, or new resource ids forces a rebuild. Covers the sup…

    hot-reload/understanding-hot-reload-limits/SKILL.md on GitHub (opens in a new tab)
  • configuring-lazy-prefetch

    Use this skill to tune Jetpack Compose lazy-layout prefetch with LazyLayoutCacheWindow (Compose Foundation 1.9+, @ExperimentalFoundationApi) and pausable composition in prefetch (Compose Foundation 1.10+, default on). Covers configurable Dp-based ahead/behind cache windows plumbed through rememberLazyListState(cacheWindow = ...), NestedPrefetchScope for items containing inner lazy layouts (Horizo…

    lists/configuring-lazy-prefetch/SKILL.md on GitHub (opens in a new tab)
  • optimizing-lazy-layouts

    Use this skill to fix scroll jank, lost item state, and broken animateItem() animations in LazyColumn, LazyRow, LazyVerticalGrid, and LazyHorizontalGrid. Covers stable item keys, contentType for mixed-type feeds, Modifier.animateItem() requirements, hoisting modifier chains and painters out of the items lambda, and validating item composable stability. Use when the developer mentions LazyColumn j…

    lists/optimizing-lazy-layouts/SKILL.md on GitHub (opens in a new tab)
  • generating-baseline-profiles

    Use this skill to generate and measure Jetpack Compose Baseline Profiles end-to-end with the AGP 8.2+ Baseline Profile Generator module and the Macrobenchmark harness. Covers writing the `BaselineProfileRule` journey for cold startup plus first-scroll, generating `baseline-prof.txt`, verifying it shipped at `assets/dexopt/baseline.prof`, measuring with `MacrobenchmarkRule` under `CompilationMode.…

    measurement/generating-baseline-profiles/SKILL.md on GitHub (opens in a new tab)
  • testing-compose-in-release-mode

    Use this skill to ensure Jetpack Compose performance numbers reflect production reality by measuring against a release variant with R8 enabled, Live Literals disabled, and Compose Compiler reports read from the release output directory. Covers why debug builds lie (interpreted Compose runtime, JIT warmup, Live Literals constant-getters), how to set up a release-with-symbols measurement build, and…

    measurement/testing-compose-in-release-mode/SKILL.md on GitHub (opens in a new tab)
  • tracing-recompositions-at-runtime

    Use this skill to instrument a Jetpack Compose composable with `@TraceRecomposition` from `skydoves/compose-stability-analyzer` so per-recomposition diffs (which state or parameter changed, what value transition) print to logcat under the `Recomposition` tag. Works in release-with-debug-symbols builds where Android Studio Layout Inspector cannot reach, and feeds the IntelliJ / Android Studio plug…

    measurement/tracing-recompositions-at-runtime/SKILL.md on GitHub (opens in a new tab)
  • migrating-to-modifier-node

    Use this skill to author new custom Jetpack Compose modifiers and migrate legacy ones from Modifier.composed { } to Modifier.Node + ModifierNodeElement<T>. Covers the persistent-node lifecycle (onAttach, onDetach, onReset, coroutineScope), the specialized node interfaces (DrawModifierNode, LayoutModifierNode, SemanticsModifierNode, PointerInputModifierNode, CompositionLocalConsumerModifierNode, L…

    modifiers/migrating-to-modifier-node/SKILL.md on GitHub (opens in a new tab)
  • ordering-modifier-chains

    Use this skill to diagnose and fix Jetpack Compose Modifier ordering bugs — wrong paint region for background, wrong click area for clickable, wrong clipping for clip, wrong measurement for padding/size, surprising graphicsLayer scope. Covers the wrap-the-next-modifier mental model, the canonical pitfalls (padding vs background, clickable placement, clip before background, graphicsLayer placement…

    modifiers/ordering-modifier-chains/SKILL.md on GitHub (opens in a new tab)
  • avoiding-subcomposition-pitfalls

    Use this skill when a Compose tree uses SubcomposeLayout, BoxWithConstraints, or Scaffold and the developer reports extra measure passes, slow first frame, or layout passes running content composition repeatedly. Covers why SubcomposeLayout composes its slots during the measure phase, why BoxWithConstraints forces a subcomposition for every new Constraints value, why nesting Scaffold or BoxWithCo…

    recomposition/avoiding-subcomposition-pitfalls/SKILL.md on GitHub (opens in a new tab)
  • choosing-derivedstateof

    Use this skill to decide when Jetpack Compose derivedStateOf is the right tool and when it is pure overhead. Covers the "input frequency must exceed output frequency" rule, the mandatory remember { derivedStateOf { } } wrapper, the canonical pitfall of capturing non-state variables by initial value (and the remember(key) fix), and the snapshotFlow alternative for fire-and-forget side effects on d…

    recomposition/choosing-derivedstateof/SKILL.md on GitHub (opens in a new tab)
  • debugging-recompositions

    Use this skill to find which Jetpack Compose composables are recomposing and why, using Android Studio Layout Inspector recomposition counts and skip counts, the per-parameter Argument Change Reasons (Changed / Unchanged / Uncertain / Static / Unknown) introduced in Android Studio Hedgehog and later, and runtime `@TraceRecomposition` from `compose-stability-analyzer` for production-like measureme…

    recomposition/debugging-recompositions/SKILL.md on GitHub (opens in a new tab)
  • deferring-state-reads

    Use this skill to push frequently-changing Jetpack Compose state reads (scroll position, animation values, drag offsets) out of the Composition phase and down into Layout or Draw using lambda-based modifiers like Modifier.offset { }, Modifier.layout { }, Modifier.graphicsLayer { }, Modifier.drawBehind { }, and Modifier.drawWithCache { }. Covers the three-phase model (Composition, Layout, Draw), w…

    recomposition/deferring-state-reads/SKILL.md on GitHub (opens in a new tab)
  • using-strong-skipping-correctly

    Use this skill to reason about Jetpack Compose's Strong Skipping Mode — the default since Kotlin 2.0.20 — including what it changes about skippability, when it does and does not auto-`remember` lambdas, and which escape hatches (`@DontMemoize`, `@NonSkippableComposable`, `@NonRestartableComposable`, `@ReadOnlyComposable`) apply where. Covers verifying the mode is active, auditing lambda capture s…

    recomposition/using-strong-skipping-correctly/SKILL.md on GitHub (opens in a new tab)
  • collecting-flows-safely

    Use this skill to migrate Compose UI from `collectAsState()` to `collectAsStateWithLifecycle()`, hoist `Flow<T>` parameters out of composables, and apply `.conflate()` / `.distinctUntilChanged()` / `snapshotFlow` so background CPU and battery stop draining and chatty flows stop invalidating the UI per emission. Covers ViewModel `StateFlow`/`SharedFlow` consumers, sensor and location streams, and…

    side-effects/collecting-flows-safely/SKILL.md on GitHub (opens in a new tab)
  • using-efficient-effects

    Use this skill to choose the cheapest correct effect API in Jetpack Compose — `LaunchedEffect`, `DisposableEffect`, `SideEffect`, `rememberUpdatedState`, and skydoves/compose-effects' `RememberedEffect` and `ViewModelStoreScope`. Covers stale-callback bugs in long-lived `LaunchedEffect`, setup/teardown for non-coroutine subscribers, avoiding a coroutine scope just to react to a key change, and pe…

    side-effects/using-efficient-effects/SKILL.md on GitHub (opens in a new tab)
  • diagnosing-compose-stability

    Use this skill to diagnose Jetpack Compose stability problems by enabling and reading the Compose Compiler Reports (classes.txt, composables.txt, composables.csv, module.json). Covers the Gradle DSL, the release-only build requirement, and how to interpret per-class and per-composable stability annotations including stable, unstable, runtime, restartable, skippable, readonly, @static, and @dynami…

    stability/diagnosing-compose-stability/SKILL.md on GitHub (opens in a new tab)
  • enforcing-stability-in-ci

    Use this skill to set up a CI gate that fails the build when Compose stability silently regresses, using the `skydoves/compose-stability-analyzer` Gradle plugin (primary) or the `j-roskopf/ComposeGuard` plugin (alternative for non-Android multiplatform). Covers applying `com.github.skydoves.compose.stability.analyzer`, configuring the `composeStabilityAnalyzer { stabilityValidation { ... } }` DSL…

    stability/enforcing-stability-in-ci/SKILL.md on GitHub (opens in a new tab)
  • stabilizing-compose-types

    Use this skill to fix unstable Jetpack Compose types once a stability diagnosis has identified them. Covers the three-tier strategy — make the type truly stable with val plus immutable fields, mark with @Immutable or @Stable when the source is owned, and use stabilityConfigurationFiles for third-party or Java types. Explains the compiler-level difference between @Immutable and @Stable (static exp…

    stability/stabilizing-compose-types/SKILL.md on GitHub (opens in a new tab)
  • understanding-stability-inference

    Use this skill to explain why the Compose compiler classified a class or composable parameter as stable, runtime, unknown, or unstable. Covers the 12-phase inference algorithm, the five compiler-level stability types (Certain / Runtime / Unknown / Parameter / Combined), the generic bitmask encoding (Pair=0b11, ImmutableList=0b1), the Known Stable Constructs registry, and the runtime `$stable: Int…

    stability/understanding-stability-inference/SKILL.md on GitHub (opens in a new tab)
  • using-stability-analyzer-ide-plugin

    Use this skill to install and operate the `skydoves/compose-stability-analyzer` IntelliJ / Android Studio plugin so the developer sees Compose stability feedback live in the editor instead of waiting for a Gradle build. Covers installing the plugin from disk, configuring the `Settings → Tools → Compose Stability Analyzer` panel, reading the four gutter colors (green stable, red unstable, yellow r…

    stability/using-stability-analyzer-ide-plugin/SKILL.md on GitHub (opens in a new tab)
  • visualizing-recomposition-cascades

    Use this skill to drive the active investigation features of the `skydoves/compose-stability-analyzer` IntelliJ / Android Studio plugin: the static Recomposition Cascade visualizer that walks the call graph from a root `@Composable`, and the live Recomposition Heatmap that streams `D/Recomposition` events from a connected device's logcat into block inlays above each instrumented composable. Cover…

    stability/visualizing-recomposition-cascades/SKILL.md on GitHub (opens in a new tab)

Review before you install

A skill is a set of instructions and scripts your agent will follow, and it can run code on your machine. Read the SKILL.md and any scripts first — this listing is not a security review.