{"adoption": {"forks": 49, "observed_at": "2026-08-28T04:04:22.585320+00:00", "stars": 1325}, "canonical_url": "https://ross.abutalabs.com/products/kmp-nativecoroutines", "card": {"archived": false, "artifact_type": "library", "description": "Library to use Kotlin Coroutines from Swift code in KMP apps", "domain": ["mobile-development", "cross-platform", "developer-tools"], "enriched": true, "function": ["concurrency", "sdk", "developer-tools"], "health_score": 99, "homepage": null, "language": "Kotlin", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["rickclephas/KMP-NativeCoroutines"], "name": "rickclephas/KMP-NativeCoroutines", "platform": ["jvm", "cross-platform"], "pushed_at": "2026-08-18T07:18:02+00:00", "repo": "rickclephas/KMP-NativeCoroutines", "stars": 1325, "tags": ["kotlin-multiplatform", "kmm", "coroutines", "swift-interop", "combine", "async-await", "flows", "cancellation-support", "ios", "macos", "swift", "mobile"], "topics": ["ios", "kotlin", "swift", "kotlin-coroutines", "kotlin-multiplatform", "combine", "kotlin-multiplatform-mobile", "kmp", "kmm", "macos"], "urls": [], "use_cases": ["call Kotlin suspend functions from Swift with cancellation support", "consume Kotlin Flows in Swift as AsyncSequence, Combine publishers, or RxSwift observables", "share business logic between iOS and Android using KMP with coroutines", "fix missing generics on Kotlin Flow when exposed to Swift", "use async/await in Swift with Kotlin Multiplatform shared code"], "what_it_is": "A library that enables using Kotlin Coroutines (suspend functions and Flows) from Swift code in Kotlin Multiplatform apps. It adds proper cancellation support and preserves generic Flow types, which are lost in the default Objective-C interoperability layer.", "when_to_avoid": ["your project does not use Kotlin Multiplatform", "you rely on Swift export interop and do not need this bridge", "you target platforms outside the supported Apple OSes (iOS, macOS, tvOS, watchOS)"], "when_to_choose": ["you are building a Kotlin Multiplatform Mobile app with an iOS/Swift frontend", "you need cancellation of in-flight Kotlin suspend function calls from Swift", "you want typed Kotlin Flows in Swift instead of untyped ObjC interfaces", "you need to support older iOS versions via the RxSwift implementation"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/kmp-nativecoroutines", "repo": "rickclephas/KMP-NativeCoroutines", "role": "main", "score": 92}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "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:04:22.585320+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:22.585320+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:46:35.701363+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb12fa2cca5e338521edc12742af549955a4113c82e80e925cea54df96795e25", "fetched_at": "2026-08-28T04:04:22.585320+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rickclephas/KMP-NativeCoroutines"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 81}, "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": 1914, "days_push": 15, "days_rel": 49, "gap_med": 34.0, "n_releases_24m": 19}, "score": 92, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}