{"adoption": {"forks": 581, "observed_at": "2026-08-28T04:09:22.629828+00:00", "stars": 5587}, "canonical_url": "https://ross.abutalabs.com/products/calendar", "card": {"archived": false, "artifact_type": "library", "description": "A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.", "domain": ["mobile-development", "cross-platform", "frontend"], "enriched": true, "function": ["ui-components", "date-time"], "health_score": 96, "homepage": null, "language": "Kotlin", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["kizitonwose/Calendar"], "name": "kizitonwose/Calendar", "platform": ["jvm"], "pushed_at": "2026-08-13T09:41:50+00:00", "repo": "kizitonwose/Calendar", "stars": 5587, "tags": ["calendar", "compose-multiplatform", "datepicker", "kotlin-multiplatform", "heatmap-calendar", "date-range-picker", "recyclerview", "android"], "topics": ["calendar", "calendarview", "date", "datepicker", "compose", "compose-calendar", "android", "heatmap-calendar", "month-calendar", "week-calendar", "date-range-picker", "date-range", "kotlin", "year-calendar", "calendar-library", "compose-calendar-library", "compose-multiplatform", "kotlin-multiplatform", "kmp", "kmp-library"], "urls": [], "use_cases": ["build a date picker in an Android app", "create a month or week calendar view in Jetpack Compose", "implement a date range picker for booking flows", "show a GitHub-style contribution heatmap calendar", "build a shared calendar UI across Android and iOS with Kotlin Multiplatform", "disable specific dates and limit the selectable date range"], "what_it_is": "A highly customizable calendar library for Android (view system via RecyclerView) and Compose Multiplatform (via LazyRow/LazyColumn). It provides calendar logic while you supply fully custom day cells and calendar views, supporting week, month, and year modes.", "when_to_avoid": ["you want a pre-styled drop-in Material date picker with no customization", "your project is not Android or Kotlin Multiplatform based", "you need a web or desktop-only calendar outside the Kotlin ecosystem"], "when_to_choose": ["you need full control over calendar appearance with custom day cells and layouts", "you need week, month, or year calendar modes with single, multiple, or range selection", "you want one calendar library for both Android views and Compose Multiplatform", "you need a heatmap calendar like GitHub's contribution graph"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/calendar", "repo": "kizitonwose/Calendar", "role": "main", "score": 86}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "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:09:22.629828+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.629828+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:55:32.121514+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "47d0e1743f0fdec2079e1b36cd43c3ff279e2b82a3fc270e59a71d3c66f4602b", "fetched_at": "2026-08-28T04:09:22.629828+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kizitonwose/Calendar"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 65}, "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": 2692, "days_push": 20, "days_rel": 158, "gap_med": 67.5, "n_releases_24m": 9}, "score": 86, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}