{"adoption": {"forks": 262, "observed_at": "2026-08-28T04:07:18.687065+00:00", "stars": 2767}, "canonical_url": "https://ross.abutalabs.com/products/bleach", "card": {"archived": true, "artifact_type": "library", "description": "Bleach is an allowed-list-based HTML sanitizing library that escapes or strips markup and attributes", "domain": ["web-development", "security", "developer-tools"], "enriched": true, "function": ["security", "parser", "serialization"], "health_score": 10, "homepage": "https://bleach.readthedocs.io/en/latest/", "language": "Python", "license": "NOASSERTION", "license_family": "other", "maturity": "abandoned", "member_repos": ["mozilla/bleach"], "name": "mozilla/bleach", "platform": ["python"], "pushed_at": "2026-06-05T13:02:39+00:00", "repo": "mozilla/bleach", "stars": 2767, "tags": ["html-sanitizer", "html-sanitization", "xss-prevention", "linkify", "allowlist", "untrusted-input", "no-longer-maintained"], "topics": [], "urls": [], "use_cases": ["sanitize user-submitted HTML comments to prevent XSS", "strip dangerous tags and attributes from untrusted text", "clean HTML fragments from rich text editors", "linkify URLs in plain text safely", "fix unbalanced or mis-nested HTML tags", "escape script tags in user input"], "what_it_is": "Bleach is a Python library for sanitizing HTML from untrusted sources using an allowlist-based approach, escaping or stripping markup and attributes. It also safely linkifies text and relies on html5lib to handle malformed HTML as browsers do.", "when_to_avoid": ["starting a new project - the project is no longer maintained and will receive no security fixes", "you need guaranteed security patches for sanitization of untrusted input", "you want to let trusted administrators use rich HTML - Bleach is designed for untrusted sources"], "when_to_choose": ["you need allowlist-based HTML sanitization in Python and can accept an unmaintained dependency", "you need browser-grade handling of malformed HTML fragments", "you need safe linkification with rel attribute control"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bleach", "repo": "mozilla/bleach", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "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:18.687065+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.687065+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T08:16:44.492078+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56856d7b4bf565d1c52879bf08a5501218b2178df12c9448806152285c7b2935", "fetched_at": "2026-08-28T04:07:18.687065+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mozilla/bleach"}, {"content_hash": "6921fd4cfd498ea05c5ab56d5e5a58ee852b36563d1931e5695dbdbbf3675866", "fetched_at": "2026-08-29T09:56:46.041769+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/bleach/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 86, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "archived", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 6040, "days_push": 89, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}