{"adoption": {"forks": 162, "observed_at": "2026-08-28T04:06:05.444424+00:00", "stars": 2014}, "canonical_url": "https://ross.abutalabs.com/products/uber-needle", "card": {"archived": false, "artifact_type": "framework", "description": "Compile-time safe Swift dependency injection framework", "domain": ["developer-tools", "mobile-development"], "enriched": true, "function": ["developer-tools"], "health_score": 76, "homepage": null, "language": "Swift", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["uber/needle"], "name": "uber/needle", "platform": [], "pushed_at": "2026-04-29T19:41:58+00:00", "repo": "uber/needle", "stars": 2014, "tags": ["dependency-injection", "compile-time-safety", "code-generation", "swift", "ios", "dagger-like", "macos"], "topics": [], "urls": [], "use_cases": ["inject dependencies into an iOS app with compile-time safety", "replace runtime DI crashes with build-time verification", "structure dependency injection hierarchically in a large Swift codebase", "use DI with RIBs or MVx architectures in Swift", "generate DI boilerplate code for multi-million-line Swift projects"], "what_it_is": "Needle is a compile-time safe dependency injection framework for Swift, inspired by Dagger for the JVM. It uses hierarchical DI scopes and code generation so that dependency injection errors are caught at compile time rather than at runtime.", "when_to_avoid": ["you need DI for server-side Swift or non-Apple platforms", "you prefer lightweight runtime DI containers like Swinject", "your project is small and manual DI is sufficient"], "when_to_choose": ["you build iOS apps in Swift and want Dagger-like compile-time safe DI", "your codebase is large and runtime DI failures are costly", "you use Uber's RIBs architecture or hierarchical DI patterns"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/uber-needle", "repo": "uber/needle", "role": "main", "score": 58}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "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:05.444424+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:05.444424+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:00:51.066943+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5896aa4fd486ca700f898cd247ab8a23b8069e2073e3332cfd1794cc36007367", "fetched_at": "2026-08-28T04:06:05.444424+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/needle"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 79, "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": 3071, "days_push": 126, "days_rel": 727, "gap_med": null, "n_releases_24m": 1}, "score": 58, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}