{"adoption": {"forks": 913, "observed_at": "2026-08-28T04:10:09.916966+00:00", "stars": 7933}, "canonical_url": "https://ross.abutalabs.com/products/ribs", "card": {"archived": false, "artifact_type": "framework", "description": "Uber's cross-platform mobile architecture framework - Android Repository", "domain": ["mobile-development", "web-development", "developer-tools"], "enriched": true, "function": ["state-management", "routing", "developer-tools"], "health_score": 96, "homepage": "https://eng.uber.com/tag/ribs/", "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "stable", "member_repos": ["uber/RIBs"], "name": "uber/RIBs", "platform": ["jvm"], "pushed_at": "2026-07-15T22:14:43+00:00", "repo": "uber/RIBs", "stars": 7933, "tags": ["rib-architecture", "viper", "mvvm", "mvc", "mvp", "cross-platform", "uber", "dependency-injection", "code-generation", "memory-leak-detection", "architecture", "android", "mobile"], "topics": ["android", "mobile", "mobile-app", "mobile-development", "architecture", "architectural-patterns", "mvc", "mvvm", "mvp", "viper"], "urls": [], "use_cases": ["structure a large Android app with a scalable architecture", "share architecture patterns between iOS and Android teams", "replace MVVM or VIPER with a business-logic-driven architecture", "unit test app business logic in isolation", "detect memory leaks in a mobile app at runtime", "generate boilerplate architecture code in the IDE", "manage deeply nested app states across many screens"], "what_it_is": "RIBs is Uber's cross-platform mobile architecture framework built around Router, Interactor, and Builder components. It structures large mobile apps so that business logic, not the view tree, drives the app hierarchy, with tooling for code generation, leak detection, and static analysis.", "when_to_avoid": ["you are building a small app or prototype where a simpler pattern suffices", "your team is already comfortable with MVVM or MVI and does not need RIBs tooling", "you need an iOS framework - that now lives in the separate uber/ribs-ios repo"], "when_to_choose": ["you are building a large mobile app with many engineers and nested states", "you want a proven architecture that scales to hundreds of developers", "you need cross-reviewable business logic across iOS and Android", "you value testability and isolation of app components"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ribs", "repo": "uber/RIBs", "role": "main", "score": 86}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "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:10:09.916966+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:09.916966+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:33:14.960905+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "295f4158ca5e0b00b0235f37aed24d165f96530678658c92e43cde6e12c54adc", "fetched_at": "2026-08-28T04:10:09.916966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/uber/RIBs"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 92, "longevity": 100, "rhythm": 69}, "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": 3256, "days_push": 49, "days_rel": 48, "gap_med": 151.0, "n_releases_24m": 3}, "score": 86, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}