UI
SkillDev toolsReusable Compose UI kit on the KMP Starter Template — starter/ui/components, starter/ui/utils, and starter/ui/layouts. Know what's already built before writing new UI.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the UI skill
What this skill tells your AI
The instructions your AI receives, as published by devatrii/kmp-starter-template in .agents/skills/kmp-starter/ui/SKILL.md and read by ahel’s review.
Reuse Starter's Compose UI kit. Do not write a component, layout, or Compose helper if Starter already ships one.
Modules (all in starter/):
| Module | Accessor | Contents |
|---|---|---|
starter/ui/components | projects.starter.ui.components | Reusable composables |
starter/ui/utils | projects.starter.ui.utils | Compose utilities, ViewModels, popups, theme, modifiers |
starter/ui/layouts | projects.starter.ui.layouts | Full-screen layout composables |
Dep chain: layouts → components → ui/utils → starter/utils. Adding a higher module pulls the lower ones in automatically. Non-UI helpers live in starter/utils (see the utils skill).
components — reusable composables
- Buttons:
KmpButton,LoadingButton,GenerateAiButton,GoogleSignInButtonUI,TimerCloseButton,PillActionButton,PillActionsContainer. - Cupertino (iOS style):
CupertinoSwitch,CupertinoSection,CupertinoSectionRow(value / switch / stepper / dropdown overloads),CupertinoDropdownMenu,CupertinoDropdownItem,CupertinoLazyColumn. - Text:
HeaderText,SheetDialogHeader,ErrorText,FiltrationLabel,DividerWithText,TextWithButton. - Text fields:
FormTextField,FormPasswordTextField,SearchTextField(useFieldStatefromstarter/utils). - Other:
StepsProgress,SelectableListCard,CleanForm,CoilImage,Base64Image,FiltrationChip,FadeIn,Floating,SimpleNavigationTopBar,SimpleMediumNavigationTopBar,LockOverlay,ScrollableColumn.
ui/utils — Compose utilities
- MVI:
MviViewModel<State, Action, Event>(always use, never plainViewModel),Flow.collectInViewModel,Channel.sendInViewModel,MutableSharedFlow.emitInViewModel. - Side effects:
ObserveAsEvents,LaunchOnce,LaunchOnStart. - StateFlow:
MutableStateFlow.reset,SavedStateHandle.getMutableStateFlow/getMutableStateFlow2. - Popups:
BaseDialog,DeleteDialog,DatePickerDialog,BaseBottomSheet,SheetState.hideProperly. - Theme:
Dimens,LocalThemeMode,ThemeMode.getIcon,isAppInDarkTheme,getDynamicColorScheme. - Color:
Color.fromHex,Color.toHexString,complimentaryColor,brightness,ColorFilter.lightDarkTint. - Modifiers:
Modifier.grayScale(),Modifier.customOverscroll(...). - Image:
ImageBitmap.toByteArray/toBase64String/resize/compress/fromByteArray/fromBase64String,ImageVector.asVectorPainter/toImageBitmap/toByteArray/toBase64String,decodeBase64ToImageBitmap. - Cross-platform services:
rememberKeyboardInfo,isKeyboardVisible,getScreenSize/ScreenSizeValue,rememberScreenController,rememberChromeTabs,rememberStarterStoreManager,rememberUpdateLauncher/AppUpdateProvider,rememberStarterFileManager. - DataStore (Compose):
remember*DataStore/rememberMutable*DataStore. - Preview:
@AllDevicePreviews. - Focus:
FocusManager.moveDown/Up/Next/Previous/....
layouts — full-screen states
LoadingLayout— centered spinner, theme-aware dimmed background.EmptyStateWithAction— hero icon + title + description + CTA button.MeasurableLayout— internal; exposesLocalScreenSize(Offset).
Rules
- Search before building. For every new composable/Compose helper, check the three modules first — reuse or extend, never duplicate.
- Components belong in
starter/ui/componentsonly if reusable; app-specific UI stays in your feature's presentation layer. - Use
Dimensfor spacing/size, never hardcodeddp. - Use
FieldState+FormTextFieldfor form fields. - Use
MviViewModel,ObserveAsEvents, and the utils above — don't hand-roll equivalents. - Color parsing →
Color.fromHex(theparseHexColor*functions are deprecated).
Reference
- Docs (live site):
https://starter.atherio.dev/ui/components/,https://starter.atherio.dev/ui/utils/,https://starter.atherio.dev/ui/layouts/ - Source:
starter/ui/components/,starter/ui/utils/,starter/ui/layouts/(package rootscom.kmpstarter.ui_components.*,com.kmpstarter.ui_utils.*,com.kmpstarter.ui_layouts.*)
Signals
- GitHub stars
- 162
- Forks
- 28
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
kmp-starter-ui- Source
- github.com/devatrii/kmp-starter-template