Store Reviews & Updates

SkillDev tools

Store reviews and in-app updates on the KMP Starter Template — StarterStoreManager (askForReview, checkAppUpdate), rememberStarterStoreManager, and AppUpdateProvider.

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 Store Reviews & Updates skill

What this skill tells your AI

The instructions your AI receives, as published by devatrii/kmp-starter-template in .agents/skills/kmp-starter/starter-features/store-reviews-updates/SKILL.md and read by ahel’s review.

Request store reviews and check for app updates via StarterStoreManager. Lives in the UI utils store package (starter/ui/utils/.../store/), exposed as a Compose expect/actual.

Where things live

PiecePath
StarterStoreManager (expect class)starter/ui/utils/src/commonMain/.../store/StarterStoreManager.kt
rememberStarterStoreManager()same file
AppUpdateProvider / rememberUpdateLauncherstarter/ui/utils/src/commonMain/.../store/InAppUpdate.kt
Platform implsStarterStoreManager.android.kt / .ios.kt

Request a review

Prompt after key actions (e.g. onboarding completion):

@Composable
fun Onboarding(viewModel: OnboardingViewModel) {
    val storeManager = rememberStarterStoreManager()

    LaunchedEffect(state.isCompleted) {
        if (state.isCompleted) storeManager.askForReview()
    }
}
  • Android: askForReview() may throw if the review dialog is unavailable.
  • iOS: uses the native review API.

Check for updates (Android only)

@Composable
fun ManualUpdateCheck(force: Boolean) {
    val storeManager = rememberStarterStoreManager()
    val updateLauncher = rememberUpdateLauncher()

    LaunchedEffect(force) {
        storeManager.checkAppUpdate(
            launcher = updateLauncher,
            force = force,
            onUpdateUnAvailable = { /* no update */ },
            onUpdateAvailable = { /* update available */ },
            onUpdated = { /* updated */ },
            onUpdateFailure = { /* failed */ },
        )
    }
}

checkAppUpdate() is Android-only (iOS has no in-app update API). Prefer AppUpdateProvider over manual checks.

Automatic updates — AppUpdateProvider

Wrap the app so updates are checked automatically:

@Composable
fun MyApp() {
    AppUpdateProvider(force = true) {
        StarterNavigation(AppScreens.Splash)
    }
}

AppUpdateProvider calls checkAppUpdate() internally on Android and skips iOS. force = true blocks usage until the minimum version is installed.

Rules

  • Use askForReview() after onboarding or key actions (not randomly).
  • Avoid manual checkAppUpdate(); use AppUpdateProvider.
  • No new update/review subsystem.

Reference

  • Docs: https://starter.atherio.dev/fundamentals/09-store-reviews-and-updates/
  • Source: starter/ui/utils/src/commonMain/.../store/*

Signals

GitHub stars
162
Forks
28
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
kmp-starter-feature-store-reviews-updates
Source
github.com/devatrii/kmp-starter-template