{"adoption": {"forks": 61, "observed_at": "2026-08-28T04:04:01.819636+00:00", "stars": 1220}, "canonical_url": "https://ross.abutalabs.com/products/spotify-ruler", "card": {"archived": false, "artifact_type": "plugin", "description": "Gradle plugin which helps you analyze the size of your Android apps.", "domain": ["android-tools", "mobile-development", "developer-tools", "analytics"], "enriched": true, "function": ["build-tool", "developer-tools", "analytics"], "health_score": 22, "homepage": null, "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["spotify/ruler"], "name": "spotify/ruler", "platform": ["jvm", "cli"], "pushed_at": "2025-01-27T15:03:31+00:00", "repo": "spotify/ruler", "stars": 1220, "tags": ["gradle-plugin", "app-size-analysis", "apk-size", "android-app-bundle", "size-reporting", "android"], "topics": ["android", "gradle"], "urls": [], "use_cases": ["analyze what contributes to my android app size", "find which gradle modules or dependencies make my apk large", "track app download size growth across builds", "enforce an app size budget in ci", "generate an app size breakdown report for an android bundle", "attribute apk size to third-party libraries"], "what_it_is": "Ruler is a Gradle plugin from Spotify that analyzes the size of Android apps, breaking down how much each module and dependency contributes to total download and install size. It generates HTML and JSON reports and can optionally fail the build if size thresholds are exceeded.", "when_to_avoid": ["you need size analysis for iOS, desktop, or non-Gradle Android builds", "you want runtime performance profiling rather than app size analysis", "your project does not use the Android Gradle Plugin"], "when_to_choose": ["you build Android apps with Gradle and want per-module and per-dependency size attribution", "you want automated size verification with thresholds in your build pipeline", "you need HTML or JSON size reports for app bundles and APKs"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/spotify-ruler", "repo": "spotify/ruler", "role": "main", "score": 24}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "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:01.819636+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.819636+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:16:10.462809+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "422678ac16ee4adf2536013352e46d4005f1004990af8d753f9df2bc72015e9d", "fetched_at": "2026-08-28T04:04:01.819636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/spotify/ruler"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 3, "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": 1862, "days_push": 583, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 24, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}