{"adoption": {"forks": 37, "observed_at": "2026-08-28T04:06:43.735594+00:00", "stars": 2398}, "canonical_url": "https://ross.abutalabs.com/products/ariebovenberg-whenever", "card": {"archived": false, "artifact_type": "library", "description": "⏰ Type-safe datetimes for Python that get DST right. Rust or pure Python, your choice", "domain": ["developer-tools", "programming-languages"], "enriched": true, "function": ["date-time", "type-system", "serialization"], "health_score": 100, "homepage": "https://whenever.rtfd.io", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["ariebovenberg/whenever"], "name": "ariebovenberg/whenever", "platform": ["python", "rust", "cross-platform"], "pushed_at": "2026-08-24T04:06:47+00:00", "repo": "ariebovenberg/whenever", "stars": 2398, "tags": ["datetime", "timezone", "dst", "type-safety", "mypy", "rfc3339", "utc", "pure-python", "algorithms"], "topics": ["datetime", "mypy", "python", "timezones", "type-safe", "utc", "rfc3339", "utc-offsets", "rust", "cpython", "pure-python", "pypy"], "urls": [], "use_cases": ["parse and format RFC 3339 timestamps safely", "avoid mixing naive and aware datetimes in Python", "handle daylight saving time correctly in datetime arithmetic", "convert datetimes between timezones and UTC offsets", "get faster datetime operations than the standard library", "add strict type checking for datetime usage with mypy"], "what_it_is": "Whenever is a Python library providing type-safe datetime and timezone handling that prevents naive/aware mixing at the type level and correctly handles DST in all arithmetic. It offers both a fast Rust extension and a pure Python implementation.", "when_to_avoid": ["you need a drop-in replacement for datetime.datetime", "your project cannot add third-party dependencies", "you need date parsing beyond datetime scope like natural language dates"], "when_to_choose": ["you need DST-correct datetime arithmetic in Python", "you want type errors instead of runtime bugs for naive/aware mixing", "performance matters and you want faster-than-stdlib datetimes", "you want a choice between Rust-backed and pure Python implementations"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ariebovenberg-whenever", "repo": "ariebovenberg/whenever", "role": "main", "score": 93}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "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:06:43.735594+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:43.735594+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:34:18.359377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e245bba588e28f2130b7a8141fed43c7427151773b9cf06782dae54c1bc663c", "fetched_at": "2026-08-28T04:06:43.735594+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ariebovenberg/whenever"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 73, "rhythm": 97}, "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": 1027, "days_push": 9, "days_rel": 22, "gap_med": 10.0, "n_releases_24m": 37}, "score": 93, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}