{"adoption": {"forks": 456, "observed_at": "2026-08-28T04:07:48.110209+00:00", "stars": 3189}, "canonical_url": "https://ross.abutalabs.com/products/android-saripaar", "card": {"archived": false, "artifact_type": "library", "description": "UI form validation library for Android", "domain": ["mobile-development", "android-tools", "web-development"], "enriched": true, "function": ["form-handling", "ui-components"], "health_score": 20, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["ragunathjawahar/android-saripaar"], "name": "ragunathjawahar/android-saripaar", "platform": ["jvm"], "pushed_at": "2020-12-03T16:41:19+00:00", "repo": "ragunathjawahar/android-saripaar", "stars": 3189, "tags": ["android", "form-validation", "annotations", "declarative-validation", "ui-validation", "mobile"], "topics": ["android", "java"], "urls": [], "use_cases": ["validate android form inputs", "validate email and password fields in android", "show inline validation errors on android views", "declarative form validation with annotations", "validate checkbox and edittext fields in android app"], "what_it_is": "Android Saripaar is a rule-based UI form validation library for Android that uses declarative annotations on views. It supports synchronous and asynchronous validation with stock Android widgets and custom annotation rules.", "when_to_avoid": ["you are not building an Android app", "you prefer programmatic validation logic over annotations", "you need a library under active development - the latest release is from 2020"], "when_to_choose": ["you want annotation-based declarative validation on stock Android widgets", "you need synchronous or asynchronous validation without manual threading", "you want ordered or immediate validation modes for multi-step forms"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/android-saripaar", "repo": "ragunathjawahar/android-saripaar", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "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:07:48.110209+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:48.110209+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:24:57.506500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b4771abc704bdb6eb186a6796b2f70f423c02daed193761d843aa0a0409ed35", "fetched_at": "2026-08-28T04:07:48.110209+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ragunathjawahar/android-saripaar"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5107, "days_push": 2099, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}