UI

SkillDev tools

Reusable 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.

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/):

ModuleAccessorContents
starter/ui/componentsprojects.starter.ui.componentsReusable composables
starter/ui/utilsprojects.starter.ui.utilsCompose utilities, ViewModels, popups, theme, modifiers
starter/ui/layoutsprojects.starter.ui.layoutsFull-screen layout composables

Dep chain: layoutscomponentsui/utilsstarter/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 (use FieldState from starter/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 plain ViewModel), 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; exposes LocalScreenSize (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/components only if reusable; app-specific UI stays in your feature's presentation layer.
  • Use Dimens for spacing/size, never hardcoded dp.
  • Use FieldState + FormTextField for form fields.
  • Use MviViewModel, ObserveAsEvents, and the utils above — don't hand-roll equivalents.
  • Color parsing → Color.fromHex (the parseHexColor* 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 roots com.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
UI (kmp-starter-ui): Skill · ahel