cmp-dev-clientlisted
Install: claude install-skill kvdm-co-pilot/create-cmp
# cmp-dev-client — the desktop dev loop for a stamped CMP app
Every app stamped by `create-cmp` (unless `--no-dev-client`) ships a pre-wired `jvm("desktop")`
target inside `composeApp`: the whole `commonMain` UI — screens, ViewModels, navigation, theme,
Koin DI — in a live, clickable, phone-sized JVM window, with **Compose Hot Reload** attached.
This is the daily-driver loop; the Android emulator / iOS simulator are for platform
verification, not for iterating on UI.
## 1. The run loop
From the generated project root:
```bash
# Hot reload + auto-reload on save (recommended):
./gradlew :composeApp:hotRunDesktop --auto
# Hot reload, explicit mode (trigger with `./gradlew reload` or the IDE's Reload UI button):
./gradlew :composeApp:hotRunDesktop
# Plain run — no hot reload, no JetBrains Runtime needed, any JDK 17+:
./gradlew :composeApp:run
```
Loop: keep the window open → edit a composable in `commonMain` → save → the window updates in
place. No reinstall, no restart, state largely preserved.
Notes you should relay when relevant:
- The task is `hotRunDesktop` because the target is named `desktop` (`hotRunJvm` is the
default-name variant you'll see in JetBrains docs).
- Hot reload runs the app on the **JetBrains Runtime**. The scaffold pre-wires the
`foojay-resolver-convention` settings plugin, so Gradle auto-downloads a JBR on first
`hotRunDesktop` if none is installed — a one-time download; don't let the user think it hangs.
- Structural changes (new `expect`/`