- Migrate the ``dev``, ``docs``, and ``tests`` package extras to dependency groups by @​kurtmckee in `#​1152 <https://github.com/jpadilla/pyjwt/pull/1152>`__
`v2.12.1 <https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1>`__
------------------------------------------------------------------------
Fixed
~~~~~
- Add missing ``typing_extensions`` dependency for Python < 3.11 in `#​1150 <https://github.com/jpadilla/pyjwt/issues/1150>`__
`v2.12.0 <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0>`__
-----------------------------------------------------------------------
Fixed
~~~~~
- Annotate PyJWKSet.keys for pyright by @​tamird in `#​1134 <https://github.com/jpadilla/pyjwt/pull/1134>`__
- Close ``HTTPError`` response to prevent ``ResourceWarning`` on Python 3.14 by @​veeceey in `#​1133 <https://github.com/jpadilla/pyjwt/pull/1133>`__
- Do not keep ``algorithms`` dict in PyJWK instances by @​akx in `#​1143 <https://github.com/jpadilla/pyjwt/pull/1143>`__
- Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by @​dmbs335 in `GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>`__
- Use PyJWK algorithm when encoding without explicit algorithm in `#​1148 <https://github.com/jpadilla/pyjwt/pull/1148>`__
Added
~~~~~
- Docs: Add ``PyJWKClient`` API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache).
`v2.11.0 <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0>`__
-----------------------------------------------------------------------
Fixed
~~~~~
- Enforce ECDSA curve validation per RFC 7518 Section 3.4.
- Fix build system warnings by @​kurtmckee in `#​1105 <https://github.com/jpadilla/pyjwt/pull/1105>`__
- Validate key against allowed types for Algorithm family in `#​964 <https://github.com/jpadilla/pyjwt/pull/964>`__
- Add iterator for JWKSet in `#​1041 <https://github.com/jpadilla/pyjwt/pull/1041>`__
- Validate `iss` claim is a string during encoding and decoding by @​pachewise in `#​1040 <https://github.com/jpadilla/pyjwt/pull/1040>`__
- Improve typing/logic for `options` in decode, decode_complete by @​pachewise in `#​1045 <https://github.com/jpadilla/pyjwt/pull/1045>`__
- Declare float supported type for lifespan and timeout by @​nikitagashkov in `#​1068 <https://github.com/jpadilla/pyjwt/pull/1068>`__
- Fix ``SyntaxWarning``\s/``DeprecationWarning``\s caused by invalid escape sequences by @​kurtmckee in `#​1103 <https://github.com/jpadilla/pyjwt/pull/1103>`__
- Development: Build a shared wheel once to speed up test suite setup times by @​kurtmckee in `#​1114 <https://github.com/jpadilla/pyjwt/pull/1114>`__
- Development: Test type annotations across all supported Python versions,
increase the strictness of the type checking, and remove the mypy pre-commit hook
by @​kurtmckee in `#​1112 <https://github.com/jpadilla/pyjwt/pull/1112>`__
Added
~~~~~
- Support Python 3.14, and test against PyPy 3.10 and 3.11 by @​kurtmckee in `#​1104 <https://github.com/jpadilla/pyjwt/pull/1104>`__
- Development: Migrate to ``build`` to test package building in CI by @​kurtmckee in `#​1108 <https://github.com/jpadilla/pyjwt/pull/1108>`__
- Development: Improve coverage config and eliminate unused test suite code by @​kurtmckee in `#​1115 <https://github.com/jpadilla/pyjwt/pull/1115>`__
- Docs: Standardize CHANGELOG links to PRs by @​kurtmckee in `#​1110 <https://github.com/jpadilla/pyjwt/pull/1110>`__
- Docs: Fix Read the Docs builds by @​kurtmckee in `#​1111 <https://github.com/jpadilla/pyjwt/pull/1111>`__
- Docs: Add example of using leeway with nbf by @​djw8605 in `#​1034 <https://github.com/jpadilla/pyjwt/pull/1034>`__
- Docs: Refactored docs with ``autodoc``; added ``PyJWS`` and ``jwt.algorithms`` docs by @​pachewise in `#​1045 <https://github.com/jpadilla/pyjwt/pull/1045>`__
- Docs: Documentation improvements for "sub" and "jti" claims by @​cleder in `#​1088 <https://github.com/jpadilla/pyjwt/pull/1088>`__
- Development: Add pyupgrade as a pre-commit hook by @​kurtmckee in `#​1109 <https://github.com/jpadilla/pyjwt/pull/1109>`__
- Add minimum key length validation for HMAC and RSA keys (CWE-326).
Warns by default via ``InsecureKeyLengthWarning`` when keys are below
minimum recommended lengths per RFC 7518 Section 3.2 (HMAC) and
NIST SP 800-131A (RSA). Pass ``enforce_minimum_key_length=True`` in
options to ``PyJWT`` or ``PyJWS`` to raise ``InvalidKeyError`` instead.
- Refactor ``PyJWT`` to own an internal ``PyJWS`` instance instead of
calling global ``api_jws`` functions.
`v2.10.1 <https://github.com/jpadilla/pyjwt/compare/2.10.0...2.10.1>`__
-----------------------------------------------------------------------
Fixed
~~~~~
- Prevent partial matching of `iss` claim by @​fabianbadoi in `GHSA-75c5-xw7c-p5pm <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm>`__
`v2.10.0 <https://github.com/jpadilla/pyjwt/compare/2.9.0...2.10.0>`__
-----------------------------------------------------------------------
Changed
Remove algorithm requirement from JWT API, instead relying on JWS API for enforcement, by @luhn in #​975 <https://github.com/jpadilla/pyjwt/pull/975>__
Use Sequence for parameter types rather than List where applicable by @imnotjames in #​970 <https://github.com/jpadilla/pyjwt/pull/970>__
Add JWK support to JWT encode by @luhn in #​979 <https://github.com/jpadilla/pyjwt/pull/979>__
Encoding and decoding payloads using the none algorithm by @jpadilla in #c2629f6 <https://github.com/jpadilla/pyjwt/commit/c2629f66c593459e02616048443231ccbe18be16>__
Added validation for 'sub' (subject) and 'jti' (JWT ID) claims in tokens by @Divan009 in #​1005 <https://github.com/jpadilla/pyjwt/pull/1005>__
Refactor project configuration files from setup.cfg to pyproject.toml by @cleder in #​995 <https://github.com/jpadilla/pyjwt/pull/995>__
Ruff linter and formatter changes by @gagandeepp in #​1001 <https://github.com/jpadilla/pyjwt/pull/1001>__
Drop support for Python 3.8 (EOL) by @kkirsche in #​1007 <https://github.com/jpadilla/pyjwt/pull/1007>__
Fixed
- Encode EC keys with a fixed bit length by @​etianen in `#​990 <https://github.com/jpadilla/pyjwt/pull/990>`__
- Add an RTD config file to resolve Read the Docs build failures by @​kurtmckee in `#​977 <https://github.com/jpadilla/pyjwt/pull/977>`__
- Docs: Update ``iat`` exception docs by @​pachewise in `#​974 <https://github.com/jpadilla/pyjwt/pull/974>`__
- Docs: Fix ``decode_complete`` scope and algorithms by @​RbnRncn in `#​982 <https://github.com/jpadilla/pyjwt/pull/982>`__
- Fix doctest for ``docs/usage.rst`` by @​pachewise in `#​986 <https://github.com/jpadilla/pyjwt/pull/986>`__
- Fix ``test_utils.py`` not to xfail by @​pachewise in `#​987 <https://github.com/jpadilla/pyjwt/pull/987>`__
- Docs: Correct `jwt.decode` audience param doc expression by @​peter279k in `#​994 <https://github.com/jpadilla/pyjwt/pull/994>`__
Added
Add support for python 3.13 by @hugovk in #​972 <https://github.com/jpadilla/pyjwt/pull/972>__
Create SECURITY.md by @auvipy and @jpadilla in #​973 <https://github.com/jpadilla/pyjwt/pull/973>__
Docs: Add PS256 encoding and decoding usage by @peter279k in #​992 <https://github.com/jpadilla/pyjwt/pull/992>__
Docs: Add API docs for PyJWK by @luhn in #​980 <https://github.com/jpadilla/pyjwt/pull/980>__
Docs: Add EdDSA algorithm encoding/decoding usage by @peter279k in #​993 <https://github.com/jpadilla/pyjwt/pull/993>__
Include checkers and linters for pyproject.toml in pre-commit by @cleder in #​1002 <https://github.com/jpadilla/pyjwt/pull/1002>__
Docs: Add ES256 decoding usage by @Gautam-Hegde in #​1003 <https://github.com/jpadilla/pyjwt/pull/1003>__
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [PyJWT](https://github.com/jpadilla/pyjwt) | project.dependencies | minor | `==2.10.1` → `==2.12.1` |
---
### Release Notes
<details>
<summary>jpadilla/pyjwt (PyJWT)</summary>
### [`v2.12.1`](https://github.com/jpadilla/pyjwt/blob/HEAD/CHANGELOG.rst#Unreleased-httpsgithubcomjpadillapyjwtcompare2121HEAD)
[Compare Source](https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1)
Changed
```
- Migrate the ``dev``, ``docs``, and ``tests`` package extras to dependency groups by @​kurtmckee in `#​1152 <https://github.com/jpadilla/pyjwt/pull/1152>`__
`v2.12.1 <https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1>`__
------------------------------------------------------------------------
Fixed
~~~~~
- Add missing ``typing_extensions`` dependency for Python < 3.11 in `#​1150 <https://github.com/jpadilla/pyjwt/issues/1150>`__
`v2.12.0 <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0>`__
-----------------------------------------------------------------------
Fixed
~~~~~
- Annotate PyJWKSet.keys for pyright by @​tamird in `#​1134 <https://github.com/jpadilla/pyjwt/pull/1134>`__
- Close ``HTTPError`` response to prevent ``ResourceWarning`` on Python 3.14 by @​veeceey in `#​1133 <https://github.com/jpadilla/pyjwt/pull/1133>`__
- Do not keep ``algorithms`` dict in PyJWK instances by @​akx in `#​1143 <https://github.com/jpadilla/pyjwt/pull/1143>`__
- Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by @​dmbs335 in `GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>`__
- Use PyJWK algorithm when encoding without explicit algorithm in `#​1148 <https://github.com/jpadilla/pyjwt/pull/1148>`__
Added
~~~~~
- Docs: Add ``PyJWKClient`` API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache).
`v2.11.0 <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0>`__
-----------------------------------------------------------------------
Fixed
~~~~~
- Enforce ECDSA curve validation per RFC 7518 Section 3.4.
- Fix build system warnings by @​kurtmckee in `#​1105 <https://github.com/jpadilla/pyjwt/pull/1105>`__
- Validate key against allowed types for Algorithm family in `#​964 <https://github.com/jpadilla/pyjwt/pull/964>`__
- Add iterator for JWKSet in `#​1041 <https://github.com/jpadilla/pyjwt/pull/1041>`__
- Validate `iss` claim is a string during encoding and decoding by @​pachewise in `#​1040 <https://github.com/jpadilla/pyjwt/pull/1040>`__
- Improve typing/logic for `options` in decode, decode_complete by @​pachewise in `#​1045 <https://github.com/jpadilla/pyjwt/pull/1045>`__
- Declare float supported type for lifespan and timeout by @​nikitagashkov in `#​1068 <https://github.com/jpadilla/pyjwt/pull/1068>`__
- Fix ``SyntaxWarning``\s/``DeprecationWarning``\s caused by invalid escape sequences by @​kurtmckee in `#​1103 <https://github.com/jpadilla/pyjwt/pull/1103>`__
- Development: Build a shared wheel once to speed up test suite setup times by @​kurtmckee in `#​1114 <https://github.com/jpadilla/pyjwt/pull/1114>`__
- Development: Test type annotations across all supported Python versions,
increase the strictness of the type checking, and remove the mypy pre-commit hook
by @​kurtmckee in `#​1112 <https://github.com/jpadilla/pyjwt/pull/1112>`__
Added
~~~~~
- Support Python 3.14, and test against PyPy 3.10 and 3.11 by @​kurtmckee in `#​1104 <https://github.com/jpadilla/pyjwt/pull/1104>`__
- Development: Migrate to ``build`` to test package building in CI by @​kurtmckee in `#​1108 <https://github.com/jpadilla/pyjwt/pull/1108>`__
- Development: Improve coverage config and eliminate unused test suite code by @​kurtmckee in `#​1115 <https://github.com/jpadilla/pyjwt/pull/1115>`__
- Docs: Standardize CHANGELOG links to PRs by @​kurtmckee in `#​1110 <https://github.com/jpadilla/pyjwt/pull/1110>`__
- Docs: Fix Read the Docs builds by @​kurtmckee in `#​1111 <https://github.com/jpadilla/pyjwt/pull/1111>`__
- Docs: Add example of using leeway with nbf by @​djw8605 in `#​1034 <https://github.com/jpadilla/pyjwt/pull/1034>`__
- Docs: Refactored docs with ``autodoc``; added ``PyJWS`` and ``jwt.algorithms`` docs by @​pachewise in `#​1045 <https://github.com/jpadilla/pyjwt/pull/1045>`__
- Docs: Documentation improvements for "sub" and "jti" claims by @​cleder in `#​1088 <https://github.com/jpadilla/pyjwt/pull/1088>`__
- Development: Add pyupgrade as a pre-commit hook by @​kurtmckee in `#​1109 <https://github.com/jpadilla/pyjwt/pull/1109>`__
- Add minimum key length validation for HMAC and RSA keys (CWE-326).
Warns by default via ``InsecureKeyLengthWarning`` when keys are below
minimum recommended lengths per RFC 7518 Section 3.2 (HMAC) and
NIST SP 800-131A (RSA). Pass ``enforce_minimum_key_length=True`` in
options to ``PyJWT`` or ``PyJWS`` to raise ``InvalidKeyError`` instead.
- Refactor ``PyJWT`` to own an internal ``PyJWS`` instance instead of
calling global ``api_jws`` functions.
`v2.10.1 <https://github.com/jpadilla/pyjwt/compare/2.10.0...2.10.1>`__
-----------------------------------------------------------------------
Fixed
~~~~~
- Prevent partial matching of `iss` claim by @​fabianbadoi in `GHSA-75c5-xw7c-p5pm <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm>`__
`v2.10.0 <https://github.com/jpadilla/pyjwt/compare/2.9.0...2.10.0>`__
-----------------------------------------------------------------------
Changed
```
- Remove algorithm requirement from JWT API, instead relying on JWS API for enforcement, by [@​luhn](https://github.com/luhn) in `#​975 <https://github.com/jpadilla/pyjwt/pull/975>`\_\_
- Use `Sequence` for parameter types rather than `List` where applicable by [@​imnotjames](https://github.com/imnotjames) in `#​970 <https://github.com/jpadilla/pyjwt/pull/970>`\_\_
- Add JWK support to JWT encode by [@​luhn](https://github.com/luhn) in `#​979 <https://github.com/jpadilla/pyjwt/pull/979>`\_\_
- Encoding and decoding payloads using the `none` algorithm by [@​jpadilla](https://github.com/jpadilla) in `#c2629f6 <https://github.com/jpadilla/pyjwt/commit/c2629f66c593459e02616048443231ccbe18be16>`\_\_
Before:
.. code-block:: pycon
> > > import jwt
> > > jwt.encode({"payload": "abc"}, key=None, algorithm=None)
After:
.. code-block:: pycon
> > > import jwt
> > > jwt.encode({"payload": "abc"}, key=None, algorithm="none")
- Added validation for 'sub' (subject) and 'jti' (JWT ID) claims in tokens by [@​Divan009](https://github.com/Divan009) in `#​1005 <https://github.com/jpadilla/pyjwt/pull/1005>`\_\_
- Refactor project configuration files from `setup.cfg` to `pyproject.toml` by [@​cleder](https://github.com/cleder) in `#​995 <https://github.com/jpadilla/pyjwt/pull/995>`\_\_
- Ruff linter and formatter changes by [@​gagandeepp](https://github.com/gagandeepp) in `#​1001 <https://github.com/jpadilla/pyjwt/pull/1001>`\_\_
- Drop support for Python 3.8 (EOL) by [@​kkirsche](https://github.com/kkirsche) in `#​1007 <https://github.com/jpadilla/pyjwt/pull/1007>`\_\_
Fixed
```
- Encode EC keys with a fixed bit length by @​etianen in `#​990 <https://github.com/jpadilla/pyjwt/pull/990>`__
- Add an RTD config file to resolve Read the Docs build failures by @​kurtmckee in `#​977 <https://github.com/jpadilla/pyjwt/pull/977>`__
- Docs: Update ``iat`` exception docs by @​pachewise in `#​974 <https://github.com/jpadilla/pyjwt/pull/974>`__
- Docs: Fix ``decode_complete`` scope and algorithms by @​RbnRncn in `#​982 <https://github.com/jpadilla/pyjwt/pull/982>`__
- Fix doctest for ``docs/usage.rst`` by @​pachewise in `#​986 <https://github.com/jpadilla/pyjwt/pull/986>`__
- Fix ``test_utils.py`` not to xfail by @​pachewise in `#​987 <https://github.com/jpadilla/pyjwt/pull/987>`__
- Docs: Correct `jwt.decode` audience param doc expression by @​peter279k in `#​994 <https://github.com/jpadilla/pyjwt/pull/994>`__
Added
```
- Add support for python 3.13 by [@​hugovk](https://github.com/hugovk) in `#​972 <https://github.com/jpadilla/pyjwt/pull/972>`\_\_
- Create SECURITY.md by [@​auvipy](https://github.com/auvipy) and [@​jpadilla](https://github.com/jpadilla) in `#​973 <https://github.com/jpadilla/pyjwt/pull/973>`\_\_
- Docs: Add PS256 encoding and decoding usage by [@​peter279k](https://github.com/peter279k) in `#​992 <https://github.com/jpadilla/pyjwt/pull/992>`\_\_
- Docs: Add API docs for PyJWK by [@​luhn](https://github.com/luhn) in `#​980 <https://github.com/jpadilla/pyjwt/pull/980>`\_\_
- Docs: Add EdDSA algorithm encoding/decoding usage by [@​peter279k](https://github.com/peter279k) in `#​993 <https://github.com/jpadilla/pyjwt/pull/993>`\_\_
- Include checkers and linters for `pyproject.toml` in `pre-commit` by [@​cleder](https://github.com/cleder) in `#​1002 <https://github.com/jpadilla/pyjwt/pull/1002>`\_\_
- Docs: Add ES256 decoding usage by [@​Gautam-Hegde](https://github.com/Gautam-Hegde) in `#​1003 <https://github.com/jpadilla/pyjwt/pull/1003>`\_\_
### [`v2.12.0`](https://github.com/jpadilla/pyjwt/releases/tag/2.12.0)
[Compare Source](https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0)
#### Security
- Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by [@​dmbs335](https://github.com/dmbs335) in [GHSA-752w-5fwx-jx9f](https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f)
#### What's Changed
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1132](https://github.com/jpadilla/pyjwt/pull/1132)
- chore(docs): fix docs build by [@​tamird](https://github.com/tamird) in [#​1137](https://github.com/jpadilla/pyjwt/pull/1137)
- Annotate PyJWKSet.keys for pyright by [@​tamird](https://github.com/tamird) in [#​1134](https://github.com/jpadilla/pyjwt/pull/1134)
- fix: close HTTPError to prevent ResourceWarning on Python 3.14 by [@​veeceey](https://github.com/veeceey) in [#​1133](https://github.com/jpadilla/pyjwt/pull/1133)
- chore: remove superfluous constants by [@​tamird](https://github.com/tamird) in [#​1136](https://github.com/jpadilla/pyjwt/pull/1136)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1135](https://github.com/jpadilla/pyjwt/pull/1135)
- chore(tests): enable mypy by [@​tamird](https://github.com/tamird) in [#​1138](https://github.com/jpadilla/pyjwt/pull/1138)
- Bump actions/download-artifact from 7 to 8 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​1142](https://github.com/jpadilla/pyjwt/pull/1142)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1141](https://github.com/jpadilla/pyjwt/pull/1141)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1145](https://github.com/jpadilla/pyjwt/pull/1145)
- fix: do not store reference to algorithms dict on PyJWK by [@​akx](https://github.com/akx) in [#​1143](https://github.com/jpadilla/pyjwt/pull/1143)
- Use PyJWK algorithm when encoding without explicit algorithm by [@​jpadilla](https://github.com/jpadilla) in [#​1148](https://github.com/jpadilla/pyjwt/pull/1148)
#### New Contributors
- [@​tamird](https://github.com/tamird) made their first contribution in [#​1137](https://github.com/jpadilla/pyjwt/pull/1137)
- [@​veeceey](https://github.com/veeceey) made their first contribution in [#​1133](https://github.com/jpadilla/pyjwt/pull/1133)
**Full Changelog**: <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0>
### [`v2.11.0`](https://github.com/jpadilla/pyjwt/releases/tag/2.11.0)
[Compare Source](https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0)
#### What's Changed
- Fixed type error in comment by [@​shuhaib-aot](https://github.com/shuhaib-aot) in [#​1026](https://github.com/jpadilla/pyjwt/pull/1026)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1018](https://github.com/jpadilla/pyjwt/pull/1018)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1033](https://github.com/jpadilla/pyjwt/pull/1033)
- Make note of use of leeway with nbf by [@​djw8605](https://github.com/djw8605) in [#​1034](https://github.com/jpadilla/pyjwt/pull/1034)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1035](https://github.com/jpadilla/pyjwt/pull/1035)
- Fixes [#​964](https://github.com/jpadilla/pyjwt/issues/964): Validate key against allowed types for Algorithm family by [@​pachewise](https://github.com/pachewise) in [#​985](https://github.com/jpadilla/pyjwt/pull/985)
- Feat [#​1024](https://github.com/jpadilla/pyjwt/issues/1024): Add iterator for PyJWKSet by [@​pachewise](https://github.com/pachewise) in [#​1041](https://github.com/jpadilla/pyjwt/pull/1041)
- Fixes [#​1039](https://github.com/jpadilla/pyjwt/issues/1039): Add iss, issuer type checks by [@​pachewise](https://github.com/pachewise) in [#​1040](https://github.com/jpadilla/pyjwt/pull/1040)
- Fixes [#​660](https://github.com/jpadilla/pyjwt/issues/660): Improve typing/logic for `options` in decode, decode\_complete; Improve docs by [@​pachewise](https://github.com/pachewise) in [#​1045](https://github.com/jpadilla/pyjwt/pull/1045)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1042](https://github.com/jpadilla/pyjwt/pull/1042)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1052](https://github.com/jpadilla/pyjwt/pull/1052)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1053](https://github.com/jpadilla/pyjwt/pull/1053)
- Fix [#​1022](https://github.com/jpadilla/pyjwt/issues/1022): Map `algorithm=None` to "none" by [@​qqii](https://github.com/qqii) in [#​1056](https://github.com/jpadilla/pyjwt/pull/1056)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1055](https://github.com/jpadilla/pyjwt/pull/1055)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1058](https://github.com/jpadilla/pyjwt/pull/1058)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1060](https://github.com/jpadilla/pyjwt/pull/1060)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1061](https://github.com/jpadilla/pyjwt/pull/1061)
- Fixes [#​1047](https://github.com/jpadilla/pyjwt/issues/1047): Correct `PyJWKClient.get_signing_key_from_jwt` annotation by [@​khvn26](https://github.com/khvn26) in [#​1048](https://github.com/jpadilla/pyjwt/pull/1048)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1062](https://github.com/jpadilla/pyjwt/pull/1062)
- Fixed doc string typo in \_validate\_jti() function [#​1063](https://github.com/jpadilla/pyjwt/issues/1063) by [@​kuldeepkhatke](https://github.com/kuldeepkhatke) in [#​1064](https://github.com/jpadilla/pyjwt/pull/1064)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1065](https://github.com/jpadilla/pyjwt/pull/1065)
- Update SECURITY.md by [@​auvipy](https://github.com/auvipy) in [#​1057](https://github.com/jpadilla/pyjwt/pull/1057)
- Typing fix: use `float` instead of `int` for `lifespan` and `timeout` by [@​nikitagashkov](https://github.com/nikitagashkov) in [#​1068](https://github.com/jpadilla/pyjwt/pull/1068)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1067](https://github.com/jpadilla/pyjwt/pull/1067)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1071](https://github.com/jpadilla/pyjwt/pull/1071)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1076](https://github.com/jpadilla/pyjwt/pull/1076)
- Fix TYP header documentation by [@​fobiasmog](https://github.com/fobiasmog) in [#​1046](https://github.com/jpadilla/pyjwt/pull/1046)
- doc: Document claims sub and jti by [@​cleder](https://github.com/cleder) in [#​1088](https://github.com/jpadilla/pyjwt/pull/1088)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1077](https://github.com/jpadilla/pyjwt/pull/1077)
- Bump actions/setup-python from 5 to 6 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​1089](https://github.com/jpadilla/pyjwt/pull/1089)
- Bump actions/stale from 8 to 10 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​1090](https://github.com/jpadilla/pyjwt/pull/1090)
- Bump actions/checkout from 4 to 5 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​1083](https://github.com/jpadilla/pyjwt/pull/1083)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1091](https://github.com/jpadilla/pyjwt/pull/1091)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1093](https://github.com/jpadilla/pyjwt/pull/1093)
- \[pre-commit.ci] pre-commit autoupdate by [@​pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#​1096](https://github.com/jpadilla/pyjwt/pull/1096)
- Resolve package build warnings by [@​kurtmckee](https://github.com/kurtmckee) in [#​1105](https://github.com/jpadilla/pyjwt/pull/1105)
- Support Python 3.14, and test against PyPy 3.10+ by [@​kurtmckee](https://github.com/kurtmckee) in [#​1104](https://github.com/jpadilla/pyjwt/pull/1104)
- Fix a `SyntaxWarning` caused by invalid escape sequences by [@​kurtmckee](https://github.com/kurtmckee) in [#​1103](https://github.com/jpadilla/pyjwt/pull/1103)
- Standardize CHANGELOG links to PRs by [@​kurtmckee](https://github.com/kurtmckee) in [#​1110](https://github.com/jpadilla/pyjwt/pull/1110)
- Migrate from `pep517`, which is deprecated, to `build` by [@​kurtmckee](https://github.com/kurtmckee) in [#​1108](https://github.com/jpadilla/pyjwt/pull/1108)
- Fix incorrectly-named test suite function by [@​kurtmckee](https://github.com/kurtmckee) in [#​1116](https://github.com/jpadilla/pyjwt/pull/1116)
- Fix Read the Docs builds by [@​kurtmckee](https://github.com/kurtmckee) in [#​1111](https://github.com/jpadilla/pyjwt/pull/1111)
- Bump actions/download-artifact from 4 to 6 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​1118](https://github.com/jpadilla/pyjwt/pull/1118)
- Escalate test suite warnings to errors by [@​kurtmckee](https://github.com/kurtmckee) in [#​1107](https://github.com/jpadilla/pyjwt/pull/1107)
- Add pyupgrade as a pre-commit hook by [@​kurtmckee](https://github.com/kurtmckee) in [#​1109](https://github.com/jpadilla/pyjwt/pull/1109)
- Simplify the test suite decorators by [@​kurtmckee](https://github.com/kurtmckee) in [#​1113](https://github.com/jpadilla/pyjwt/pull/1113)
- Improve coverage config and eliminate unused test suite code by [@​kurtmckee](https://github.com/kurtmckee) in [#​1115](https://github.com/jpadilla/pyjwt/pull/1115)
- Build a shared wheel once in the test suite by [@​kurtmckee](https://github.com/kurtmckee) in [#​1114](https://github.com/jpadilla/pyjwt/pull/1114)
- Bump actions/checkout from 5 to 6 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​1122](https://github.com/jpadilla/pyjwt/pull/1122)
- Thoroughly test type annotations, and resolve errors by [@​kurtmckee](https://github.com/kurtmckee) in [#​1112](https://github.com/jpadilla/pyjwt/pull/1112)
- Fix leeway value in usage documentation by [@​Matthew1471](https://github.com/Matthew1471) in [#​1124](https://github.com/jpadilla/pyjwt/pull/1124)
- Bump actions/download-artifact from 6 to 7 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​1125](https://github.com/jpadilla/pyjwt/pull/1125)
#### New Contributors
- [@​shuhaib-aot](https://github.com/shuhaib-aot) made their first contribution in [#​1026](https://github.com/jpadilla/pyjwt/pull/1026)
- [@​qqii](https://github.com/qqii) made their first contribution in [#​1056](https://github.com/jpadilla/pyjwt/pull/1056)
- [@​khvn26](https://github.com/khvn26) made their first contribution in [#​1048](https://github.com/jpadilla/pyjwt/pull/1048)
- [@​kuldeepkhatke](https://github.com/kuldeepkhatke) made their first contribution in [#​1064](https://github.com/jpadilla/pyjwt/pull/1064)
- [@​nikitagashkov](https://github.com/nikitagashkov) made their first contribution in [#​1068](https://github.com/jpadilla/pyjwt/pull/1068)
- [@​fobiasmog](https://github.com/fobiasmog) made their first contribution in [#​1046](https://github.com/jpadilla/pyjwt/pull/1046)
- [@​Matthew1471](https://github.com/Matthew1471) made their first contribution in [#​1124](https://github.com/jpadilla/pyjwt/pull/1124)
**Full Changelog**: <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0>
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4zMC4wIiwidXBkYXRlZEluVmVyIjoiNDMuMzAuMCIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AiLCJsYWJlbHMiOltdfQ==-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
==2.10.1→==2.12.1Release Notes
jpadilla/pyjwt (PyJWT)
v2.12.1Compare Source
Changed
Remove algorithm requirement from JWT API, instead relying on JWS API for enforcement, by @luhn in
#​975 <https://github.com/jpadilla/pyjwt/pull/975>__Use
Sequencefor parameter types rather thanListwhere applicable by @imnotjames in#​970 <https://github.com/jpadilla/pyjwt/pull/970>__Add JWK support to JWT encode by @luhn in
#​979 <https://github.com/jpadilla/pyjwt/pull/979>__Encoding and decoding payloads using the
nonealgorithm by @jpadilla in#c2629f6 <https://github.com/jpadilla/pyjwt/commit/c2629f66c593459e02616048443231ccbe18be16>__Before:
.. code-block:: pycon
After:
.. code-block:: pycon
Added validation for 'sub' (subject) and 'jti' (JWT ID) claims in tokens by @Divan009 in
#​1005 <https://github.com/jpadilla/pyjwt/pull/1005>__Refactor project configuration files from
setup.cfgtopyproject.tomlby @cleder in#​995 <https://github.com/jpadilla/pyjwt/pull/995>__Ruff linter and formatter changes by @gagandeepp in
#​1001 <https://github.com/jpadilla/pyjwt/pull/1001>__Drop support for Python 3.8 (EOL) by @kkirsche in
#​1007 <https://github.com/jpadilla/pyjwt/pull/1007>__Fixed
#​972 <https://github.com/jpadilla/pyjwt/pull/972>__#​973 <https://github.com/jpadilla/pyjwt/pull/973>__#​992 <https://github.com/jpadilla/pyjwt/pull/992>__#​980 <https://github.com/jpadilla/pyjwt/pull/980>__#​993 <https://github.com/jpadilla/pyjwt/pull/993>__pyproject.tomlinpre-commitby @cleder in#​1002 <https://github.com/jpadilla/pyjwt/pull/1002>__#​1003 <https://github.com/jpadilla/pyjwt/pull/1003>__v2.12.0Compare Source
Security
What's Changed
New Contributors
Full Changelog: https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0
v2.11.0Compare Source
What's Changed
optionsin decode, decode_complete; Improve docs by @pachewise in #1045algorithm=Noneto "none" by @qqii in #1056PyJWKClient.get_signing_key_from_jwtannotation by @khvn26 in #1048floatinstead ofintforlifespanandtimeoutby @nikitagashkov in #1068SyntaxWarningcaused by invalid escape sequences by @kurtmckee in #1103pep517, which is deprecated, tobuildby @kurtmckee in #1108New Contributors
Full Changelog: https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Renovate Bot.