Is the JWT decoder free?
Yes. It is completely free to use, with no signup, no account, and no paywall.
Do I need to install anything?
No. It runs in any modern browser on desktop or mobile, with nothing to download and nothing to configure.
Does it stay local?
Yes. The token is decoded entirely in your browser and never sent anywhere, which matters because JWTs often carry account and session details.
Does this tool verify the token, and does that matter?
It does not verify, and yes, it matters enormously. Decoding only reverses the base64url encoding of the header and payload, which requires no key at all. Verification is a cryptographic check of the signature against a secret (HS256) or a public key (RS256), and only that check proves the token is authentic and unmodified. This decoder is an inspection tool for debugging, not an authentication step, and no security decision should ever rest on it.
Is it safe to paste a production token into this page?
The decoding runs entirely in your browser: the token is split and decoded with local JavaScript and is never sent to a server, never logged, and never stored. That is a genuine security property and the reason this tool exists rather than sending you to a service that posts your token over the network. Even so, treat any live token you paste anywhere as something you would rather rotate afterwards, because a valid JWT is a bearer credential: whoever holds it is the user.
Why can I read the payload without any key?
Because the payload is only base64url-encoded JSON, and base64url is an encoding, not a cipher. The JWT design assumes claims are readable by anyone in the chain, including the browser. The signature exists so that a recipient can detect tampering, not to keep the contents private. If you need the claims to be confidential, you need JWE (an encrypted token) or you keep the sensitive data server-side and put only an opaque reference in the token.
My token decodes fine but the API rejects it. Why?
A successful decode tells you nothing about validity. The most likely causes are that the token has expired (check exp against the current Unix time in seconds), the signature does not match the key the server holds, the iss or aud claims do not match what the server expects, or the token was issued by a different environment. Decoding gives you the claims to inspect; the rejection reason will be in one of them or in the signature.
What is the third segment of a JWT?
It is the signature: the result of running the algorithm named in the header over the first two segments, joined with a dot. For HS256 it is an HMAC computed with a shared secret. For RS256 it is an RSA signature made with a private key and checkable with the public key. This tool does not display or evaluate it, so you should assume nothing about it from a successful decode.
Can I edit the payload and re-sign the token here?
No. This tool is read-only. Creating a valid token requires the signing key, and if you have that key you should be minting tokens from your own backend or auth provider rather than from a web page. Any tool that offers to sign a JWT for you in the browser is asking you to paste a signing secret, which is a habit worth avoiding.