{"adoption": {"forks": 414, "observed_at": "2026-08-28T04:08:13.243149+00:00", "stars": 3658}, "canonical_url": "https://ross.abutalabs.com/products/permissionx", "card": {"archived": false, "artifact_type": "library", "description": "An open source Android library that makes handling runtime permissions extremely easy.", "domain": ["mobile-development", "android-tools", "developer-tools"], "enriched": true, "function": ["mobile-framework", "developer-tools"], "health_score": 20, "homepage": null, "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "stable", "member_repos": ["guolindev/PermissionX"], "name": "guolindev/PermissionX", "platform": ["jvm"], "pushed_at": "2024-08-29T12:28:33+00:00", "repo": "guolindev/PermissionX", "stars": 3658, "tags": ["runtime-permissions", "android-library", "kotlin", "permission-handling", "android"], "topics": ["android", "permissionx"], "urls": [], "use_cases": ["request android runtime permissions easily", "show rationale dialog when user denies permissions", "handle never ask again permission cases", "send users to app settings to grant permissions manually", "request multiple permissions like camera and contacts in one call"], "what_it_is": "PermissionX is an open-source Android library written in Kotlin that simplifies requesting and handling Android runtime permissions. It supports basic permission requests as well as complex flows like rationale dialogs and directing users to app settings for manual permission grants.", "when_to_avoid": ["you are not developing for Android", "your app targets only Android versions without runtime permissions", "you need Jetpack Compose-only permission APIs and prefer official Accompanist or Activity Result APIs"], "when_to_choose": ["you are building an Android app with FragmentActivity or Fragment and need runtime permission handling", "you want a simple chained API for permission requests with rationale and settings flows", "you prefer a lightweight Kotlin library over writing permission boilerplate yourself"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/permissionx", "repo": "guolindev/PermissionX", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "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:08:13.243149+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.243149+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:31:36.676286+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "70001ed919c5592b94371d060ce8c08115a1ba93842a0b26fef813fc05d2b2b2", "fetched_at": "2026-08-28T04:08:13.243149+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guolindev/PermissionX"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2500, "days_push": 734, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}