Changelog¶
v0.7.0 (2026-01-18)¶
Changes (♻️)¶
JWT & Validation
- (breaking)
decode()now returns a Pydantic instance, matching the claims validation model (defaultJWTClaims) (#91) - (breaking)
JWTDatetimeis removed,'exp','nbf','iat'are now typed asJWTDatetimeIntinJWTClaimsmodel and still serialize toint. (#91) - (breaking)
encode()/decode()claims validation parameter renamed tovalidation(#96)
Fixes (🐛)¶
JWT & Validation
nbfvalidation to be triggered only during decoding to allow for token creation with a Not Before claim. (#94)
v0.6.0 (2026-01-14)¶
New (✨)¶
Misc
- Comprehensive and versioned documentation hosted on GitHub Pages with automated CI (#84)
Changes (♻️)¶
JWT & Validation
- (breaking)
Stricter default behavior: use
JWTClaimsas default claims validation when decoding (and when encoding claims data is a raw dict) (#83) AlgorithmMismatchErroris now also raised during encoding when'alg'is valid but not matching the JWS instance (even when headers validation is disabled) (#82)- Trim exceptions message from uncontrolled string size (#80)
v0.5.0 (2026-01-12)¶
New (✨)¶
Algorithm & Key
- Asymmetric JWS signature algorithms support (#68) (#69) (#71)
- RSA PKCS1 v1.5 (
RS256,RS384,RS512) - RSA PSS (
PS256,PS384,PS512) - ECDSA (
ES256,ES256K,ES384,ES512) - EdDSA (
Ed25519,Ed448)
- RSA PKCS1 v1.5 (
- Pick algorithm from
Algstr Enum (#57) - Asymmetric keys support (#67) (#70)
- RSA key pair
- EC (Elliptic Curve) key pair for ECDSA
- OKP (Octet Key Pair) for EdDSA
- Key generation (#72)
JWT & Validation
- Validation can be configured via
ValidationConfigand supports internal params (leeway, now,allow_future_iat) (#62) (#75) - Time integrity validation update (#55)
- add leeway support for
'iat','exp', and'nbf'comparison against now - new check that
'iat'is not in the future. Can be disabled via validation config.
- add leeway support for
- Choose timestamp serialization format (
intorfloat) (#53)- Configure
JWTDatetimedefault behavior (defaultint) - New
JWTDatetimeInt/JWTDatetimeFloatfield type to serialize asint/floattimestamp
- Configure
- Time spoofing for validation and testing purposes (#51)
Misc
- CI: run tests with and without
cryptographyinstalled - CI: documentation deployment
Changes (♻️)¶
JWT & Validation
.with_issued_at()and.with_expiration()now preserve time delta with'iat'(#49)
v0.4.1 (2026-01-03)¶
Fixes (🐛)¶
JWT & Validation
'exp'and'nbf'incorrect validation when'iat'was present (#47)
v0.4.0 (2026-01-02)¶
New (✨)¶
JWT & Validation
JWTClaimsnow raisesTokenNotYetValidErrorif'nbf'>'iat'(or present time) (#41)JWTcan receive amax_token_bytesparameter to control the allowed max token size (#40)Validationflag can be passed to choose between two modes: (#39)- Validation.DEFAULT (default when nothing is specified)
- Validation.DISABLE
Changes (♻️)¶
JWT & Validation
- (breaking)
Refactoring of public and private interfaces (#39)
- module-level
encode(),decode()andinspect()are now thread safe and written as functions instead of a local statefulJWTinstance tokenparam indecode()is renamedcompactJWTmethods now always return aJWSToken
- module-level
Misc
- (breaking)
Refactoring of exception handling (#40)
- base exception is now
SuperJWTError - improved exceptions hierarchy
- base exception is now
v0.3.0 (2025-12-30)¶
New (✨)¶
JWT & Validation
- Validate claims or headers with custom pydantic models for
decode()(#34) - New exception
AlgorithmMismatchErroris raised during decoding when'alg'is valid but not declared as processable by the JWS instance (#31) - Expired token now raises
TokenExpiredErrorupon claims validation (#24)
Changes (♻️)¶
JWT & Validation
- (breaking)
Refactoring of claims and headers validation (#34)
encode()new validation default behavior:- when
claimsis passed as a pydantic instance, validate against it automatically - when
claimsis passed as a dict or empty, no automatic validation - when
headers(optional) is passed as a pydantic instance, validate against itautomatically - when
headers(optional) is passed as a dict, validate againstJOSEHeader
- when
decode()new validation default behavior:- no automatic validation for claims by default
- headers are automatically validated against
JOSEHeader
- claims & headers default validation can be overridden by passing a pydantic model to the validation params in
encode()/decode()
- (breaking)
Refactoring of
JWTClaimspydantic model (#17)- defaulting with no
'iat'set with_issued_at()method added
- defaulting with no
v0.2.0 (2025-12-27)¶
Changes (♻️)¶
JWT & Validation
- State, data integrity and consistency of JWT and JWS instances improved (#15)
- b64=false in header will raise an
InvalidHeaderErroras this is not a supported feature (#13) - (breaking)
SecondDatetimerenamed toJWTDatetime(#6) - Better tests for datetime claims
Misc
- Add compatibility for python 3.10 & 3.11, was working only for python 3.12-3.14 previously
Fixes (🐛)¶
JWT & Validation
inspect()now works with detached payloadHeadersValidationErrorexception no longer throwsIndexError(#14)- Validation for custom datetime claims is now working properly (#7)
v0.1.0 (2025-12-08)¶
New (✨)¶
Algorithm & Key
- HMAC with SHA256/384/512 signature
JWT & Validation
- JWT/JWS encode + decode + inspect features
- Automatic claims validation with Pydantic
- Custom claims definition with Pydantic
Misc
- CI (tests, linter, release)