{"adoption": {"forks": 1815, "observed_at": "2026-08-28T04:09:51.050917+00:00", "stars": 6877}, "canonical_url": "https://ross.abutalabs.com/products/werkzeug", "card": {"archived": false, "artifact_type": "library", "description": "The comprehensive WSGI web application library.", "domain": ["web-development", "backend", "developer-tools", "apis"], "enriched": true, "function": ["http-server", "routing", "middleware", "http-client", "testing", "web-framework"], "health_score": 97, "homepage": "https://werkzeug.palletsprojects.com", "language": "Python", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "stable", "member_repos": ["pallets/werkzeug"], "name": "pallets/werkzeug", "platform": ["python", "cross-platform"], "pushed_at": "2026-08-21T23:58:36+00:00", "repo": "pallets/werkzeug", "stars": 6877, "tags": ["wsgi", "flask-dependency", "debugger", "request-response", "url-routing", "test-client"], "topics": ["python", "wsgi", "werkzeug", "http", "pallets"], "urls": [], "use_cases": ["build a WSGI web application in Python without a full framework", "simulate HTTP requests in tests without running a server", "debug Python web app stack traces in the browser", "match URLs to endpoints and generate URLs with variable capture", "handle headers, form data, file uploads, and cookies in WSGI apps", "run a lightweight threaded development server locally"], "what_it_is": "Werkzeug is a comprehensive WSGI utility library for Python web applications, providing request/response objects, URL routing, HTTP utilities, a development server, an interactive debugger, and a test client. It is the foundational layer underneath Flask and does not enforce any dependencies like template engines or database adapters.", "when_to_avoid": ["you want a batteries-included framework with structure and patterns - use Flask or Django instead", "you need async/ASGI support rather than WSGI", "you need a production-grade HTTP server rather than a development server"], "when_to_choose": ["you're building a Flask app (it's the underlying WSGI layer)", "you want fine-grained control over WSGI without framework conventions", "you need a robust test client or interactive debugger for WSGI apps", "you're writing middleware or utilities that operate at the WSGI level"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/werkzeug", "repo": "pallets/werkzeug", "role": "main", "score": 91}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/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:09:51.050917+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.050917+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:41:41.191868+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6760f55eac6318c83d262749bc680c9ea063f418ace98ea3c3b71ab8fba925fd", "fetched_at": "2026-08-28T04:09:51.050917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pallets/werkzeug"}, {"content_hash": "100ea12542a502c2dbe916c056bc9ce7a342e1c88a2e158ac7d34e0b61dbecc8", "fetched_at": "2026-08-29T08:38:02.249012+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/werkzeug/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 77}, "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": 5798, "days_push": 12, "days_rel": 153, "gap_med": 7.0, "n_releases_24m": 11}, "score": 91, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}