PyJWT

A Python implementation of RFC 7519 for encoding, decoding, and verifying JSON Web Tokens.

Library
PyPI
v2.15.1
5,719 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
87 /100 Excellent
Development Activity 96
Maintenance 72
Community 80
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
83 /100 Excellent
Architecture 82
Code Quality 85
Innovation 75
Learning Curve 88

PyJWT is the de facto standard library for working with JSON Web Tokens in Python. It provides simple encode()/decode() functions covering the full RFC 7519 surface — issuer, audience, expiration, and not-before claim validation — plus pluggable signing algorithms for HMAC, RSA, ECDSA, and Ed25519/Ed448 keys.

Beyond the core encode/decode API, PyJWT ships a JWKS client (PyJWKClient) for fetching and caching signing keys from an identity provider’s JSON Web Key Set endpoint, making it a common building block for verifying tokens issued by OAuth/OIDC providers such as Auth0, Okta, and Firebase.

What You Get

  • encode()/decode() functions supporting HS256/384/512, RS256/384/512, ES256/384/512/256K, PS256/384/512, and EdDSA algorithms
  • Built-in validation of standard claims: exp, nbf, iat, aud, and iss, with configurable leeway for clock skew
  • PyJWKClient for fetching, caching, and rotating signing keys from a remote JWKS endpoint
  • PyJWK/PyJWKSet classes implementing RFC 7517 JSON Web Key parsing
  • Custom exception hierarchy (ExpiredSignatureError, InvalidAudienceError, etc.) for precise error handling
  • Optional cryptography integration for asymmetric algorithms, kept as an extra so HMAC-only users avoid the dependency

Common Use Cases

  • Issuing and verifying stateless session/auth tokens for a Python API backend
  • Validating tokens issued by an external OAuth/OIDC identity provider using its published JWKS endpoint
  • Signing short-lived, single-purpose tokens (password reset links, email verification, webhook signing)
  • Service-to-service authentication between internal microservices using shared HMAC secrets

Under The Hood

Architecture The library centers on api_jwt.py (the high-level encode/decode functions and claim validation) which delegates cryptographic signing/verification to api_jws.py, itself backed by an algorithms.py registry mapping algorithm names (HS256, RS256, ES256, EdDSA, …) to key-handling implementations. api_jwk.py implements RFC 7517 JWK parsing, and jwks_client.py layers an HTTP-fetching, TTL-caching client (PyJWKClient, jwk_set_cache.py) on top of it for remote key resolution — a common need when verifying third-party-issued tokens.

Tech Stack Pure Python core with the cryptography package as an optional dependency (declared as an extra) for RSA/EC/EdDSA algorithms, so HMAC-only consumers don’t have to install a C-extension-backed cryptography library. Built with setuptools, targets Python 3.9+, and uses ruff for linting per ruff.toml.

Code Quality Comprehensive test suite (tests/test_api_jwt.py, test_algorithms.py, test_jwks_client.py, etc.) with fixture keys for every supported algorithm family under tests/keys/, plus a dedicated test_advisory.py covering historical CVEs (e.g. the none algorithm confusion attack) as regression tests — notable given JWT libraries’ history of signature-verification bypass vulnerabilities. Uses coverage with a checked-in codecov.yml for CI coverage gating.

API Design The functional encode(payload, key, algorithm) / decode(token, key, algorithms=[...]) signature keeps the common path minimal, while an explicit exception hierarchy (ExpiredSignatureError, InvalidSignatureError, InvalidAudienceError) lets callers distinguish failure modes precisely instead of parsing string messages. Requiring algorithms=[...] explicitly on decode (rather than trusting the token’s own header) is a deliberate API safety choice that prevents algorithm-confusion attacks.

Used by 47 apps in this directory

Python
99%
Apache 2.0

Rasa Open Source

AI Assistants · AI Development · Voice AI

21,353

Rasa Open Source is a Python machine learning framework for building contextual, multi-turn chatbots and voice assistants that understand natural language and maintain conversation state.

View details
62
Repo Health
78
Technical
63
Dependency
Built with
Python 99%
Updated 3 months ago
Python
45%
Other

Redash

Analytics · Data Engineering

28,849

Redash lets anyone connect to 35+ SQL and NoSQL data sources, write a query in the browser, and turn the result into a shared dashboard — no separate BI suite required.

View details
91
Repo Health
74
Technical
61
Dependency
Built with
Python 45%
JavaScript 29%
TypeScript 19%
Updated 1 weeks ago
TypeScript
98%
Apache 2.0

rowboat

AI Assistants · AI Development

18,060

Build, test, and deploy multi-agent AI workflows with a visual editor, RAG data sources, MCP tool integration, and a production-ready REST API.

View details
88
Repo Health
72
Technical
65
Dependency
Built with
TypeScript 98%
Updated 1 weeks ago
Python
57%
Other

Sentry

Analytics · Developer Tools · Monitoring

45,632

Developer-first error tracking and performance monitoring platform with AI-powered root-cause analysis across 20+ languages and frameworks.

View details
95
Repo Health
80
Technical
66
Dependency
Built with
Python 57%
TypeScript 42%
Updated 6 days ago
Python
79%
AGPL 3.0

Skyvern

AI Agents · Automation

23,257

Skyvern (YC S2023) automates browser-based workflows by pairing LLMs with computer vision, letting agents click, fill, and extract data on sites they've never seen, without brittle XPath selectors that break on every layout change.

View details
89
Repo Health
82
Technical
70
Dependency
Built with
Python 79%
TypeScript 19%
Updated 6 days ago
Python
71%
Apache 2.0

SurfSense

AI Assistants · Search

16,586

The open-source, unlimited NotebookLM alternative with real-time collaboration, a desktop app, and no vendor lock-in.

View details
88
Repo Health
71
Technical
66
Dependency
Built with
Python 71%
TypeScript 27%
Updated 6 days ago
Python
94%
Apache 2.0

SWIRL

Data Engineering · Databases · Search

3,046

Federated AI search and RAG across 100+ enterprise sources—no data extraction, no vector database required.

View details
61
Repo Health
83
Technical
65
Dependency
Built with
Python 94%
Updated 1 weeks ago
Python
97%
MPL 2.0

Taiga Back

Developer Tools · Project Management

859

Self-hosted agile project management backend with Scrum, Kanban, issue tracking, and a full REST API — built on Django and PostgreSQL.

View details
72
Repo Health
74
Technical
64
Dependency
Built with
Python 97%
Updated 1 months ago
C++
75%
Apache 2.0

Timeplus Proton

Analytics · Data Engineering

2,273

Single C++ binary SQL engine for real-time stream processing, ETL, and analytics on Kafka, Redpanda, and ClickHouse with sub-millisecond latency.

View details
87
Repo Health
82
Technical
68
Dependency
Built with
C++ 75%
Python 11%
Updated 2 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers