{"adoption": {"forks": 81, "observed_at": "2026-08-28T04:06:30.204189+00:00", "stars": 2247}, "canonical_url": "https://ross.abutalabs.com/products/multiplatform-settings", "card": {"archived": false, "artifact_type": "library", "description": "A Kotlin Multiplatform library for saving simple key-value data", "domain": ["cross-platform", "mobile-development", "developer-tools"], "enriched": true, "function": ["sdk", "developer-tools"], "health_score": 54, "homepage": null, "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "stable", "member_repos": ["russhwolf/multiplatform-settings"], "name": "russhwolf/multiplatform-settings", "platform": ["windows", "jvm", "wasm", "cross-platform"], "pushed_at": "2025-09-07T16:58:51+00:00", "repo": "russhwolf/multiplatform-settings", "stars": 2247, "tags": ["kotlin-multiplatform", "key-value-storage", "preferences", "settings", "persistence", "android", "ios", "macos"], "topics": ["kotlin-multiplatform", "kotlin", "kotlin-library", "kotlin-android", "kotlin-native", "kotlin-ios", "kotlin-js", "kotlin-jvm", "kotlin-multiplatform-library", "kotlin-wasm"], "urls": [], "use_cases": ["persist user settings in a Kotlin Multiplatform app", "save key-value preferences from shared Kotlin code", "store app configuration across iOS and Android", "wrap NSUserDefaults and SharedPreferences behind one API", "securely store small values using the Apple Keychain", "observe changes to stored settings reactively"], "what_it_is": "A Kotlin Multiplatform library providing a common API for persisting simple key-value data across platforms like Android, iOS, JVM, JS, and Windows. It wraps platform-specific storage backends such as NSUserDefaults, Keychain, and Java Preferences behind a unified Settings interface.", "when_to_avoid": ["you need to store large or complex structured data rather than small key-value pairs", "your project is single-platform and can use the native preferences API directly", "you need a full database with queries rather than simple settings"], "when_to_choose": ["you're building a Kotlin Multiplatform app and need shared persistence for simple key-value data", "you want one API over platform-specific preference stores like NSUserDefaults, SharedPreferences, or Windows registry", "you need optional secure storage via Apple Keychain or coroutine/serialization support"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/multiplatform-settings", "repo": "russhwolf/multiplatform-settings", "role": "main", "score": 41}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.204189+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:43:57.975352+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "942559ca4e34ea37eea226804985fd74d61d6033e5bf405532c8b19d06b1ab84", "fetched_at": "2026-08-28T04:06:30.204189+00:00", "kind": "readme", "missing": false, "url": "https://github.com/russhwolf/multiplatform-settings"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 40, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3039, "days_push": 360, "days_rel": 642, "gap_med": null, "n_releases_24m": 1}, "score": 41, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}