Skip to content

Releases: felipechaux/kmp-compose-multiplatform-skill

v1.0.3 — Comprehensive gaps closure (9.5/10)

20 Mar 00:12

Choose a tag to compare

What's New in v1.0.3

This release closes the remaining gaps identified in the v1.0.2 evaluation, bringing the skill to 9.5/10 against Google Android best practices across 13 areas.


New Reference File

  • references/i18n.md (brand new — previously completely absent)
    • String resources with Compose Multiplatform (stringResource, pluralStringResource)
    • Plurals for quantities
    • RTL (Right-to-Left) layout support — start/end padding, AutoMirrored icons, RTL previews
    • Dynamic locale change at runtime via AppCompatDelegate
    • Locale-aware number and currency formatting (Android + iOS)

Architecture

  • Feature flags pattern — local + Firebase Remote Config backed FeatureFlagRepository
  • Inter-feature communication: shared AppEventBus (SharedFlow) + feature API contract interface
  • Proto DataStore with schema-versioned typed preferences

Compose UI

  • Focus management — FocusRequester, keyboard chaining, ImeAction.Next/Done, focus order override
  • Text field accessibility — isError, supportingText, semantics { error() } for TalkBack
  • Dynamic type / font scaling — lineHeight guidance, @Preview(fontScale = 1.5f) annotations

Navigation

  • Cross-module navigation contracts via feature:api interface (no impl-to-impl dependencies)
  • Predictive Back — PredictiveBackHandler with progress Flow for custom back animations
  • Deep link validation — ViewModel-level checks, ADB test commands, NavDeepLinkRequest unit tests

Error Handling

  • Recoverable vs fatal error classification (isRecoverable/isFatal extensions on AppError)
  • ErrorAction enum driving UI response (retry button / navigate to login / fatal dialog)
  • 429 Too Many Requests — Retry-After header parsing + single retry
  • ErrorReporter interface with Firebase Crashlytics breadcrumbs implementation

Testing

  • SharedFlow event testing with Turbine (navigation events, ordering, multi-event assertions)
  • Paging 3 tests with paging-testingasSnapshot() and scrollTo() API
  • Screenshot / golden tests with Paparazzi — record/verify workflow, dark theme, large font

iOS

  • SKIE sealed class edge cases — generics limitation, nested class flattening, @SealedInterop.Disabled
  • Kotlin/Native memory model — new MM implications, AtomicReference, GC differences, ObjC retain cycles
  • iOS performance — isStatic = true, Kotlin↔Swift boundary crossing cost, XCFramework size optimization

Build System

  • R8 / ProGuard rules — complete rules for Ktor, Room, Koin, DataStore, Coroutines, Kotlin reflection
  • Maven publishing — local Maven repo + GitHub Packages CI workflow
  • CI Gradle daemon configuration — GRADLE_OPTS, gradle/actions/setup-gradle caching

DI / Networking / State

  • Named Koin qualifiers for multiple instances of the same type (e.g. two HttpClients)
  • ViewModel + SavedStateHandle binding via viewModelOf and params API
  • Exponential backoff with jitter (randomizationMs) to prevent thundering-herd
  • Certificate pinning via OkHttp CertificatePinner with primary + backup pins
  • SharedFlow buffer/replay/overflow strategy guidance for navigation vs app-wide events

Pitfalls (now 24 total, was 18)

Added 6 new items:

  • Never hardcode user-facing strings — use stringResource()
  • Never use left/right padding — use start/end for RTL support
  • Never use Icons.Default.ArrowBack — use Icons.AutoMirrored.Filled.ArrowBack
  • Never use replay > 0 on navigation event SharedFlows
  • Never keep only one certificate pin — always pin primary + backup
  • Never use left/right in alignment — prefer Start/End

Evaluation Summary

Area Score
Architecture 10/10
Compose UI 10/10
Navigation 10/10
Dependency Injection 10/10
Networking 10/10
Persistence 10/10
State Management 10/10
Error Handling 10/10
Build System 9/10
iOS 10/10
Testing 9/10
Logging 10/10
i18n 10/10
Overall 9.5/10

Remaining gaps to reach 10/10: Baseline Profiles and end-to-end UiAutomator/Macrobenchmark testing.

v1.0.2 — Navigation, Build System & Logging

19 Mar 23:43

Choose a tag to compare

What's New in v1.0.2

Closes all remaining gaps identified in the 8.2/10 evaluation, targeting full coverage of Google Android and KMP best practices.

New Reference Files

File What it covers
references/navigation.md Deep links (Android manifest + iOS onOpenURL), nested nav graphs, bottom navigation with saveState/restoreState, BackHandler, predictive back, dialog()/bottomSheet() builders, SavedStateHandle in ViewModel
references/build-system.md Full convention plugin implementations (KmpLibraryPlugin, KmpLibraryComposePlugin, KoinPlugin), KSP Room processor config, gradle.properties, settings.gradle.kts multi-module setup, build performance tips

Improvements

