{"adoption": {"forks": 159, "observed_at": "2026-08-28T04:05:37.905333+00:00", "stars": 1799}, "canonical_url": "https://ross.abutalabs.com/products/combineext", "card": {"archived": false, "artifact_type": "library", "description": "CombineExt provides a collection of operators, publishers and utilities for Combine, that are not provided by Apple themselves, but are common in other Reactive Frameworks and standards.", "domain": ["developer-tools", "cross-platform", "apple-ecosystem"], "enriched": true, "function": ["middleware", "developer-tools"], "health_score": 75, "homepage": "https://combine.community", "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["CombineCommunity/CombineExt"], "name": "CombineCommunity/CombineExt", "platform": [], "pushed_at": "2026-01-20T19:38:21+00:00", "repo": "CombineCommunity/CombineExt", "stars": 1799, "tags": ["combine", "reactive-programming", "rxswift-inspired", "operators", "publishers", "swift-package-manager", "ios", "macos", "swift"], "topics": ["swift", "combine-framework", "reactive-programming", "reactive-streams"], "urls": [], "use_cases": ["add withLatestFrom and flatMapLatest operators to Combine", "create relay types like CurrentValueRelay in Combine", "replay published values with share(replay:) or ReplaySubject", "merge and zip collections of publishers in Combine", "materialize Combine failures as values for error handling", "batch or partition publisher output in Swift"], "what_it_is": "CombineExt is a Swift library providing a collection of operators, publishers, subjects, and utilities for Apple's Combine framework that are not provided natively but are common in other reactive frameworks like RxSwift. All additions respect Combine's publisher contract, including backpressure.", "when_to_avoid": ["you use RxSwift or another full reactive framework instead of Combine", "you target platforms below iOS 13 / macOS 10.15 where Combine is unavailable", "you need only the operators Apple already provides"], "when_to_choose": ["you use Apple's Combine framework and miss operators from RxSwift or ReactiveX", "you need relays or replay subjects that Combine lacks", "you want lightweight, MIT-licensed reactive extensions via Swift Package Manager"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/combineext", "repo": "CombineCommunity/CombineExt", "role": "main", "score": 60}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "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:05:37.905333+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:37.905333+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:22:16.020099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "55b80a330c4ffd83ccdfc51d832f6e7278a8f94641521f9e647f70771a2fc4d3", "fetched_at": "2026-08-28T04:05:37.905333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/CombineCommunity/CombineExt"}, {"content_hash": "776c7a41db156efef004f1455af08bc3050e934a6a7aa73b2be227e97f38f09f", "fetched_at": "2026-08-29T11:01:04.899317+00:00", "kind": "homepage", "missing": false, "url": "https://combine.community"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 63, "longevity": 100, "rhythm": 34}, "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": 2507, "days_push": 225, "days_rel": 225, "gap_med": null, "n_releases_24m": 1}, "score": 60, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}