{"adoption": {"forks": 97, "observed_at": "2026-08-28T04:03:34.562767+00:00", "stars": 1097}, "canonical_url": "https://ross.abutalabs.com/products/moko-mvvm", "card": {"archived": false, "artifact_type": "library", "description": "Model-View-ViewModel architecture components for mobile (android & ios) Kotlin Multiplatform development", "domain": ["mobile-development", "cross-platform", "web-development"], "enriched": true, "function": ["state-management", "ui-components"], "health_score": 20, "homepage": "https://moko.icerock.dev/", "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "stable", "member_repos": ["icerockdev/moko-mvvm"], "name": "icerockdev/moko-mvvm", "platform": ["jvm", "windows"], "pushed_at": "2024-04-18T12:22:17+00:00", "repo": "icerockdev/moko-mvvm", "stars": 1097, "tags": ["kotlin-multiplatform", "mvvm", "viewmodel", "livedata", "coroutines", "jetpack-compose", "swiftui", "databinding", "moko", "android", "ios", "macos", "linux"], "topics": ["android", "kotlin", "ios", "kotlin-native", "kotlin-multiplatform", "swift", "cocoapod", "mvvm", "databinding", "viewmodel", "livedata", "moko", "coroutines", "kotlin-multiplatform-mobile"], "urls": [], "use_cases": ["share viewmodel logic between android and ios in kotlin multiplatform", "lifecycle-aware mvvm architecture for kotlin multiplatform mobile apps", "reactive livedata or flow data holders in common kotlin code", "dispatch ui events from viewmodel to view on both platforms", "use viewmodels with jetpack compose multiplatform or swiftui", "interop with androidx lifecycle viewmodel on android"], "what_it_is": "moko-mvvm is a Kotlin Multiplatform library providing Model-View-ViewModel architecture components for mobile applications targeting Android and iOS. It offers lifecycle-aware ViewModels, LiveData/Flow reactive data holders, and an EventsDispatcher, with integration support for DataBinding, ViewBinding, Jetpack Compose, and SwiftUI.", "when_to_avoid": ["building a single-platform Android app where plain AndroidX ViewModel and LiveData suffice", "using a different multiplatform architecture approach like MVI (e.g., MVIKotlin, Decompose)", "your project does not use Kotlin Multiplatform at all"], "when_to_choose": ["building a Kotlin Multiplatform Mobile app that needs shared presentation-layer architecture", "you want ViewModel and LiveData/Flow semantics in common code with Android Architecture Components interop", "you use the moko ecosystem (moko-resources, moko-fields, etc.) and want consistent MVVM support"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/moko-mvvm", "repo": "icerockdev/moko-mvvm", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "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:03:34.562767+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:34.562767+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:46:34.866374+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3cf02b2dcfc044195f8dca40d6705832f489cbdcfd150768f84fce84f26bb410", "fetched_at": "2026-08-28T04:03:34.562767+00:00", "kind": "readme", "missing": false, "url": "https://github.com/icerockdev/moko-mvvm"}, {"content_hash": "e977b73e3e0d28cd6eb9b96d65c8b6289a90cf3b43330623029b64e5b429cbcd", "fetched_at": "2026-08-29T12:49:39.795820+00:00", "kind": "homepage", "missing": false, "url": "https://moko.icerock.dev/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2562, "days_push": 867, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}