Good for
Common use cases
People reach for a jwt decoder when a token landed in front of them — in a network capture, an `Authorization: Bearer` header copied out of DevTools, a cookie pulled from a request, a webhook signature value, or a Slack message with the words "is this token still valid?" attached — and the readable claims are the only thing that helps debug what the token actually represents. The classic situations are a production OAuth bug where the API rejected a token and the question is "was this token already expired by the time the client sent it" (the `exp` claim, read as a local timestamp, answers that without going to the issuer), an API integration where the question is "what scopes does this token actually carry" (the `scope` or `permissions` claim, read straight off the payload, answers that without rerunning the auth flow), an audience-mismatch debug where the API returned 401 with an opaque error and the question is "did the token's `aud` match the one this API expects" (the `aud` claim, surfaced as a readable string, ends the speculation), an issuer rotation where the `kid` in the header has to match a key on the JWKS endpoint, an `nbf` (not-before) claim being slightly off on a clock-skew bug, or simply a JWT pasted into a debugging note where the question is "what is this token even for?" The same pipeline gets called JWT decoding, JWT parsing, JWT debugging, or "JWT decoder online" depending on which tool wrote the docs you read; they all describe the same operation — split the dot-separated JWT, Base64URL-decode the header and payload, and surface the resulting JSON. This page does that operation locally with the browser's native `atob` (over a `-`/`_` → `+`/`/` rewrite that maps the URL-safe alphabet back to standard Base64), `TextDecoder` in fatal mode (so a corrupt token surfaces honestly instead of becoming U+FFFD soup), and `JSON.parse` for the readable structure. Doing it browser-local matters because JWTs in front of you routinely contain email addresses, account identifiers, role claims, signed scope tables, refresh-token references, and customer PII — payloads that have no business going through an arbitrary online service before you have read them. This page **decodes** the token; it does **not verify** it. Decoding is a structural operation — split, Base64URL-decode, JSON-parse — that any holder of the token can do without secrets. Verification is the cryptographic operation that proves the token was actually signed by the issuer it claims to be from, and that needs the issuer's public key (or HMAC secret), the matching algorithm, a JWKS lookup, a clock-skew policy, and ideally a server-side library that reads all of those correctly. A decoded JWT can be expired, forged, tampered with, or replayed; reading the claims is what tells you what the token *says about itself*, not what *the issuer says about the token*. Always treat decoded claims as untrusted input and re-verify on the server before acting on them.
Processing mode
Browser-local
Files are processed by your browser. They never reach our servers.