{"id":32267808,"url":"https://github.com/zeezooz/zxcvbnm","last_synced_at":"2026-02-19T21:03:37.426Z","repository":{"id":248848176,"uuid":"829581331","full_name":"zeezooz/zxcvbnm","owner":"zeezooz","description":"A password strength estimator inspired by password crackers.","archived":false,"fork":false,"pushed_at":"2024-11-13T20:53:11.000Z","size":6197,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-22T22:07:32.694Z","etag":null,"topics":["authentication","password","security","validation","validator"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/zxcvbnm","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zeezooz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-16T18:12:41.000Z","updated_at":"2025-08-04T18:51:45.000Z","dependencies_parsed_at":"2024-07-17T13:16:44.057Z","dependency_job_id":"6e5dc53c-32ab-48a3-a6c4-3a5385585199","html_url":"https://github.com/zeezooz/zxcvbnm","commit_stats":null,"previous_names":["zeezooz/zxcvbnm"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/zeezooz/zxcvbnm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeezooz%2Fzxcvbnm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeezooz%2Fzxcvbnm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeezooz%2Fzxcvbnm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeezooz%2Fzxcvbnm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zeezooz","download_url":"https://codeload.github.com/zeezooz/zxcvbnm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeezooz%2Fzxcvbnm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29632708,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T18:02:07.722Z","status":"ssl_error","status_checked_at":"2026-02-19T18:01:46.144Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","password","security","validation","validator"],"created_at":"2025-10-22T22:03:30.463Z","updated_at":"2026-02-19T21:03:37.421Z","avatar_url":"https://github.com/zeezooz.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"A password strength estimator inspired by password crackers.\nThis is a Dart rewrite of\n[zxcvbn-ts](https://github.com/zxcvbn-ts/zxcvbn),\nwhich is a rewrite and further evolution of\n[zxcvbn](https://github.com/dropbox/zxcvbn) by Dropbox.\n\nThe goal is to match [zxcvbn-ts](https://github.com/zxcvbn-ts/zxcvbn) in password evaluation. Although message translation and API may differ.\n\n\u003e zxcvbn is a password strength estimator inspired by password crackers.\n\u003e Through pattern matching and conservative estimation, it recognizes and\n\u003e weighs 40k common passwords, common names surnames, popular words from\n\u003e Wikipedia and common word in different language from different countries,\n\u003e and other common patterns like dates, repeats (aaa), sequences (abcd),\n\u003e keyboard patterns (qwertyuiop), and l33t speak.\n\u003e\n\u003e Consider using zxcvbn as an algorithmic alternative to password composition\n\u003e policy\u0026nbsp;— it is more secure, flexible, and usable when sites require a\n\u003e minimal complexity score in place of annoying rules like \"passwords must\n\u003e contain three of {lower, upper, numbers, symbols}\".\n\u003e\n\u003e - **More secure**: policies often fail both ways, allowing weak passwords\n\u003e (P@ssword1) and disallowing strong passwords.\n\u003e - **More flexible**: zxcvbn allows many password styles to flourish so long as\n\u003e it detects sufficient complexity\u0026nbsp;— passphrases are rated highly given\n\u003e enough uncommon words, keyboard patterns are ranked based on length and number\n\u003e of turns, and capitalization adds more complexity when it's unpredictaBle.\n\u003e - **More usable**: zxcvbn is designed to power simple, rule-free interfaces\n\u003e that give instant feedback. In addition to strength estimation, zxcvbn\n\u003e includes minimal, targeted verbal feedback that can help guide users towards\n\u003e less guessable passwords.\n\u003e\n\u003e For further detail and motivation, please refer to the USENIX Security '16\n\u003e [paper and presentation](https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/wheeler).\n\n## Features\n\n- Estimate strength of a password\n- Get a score for the password\n- Localization support for [dictionaries](#dictionaries) and feedback\n  [translations](#translation)\n- Extend existing dictionaries with your own\n- Usable without dictionaries at all, which reduce the scoring efficiency\n  rapidly. This is not recommended\n- [Custom matchers](https://github.com/zeezooz/zxcvbnm/blob/main/test/custom_matcher_test.dart),\n  including\n  [asynchronous ones](https://github.com/zeezooz/zxcvbnm/blob/main/test/async_matcher_test.dart)\n\n## Usage\n\n```dart\nimport 'package:zxcvbnm/languages/en.dart';\nimport 'package:zxcvbnm/zxcvbnm.dart';\n...\nfinal Zxcvbnm zxcvbnm = Zxcvbnm(dictionaries: dictionaries);\nfinal Result result = zxcvbnm('password');\nprint('score: ${result.score}/4');\n```\n\n### Dictionaries\n\nDictionaries contain easy-to-guess words to check a password for. By default, no\ndictionaries are used, which may allow some weak passwords, so it's recommended\nto specify some dictionaries. They are `Set`s, so you can combine them using the\nspread operator:\n\n```dart\nimport 'package:zxcvbnm/languages/en.dart' as en;\nimport 'package:zxcvbnm/languages/es_es.dart' as es;\n...\ndictionaries: {\n  ...en.dictionaries,\n  if (localeName == 'es') ...es.dictionaries,\n}\n```\n\n#### Included dictionaries\n\n- `common` - [Diceware](https://en.wikipedia.org/wiki/Diceware) and the most\n  often used passwords. These dictionaries are already included in the locale\n  specific dictionaries, so you usually don't need to add them explicitly\n- `ar` - Arabic\n- `cs` - Czech\n- `de` - German\n- `en` - English\n- `es_es` - Spanish (Spain)\n- `fi` - Finnish\n- `fr` - French\n- `id` - Indonesian\n- `it` - Italian\n- `ja` - Japanese\n- `nl_be` - Dutch (Belgium)\n- `pl` - Polish\n- `pt_br` - Portuguese (Brazil)\n\nLocale specific dictionaries usually contain the most often used words,\nthe most common names, and the most often used words from Wikipedia.\n\n### Translation\n\nThe package uses [intl](https://pub.dev/packages/intl) to translate messages.\nYou can use your own translation or override some messages by loading a\ntranslation with necessary keys. If you need to load more than 1 translation\nper locale, use\n[intl_multiple_translations](https://pub.dev/packages/intl_multiple_translations)\nor a similar package.\n\n#### Included languages\n\n- `ar` - Arabic\n- `cs` - Czech\n- `de` - German\n- `en` (default) - English\n- `es` - Spanish (Spain)\n- `fi` - Finnish\n- `fr` - French\n- `id` - Indonesian\n- `it` - Italian\n- `ja` - Japanese\n- `nl` - Dutch (Belgium)\n- `pl` - Polish\n- `pt` - Portuguese (Brazil)\n\n#### Dart\n\nLoad the translation:\n\n```dart\nimport 'package:zxcvbnm/messages.dart';\n...\nawait initializeZxcvbnmMessages('es');\n```\n\nand set the global locale:\n\n```dart\nimport 'package:intl/intl.dart';\n...\nIntl.defaultLocale = 'es';\n```\n\nor override the current locale for a particular operation:\n\n```dart\nimport 'package:intl/intl.dart';\n...\nIntl.withLocale('es', () =\u003e doSomething());\n```\n\nSee\n[doc/translation/dart.md](https://github.com/zeezooz/zxcvbnm/blob/main/doc/translation/dart.md)\nto learn how to use your own translation or override some messages.\n\n#### Flutter\n\nInstall [zxcvbnm_flutter](https://pub.dev/packages/zxcvbnm_flutter).\n\nAdd the localizations delegate:\n\n```dart\nimport 'package:zxcvbnm_flutter/zxcvbnm_flutter.dart';\n...\nreturn MaterialApp(\n  localizationsDelegates: [\n    ZxcvbnmLocalizations.delegate,\n    ...\n  ],\n  ...\n);\n```\n\nSee\n[doc/translation/flutter.md](https://github.com/zeezooz/zxcvbnm/blob/main/doc/translation/flutter.md)\nto learn how to use your own translation or override some messages.\n\n## Contribution\n\nPlease feel free to\n[open an issue](https://github.com/zeezooz/zxcvbnm/issues/new) or provide a pull\nrequest.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeezooz%2Fzxcvbnm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeezooz%2Fzxcvbnm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeezooz%2Fzxcvbnm/lists"}