What problem does it solve? Storing simple user preferences (theme, language, onboarding flags) consistently across Android, iOS, and Desktop in Kotlin Multiplatform projects is error-prone: keys get duplicated as loose strings, IOExceptions leak to the UI, and sensitive data risks being stored unencrypted. This Skill defines a clean architecture for Preferences DataStore inside infrastructure/persistence with centralized keys, per-platform path resolution, and a typed Repository. ## Core Features & Use Cases - Cross-platform DataStore setup: Creates a single DataStore<Preferences> via PreferenceDataStoreFactory.createWithPath, with producePath() implemented per platform (Android filesDir, iOS NSDocumentDirectory, Desktop app data folder). - Typed Repository wrapper: Exposes domain-typed Flows and suspend setters (e.g., isOnboardingCompleted: Flow<Boolean>) with .catch { emit(emptyPreferences()) } so read failures fall back to defaults instead of crashing the UI. - Decision guidance: Clearly delimits when to use DataStore Preferences versus Room (relational data) versus secure storage (tokens, credentials), which is out of scope. - Use Case: You need to persist the user's onboarding-completed flag and last-used filter in a Compose Multiplatform app; this Skill gives you the key definitions, factory, Koin registration, and Repository implementation ready to adapt. ## Quick Start Ask the AI to implement a SettingsRepository using Jetpack DataStore Preferences in your Kotlin Multiplatform project following this Skill's architecture.