# What changed in jose

> 52 changes in jose 6 from its official release notes, upgrade guides and advisories: 16 breaking, 8 security, 3 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/jose/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## jose 6

### Breaking changes

- Mixed b64 modes are rejected for empty General JWS payloads. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Mixed payload encoding modes are rejected. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Empty protected headers and JWE AAD members are rejected. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Verification key metadata is enforced. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- JWT verification policies must be explicit. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- EmbeddedJWK now rejects a non-string alg value. (6.2.8) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.8)
- Decryption now enforces a single recipient for dir and ECDH-ES algorithms. (6.2.8) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.8)
- Presence checks now require properties owned by the JOSE object. (6.2.7) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.7)
- Truncated ASN.1 key data is rejected. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Characters outside the Base64URL alphabet are rejected. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Duplicate crit values are rejected when producing JOSE objects. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Rejects a crv option that is not implied by the selected algorithm. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Invalid UTF-8 is rejected in JOSE Headers and JWT Claims Sets. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Unencoded payloads are rejected when using JWS Compact Serialization. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Non-ASCII token segments now produce JOSE errors. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Failed decompression is now rejected with a JWEInvalid error. (6.2.2) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.2)

### Security

- AES-GCM tag boundaries are enforced. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- DER truncated past its outer length is rejected. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- The ext and key_ops parameters are validated. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Protected headers cannot be replaced. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Unencoded payload strings are validated. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Unsecured protected headers are validated. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- JWE objects with colliding generated Key Management Parameters are now rejected. (6.2.9) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.9)
- Invalid PBES2 p2c values are now cleanly rejected. (6.2.3) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.3)

### New APIs and options

- Discriminated JOSE error types are available for more precise TypeScript error handling. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Re-introduces support for the JWE zip (Compression Algorithm) Header Parameter. (6.2.0) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.0)
- setKeyManagementParameters is now exposed on a GeneralEncrypt Recipient. (6.1.1) — [release notes](https://github.com/panva/jose/releases/tag/v6.1.1)

### Tooling

- JOSE identifier unions and JWK narrowing improve TypeScript type precision. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- JWK narrowing improves TypeScript type precision. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)

### Fixes and other changes

- Builder claim values are validated. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Invalid decrypted CEK lengths are concealed. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Invalid duration inputs are rejected. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Explicit encryption parameters are validated. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Key generation and import options are validated. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Key resolution inputs are normalized. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Empty octet-sequence keys are accepted. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Invalid remote duration values are rejected. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Overlapping remote reloads are ordered. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Serialization members are consumed only once. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- Serialized header values are validated. (6.2.10) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.10)
- The PBES2 p2c parameter is no longer deprecated in the type definitions. (6.2.9) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.9)
- Type declarations now accept host CryptoKey declarations. (6.2.6) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.6)
- The clockTolerance option is validated to ensure it is finite. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- CryptoKey types are corrected for more accurate TypeScript usage. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- The currentDate option is validated to ensure it is finite. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Claim values are compared correctly when validation options are falsy. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- JWE processing now handles additional authenticated data with zero length. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Key management parameters are forwarded correctly when a JWE has a single recipient. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- JWK types are corrected for more accurate TypeScript usage. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- JWT header types are corrected for more accurate TypeScript usage. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Key and result type inference is improved for TypeScript consumers. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
- Key resolver types are corrected for more accurate TypeScript usage. (6.2.5) — [release notes](https://github.com/panva/jose/releases/tag/v6.2.5)
