{"adoption": {"forks": 55, "observed_at": "2026-08-28T04:04:58.392044+00:00", "stars": 1526}, "canonical_url": "https://ross.abutalabs.com/products/cashapp-contour", "card": {"archived": true, "artifact_type": "library", "description": "Layouts with lambdas 😎", "domain": ["mobile-development", "frontend", "android-tools"], "enriched": true, "function": ["ui-components", "mobile-framework"], "health_score": 10, "homepage": null, "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["cashapp/contour"], "name": "cashapp/contour", "platform": [], "pushed_at": "2023-05-22T19:09:49+00:00", "repo": "cashapp/contour", "stars": 1526, "tags": ["kotlin", "layouts", "android-ui", "deprecated", "constraint-layout", "declarative-ui", "android"], "topics": ["kotlin", "android", "layouts"], "urls": [], "use_cases": ["build android layouts in pure kotlin without xml", "define view constraints as lambdas instead of xml", "replace constraintlayout xml with programmatic layout code", "create dynamic layouts that adapt to screen size at runtime", "avoid findViewById and R.id ambiguity in android views", "do runtime a/b testing of android ui components"], "what_it_is": "Contour is a Kotlin-first Android layout library that lets developers define view position and size with executable lambdas instead of XML constraints, acting as a thin typesafe wrapper around Android's layout APIs. It is now deprecated, with development ceased in favor of Jetpack Compose.", "when_to_avoid": ["starting a new android project - use Jetpack Compose instead", "you need a library with active development and community support", "your team prefers xml or standard constraintlayout workflows"], "when_to_choose": ["maintaining an existing android app already built with Contour", "you want programmatic kotlin-only layouts on a legacy non-Compose codebase"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cashapp-contour", "repo": "cashapp/contour", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "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:58.392044+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.392044+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:31:36.493263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "19a254e34105049ac13477c27e1556c0e4bebdec020389b81c93a5621237527b", "fetched_at": "2026-08-28T04:04:58.392044+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cashapp/contour"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2702, "days_push": 1199, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}