{"adoption": {"forks": 996, "observed_at": "2026-08-28T04:11:14.703043+00:00", "stars": 16037}, "canonical_url": "https://ross.abutalabs.com/products/zxcvbn", "card": {"archived": false, "artifact_type": "library", "description": "Low-Budget Password Strength Estimation", "domain": ["security", "web-development"], "enriched": true, "function": ["security", "auth"], "health_score": 20, "homepage": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler", "language": "CoffeeScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["dropbox/zxcvbn"], "name": "dropbox/zxcvbn", "platform": ["browser", "cross-platform"], "pushed_at": "2024-08-19T09:54:34+00:00", "repo": "dropbox/zxcvbn", "stars": 16037, "tags": ["password-strength", "entropy-estimation", "coffeescript", "nodejs"], "topics": [], "urls": [], "use_cases": ["estimate password strength realistically in a signup form", "replace password composition rules with a complexity score", "give users instant feedback on weak passwords", "detect common passwords and keyboard patterns like qwerty", "score passphrase strength based on word rarity"], "what_it_is": "zxcvbn is a JavaScript password strength estimator inspired by password crackers, using pattern matching and conservative estimation against common passwords, words, dates, keyboard patterns, and l33t speak. It provides realistic guessability scores plus targeted verbal feedback as an alternative to rigid password composition rules.", "when_to_avoid": ["you need server-side strength checks in a non-JavaScript stack without a port", "you need cryptographic key-strength validation rather than user-facing feedback"], "when_to_choose": ["you need client-side password strength metering with no server round-trip", "you want to replace LUDS composition policies with a research-backed estimator"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/zxcvbn", "repo": "dropbox/zxcvbn", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "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:11:14.703043+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:14.703043+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:05:16.514968+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "08f0e2c647ee0f50ce07ec822dc6af13b3c3c92bf0702305f97e619b797e7b5b", "fetched_at": "2026-08-28T04:11:14.703043+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dropbox/zxcvbn"}, {"content_hash": "6c9afd83b8077f4f3a99971f6e74b7b81ed29d01cb2c9bdb0c7e9ec0bbc0566b", "fetched_at": "2026-08-29T08:03:22.387252+00:00", "kind": "homepage", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler"}, {"content_hash": "dac7580b9dd1696defbea711d0675856154ecfa399e381fbb1c4eda1eb7ecddd", "fetched_at": "2026-08-29T08:03:22.391782+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/zxcvbn"}, {"content_hash": "916468c9b12015551fdbb81426da3373a97f8969a45f3a96f82829198b60a2dd", "fetched_at": "2026-08-29T08:03:22.389848+00:00", "kind": "site_page", "missing": false, "url": "https://www.usenix.org/conference/usenixsecurity16/symposium-organizers"}], "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": 5300, "days_push": 744, "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}}