{"adoption": {"forks": 253, "observed_at": "2026-08-28T04:05:06.959592+00:00", "stars": 1581}, "canonical_url": "https://ross.abutalabs.com/products/flask-jwt-extended", "card": {"archived": false, "artifact_type": "library", "description": " An open source Flask extension that provides JWT support (with batteries included)!", "domain": ["web-development", "backend", "security", "apis"], "enriched": true, "function": ["auth", "middleware", "web-framework"], "health_score": 98, "homepage": "http://flask-jwt-extended.readthedocs.io/en/stable/", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["vimalloc/flask-jwt-extended"], "name": "vimalloc/flask-jwt-extended", "platform": ["python"], "pushed_at": "2026-08-20T13:15:09+00:00", "repo": "vimalloc/flask-jwt-extended", "stars": 1581, "tags": ["flask", "jwt", "-web-tokens", "refresh-tokens", "csrf-protection", "token-revocation"], "topics": ["flask", "jwt", "flask-jwt-extended", "flask-jwt"], "urls": [], "use_cases": ["add jwt authentication to a flask api", "protect flask routes with  web tokens", "implement refresh tokens in flask", "revoke or blocklist jwt tokens in flask", "store jwt tokens in cookies with csrf protection", "load current user from jwt token in flask", "add custom claims to jwts in flask"], "what_it_is": "Flask-JWT-Extended is an open source Flask extension that adds JSON Web Token (JWT) support for protecting routes, with many optional batteries-included features. It supports custom claims, automatic user loading, refresh and fresh tokens, token revocation, and cookie-based storage with CSRF protection.", "when_to_avoid": ["your project does not use Flask (consider a framework-agnostic JWT library like PyJWT instead)", "you need OAuth2/OpenID Connect flows rather than simple JWT auth", "you are building a non-Python backend"], "when_to_choose": ["you are building a Flask application or API that needs token-based authentication", "you want batteries-included JWT features like refresh tokens, fresh tokens, and revocation out of the box", "you need cookie-based token storage with built-in CSRF protection", "you want a well-documented, actively maintained, MIT-licensed Flask extension"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/flask-jwt-extended", "repo": "vimalloc/flask-jwt-extended", "role": "main", "score": 93}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/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:05:06.959592+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.959592+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:56:34.935289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f1b4d4c73f5337efff3f874568b3992af06596a6e733a25526cf48bcb75febf1", "fetched_at": "2026-08-28T04:05:06.959592+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vimalloc/flask-jwt-extended"}, {"content_hash": "6a761eaf1f9a5528d42d4e79671e7a0f79c493dd02ed6741678a8a53c7491db4", "fetched_at": "2026-08-29T11:27:25.192106+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/flask-jwt-extended/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 83}, "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": 3641, "days_push": 13, "days_rel": 112, "gap_med": 3.0, "n_releases_24m": 5}, "score": 93, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}