Developer Tools

JWT Decoder

Decode compact JWT header and payload JSON locally. Inspect unverified timing claims and download a decoded report. This tool does not verify signatures or establish token trust.

Your content stays on your device Free, with no account
Inspect token contents on your device Decode only · unverified
Up to 64,000 UTF-16 units. Three unpadded Base64URL segments. Optional leading Bearer prefix is accepted.

Unverified contents. Anyone can create these claims. Decoding does not verify a signature, issuer, audience or permission to access anything.

Tokens may contain private claims. Input stays in this page and is not uploaded or saved. Reports contain decoded claims; handle them as private data.

DECODED · NOT VERIFIED

Ready. Decode a token to inspect its unverified contents.

A FEW SIMPLE STEPS

How to use JWT Decoder

  1. Paste a three-part compact token, optionally preceded by Bearer, or load the clearly unsecured demonstration.
  2. Select Decode JWT. Review decoded header and payload JSON; their contents remain unverified.
  3. Inspect NumericDate timing claims against the captured device clock, with no clock-skew allowance.
  4. Copy or download the decoded report. It includes claims and unverified notices, without automatically including the original token or signature bytes.
PRIVATE BY DESIGN

Why use this tool?

Decoding happens entirely in your browser, with no token uploads, external key lookup, account, dependencies or saved input history. Claims and URLs are displayed as plain text and never executed or followed. Reports retain the unverified notice so decoding is not confused with authentication.

Tool inputs stay in your browser. Only your theme preference is saved on this device.

A few things worth knowing

Does this verify JWT signatures or permissions?

No. It decodes readable segments and inspects the claims as provided. No signature, MAC, key, issuer, audience, critical-header semantics or authorization policy is verified. Changing the payload can still produce a decodable token. Never use this result as proof that a token is genuine, trusted or usable. No signing or secret-key input is offered.

Which token formats are supported?

Three-part compact tokens with nonempty Base64URL-encoded JSON-object header and payload are supported. A surrounding whitespace trim and optional leading Bearer prefix are accepted. Segments must use canonical unpadded Base64URL; embedded whitespace, invalid unused bits, padded Base64 and malformed UTF-8 are rejected. Encrypted five-part JWE, detached payloads and b64=false payloads are not supported. Duplicate JSON keys anywhere in header or payload are rejected.

What do the timing comparisons mean?

exp, nbf and iat are inspected only when supplied as JSON numbers. NumericDate uses seconds since the Unix epoch. An exp equal to or before the captured device time is described as expired according to that claim; nbf after that time is described as not-before in the future. iat is simply compared with the clock. Missing or wrongly typed claims are labeled. No overall validity verdict is produced, and missing exp does not imply unlimited validity.

How accurate is the clock display?

The comparison is a snapshot taken when Decode is clicked, using your device clock and zero leeway. UTC dates display millisecond precision; fractional JSON numbers are converted to browser numeric values for timing comparisons only, while original JSON number spellings remain in the output. Non-finite or out-of-range dates are labeled unavailable. Decode again to refresh. Correct time comparisons still do not verify the token.

What happens with alg=none or an empty signature?

The decoder displays explicit notices. alg=none declares an unsecured token, and an empty signature is identified separately. Neither is treated as authentication. The example uses alg=none with an empty signature and demonstration claims, rather than a real credential. The algorithm summary may be shortened after 80 text units; full header JSON remains available.

What are the limits and privacy behavior?

The input limit is 64,000 UTF-16 units before trimming. The shared JSON checker also limits decoded structures to 50,000 tokens and 100 nested containers. Errors expose no partial exports. Input edits and Clear remove old results; Clear empties the token. Nothing is uploaded or saved. Reports contain decoded claims and should be treated as private data. Only the site’s theme preference is stored.