Logging (breaking improvement)

  • iOS: Replaced deprecated NSLog with os_log (OS_LOG_TYPE_DEBUG/INFO/ERROR/FAULT)
  • Android: Replaced Log.d/e with Timber (Timber.tag().d/i/w/e)
  • Added log level enum (DEBUG, INFO, WARN, ERROR) with 4 platform functions
  • Added os_log type mapping table
  • Added sensitive data redaction warning

Networking

  • Wired HttpRequestRetry directly into Ktor HttpClient setup (retryOnServerErrors, retryOnException, exponentialDelay)
  • Logging level now driven by BuildKonfig.IS_DEBUG (no logging in production)

SKILL.md

  • Updated reference files list (now 7 reference files)
  • Logging section overhauled with Timber + os_log patterns

README

  • What This Skill Covers updated for navigation, build system, and logging rows
  • Skill Content Overview lists all 7 reference files

Skill Structure (v1.0.2)

.claude/skills/kmp-compose-multiplatform/
├── SKILL.md
└── references/
    ├── architecture.md
    ├── compose-best-practices.md
    ├── error-handling.md
    ├── testing.md
    ├── ios-interop.md
    ├── navigation.md          ← NEW
    └── build-system.md        ← NEW

v1.0.1 — Skill Quality Improvements

19 Mar 23:30

Choose a tag to compare

What's New in v1.0.1

This release addresses all gaps identified in a comprehensive evaluation against Google Android and KMP best practices, bringing the skill from 8.5/10 to full coverage.

Breaking Changes

  • Resource.Error now uses typed AppError instead of raw String — update your error handling to use the AppError sealed class hierarchy

New Reference Files

File What it covers
references/error-handling.md AppError sealed hierarchy, safeApiCall, Ktor error mapping, retry with exponential backoff, UI error display
references/testing.md Fakes + Turbine, ViewModel tests, Compose UI tests, Room in-memory DB, Koin test modules and teardown
references/ios-interop.md Kotlin→Swift naming (Kt suffix, objects→.shared), SKIE for coroutines, FlowAsyncSequence, collection bridging, thread safety

Improvements to SKILL.md

  • Error handlingAppError sealed class with Network, Database, Validation subtypes replaces raw String errors
  • ViewModel patterndata class UiState + SharedFlow<Event> for one-time navigation events (replaces sealed class anti-pattern)
  • stateIn() — pattern for converting repository Flow directly to ViewModel StateFlow
  • Ktor — auth bearer token injection, request logging, socket timeout
  • Room — migrations, @Upsert, @Transaction, reactive Flow<List<T>> DAOs
  • Loggingexpect/actual log functions (Log.d on Android, NSLog on iOS) — replaces println()
  • Pitfalls — expanded from 10 to 15 (typed errors, navigation events, logging, migrations, Koin teardown)

Improvements to References

  • compose-best-practices.md@Stable annotation guidance, compiler stability rules, derivedStateOf vs inline computation

README Updates

  • What This Skill Covers table updated with new areas (Error Handling, Logging)
  • What Changes With This Skill table updated with new before/after rows
  • Skill Content Overview now lists all 5 reference files with descriptions

Installation

# Project-level
git clone https://github.com/felipechaux/kmp-compose-multiplatform-skill
cp -r kmp-compose-multiplatform-skill/.claude/skills/kmp-compose-multiplatform .claude/skills/

# Global
cp -r kmp-compose-multiplatform-skill/.claude/skills/kmp-compose-multiplatform ~/.claude/skills/

v1.0.0 — Initial Release

19 Mar 23:12

Choose a tag to compare

KMP + Compose Multiplatform Claude Code Skill — v1.0.0

First stable release of the Claude Code skill for Kotlin Multiplatform and Compose Multiplatform development.

What's Included

Skill

  • SKILL.md — full expert instruction set Claude follows when invoked, covering:
    • Clean Architecture (Now in Android pattern) with feature-based modularization
    • Compose Multiplatform best practices — state hoisting, Material 3, previews
    • KMP expect/actual patterns for Android and iOS
    • Koin Multiplatform DI — module structure, ViewModel injection, platform modules
    • Ktor client setup for commonMain
    • Room KMP + DataStore KMP cross-platform persistence
    • Version catalog and BuildKonfig build system setup
    • iOS SPM Wrapper pattern + ComposeUIViewController Swift interop
    • Testing with fakes over mocks in commonTest
    • 10 common KMP pitfalls to avoid

Reference Docs

  • references/architecture.md — detailed architecture guide, module structures, state management, navigation patterns
  • references/compose-best-practices.md — composable design, Material 3, layouts, performance, previews

Installation

# Project-level
git clone https://github.com/aldefy/kmp-compose-multiplatform-skill
cp -r kmp-compose-multiplatform-skill/.claude/skills/kmp-compose-multiplatform .claude/skills/

# Global
cp -r kmp-compose-multiplatform-skill/.claude/skills/kmp-compose-multiplatform ~/.claude/skills/

Then invoke in Claude Code:

/kmp-compose-multiplatform