Instant Local Decoding
Header and payload are decoded and pretty-printed as JSON the moment you paste the token — no buttons to click, no server round-trips.
Decode JWT (JSON Web Token) header, payload and signature instantly. See exp, iat, nbf claim status. 100% client-side, no uploads, no tracking.
Instant JWT decoding with claim status indicators and pretty-printed JSON — right in your browser. No uploads, no sign-up, no limits.
Copy a JWT and paste it into the input box at the top. The tool will decode it instantly — no buttons to click.
The decoded header (algorithm and token type) and payload (claims) appear as pretty-printed JSON below the input.
The iat, nbf and exp claims are parsed and compared to the current time. Expired or not-yet-valid tokens are flagged in red or yellow.
Use the Copy button to copy the decoded header or payload JSON to your clipboard for further analysis.
Instant decoding with claim validation, right in your browser.
Header and payload are decoded and pretty-printed as JSON the moment you paste the token — no buttons to click, no server round-trips.
The `exp`, `nbf` and `iat` claims are parsed and compared to the current time, with clear color-coded status for expired, not-yet-valid and active tokens.
Correctly decodes Base64URL payloads that contain non-ASCII characters, including emoji and international text.
The decoded header and payload are formatted with proper indentation for easy reading and debugging.
All decoding happens locally in your browser. Your token is never uploaded, logged, or stored.
No registration, no API key, no daily quotas. Free for personal and commercial use, forever.
A JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. JWTs are commonly used for authentication and authorization in web applications. After a user logs in, the server issues a JWT containing claims about the user (such as their user ID and roles). The client includes this JWT in the Authorization header of subsequent requests, allowing the server to verify the user's identity without storing session state.
A JWT consists of three parts separated by dots: `header.payload.signature`. The header specifies the token type (JWT) and the signing algorithm (e.g., HS256, RS256). The payload contains the claims — statements about the user and additional metadata. The signature is used to verify that the token hasn't been tampered with. Only the header and payload are Base64URL-decoded to read the claims; the signature is a binary value used only for verification.
Decoding a JWT means Base64URL-decoding the header and payload to read the claims. This does not require any secret key — anyone can decode a JWT. Decoding tells you what the token claims, but it does not prove that the claims are true or that the token was issued by a trusted party.
Verifying a JWT means checking the signature using the secret key (for HMAC algorithms) or public key (for RSA/ECDSA algorithms). This confirms that the token was issued by the holder of the secret/private key and that it hasn't been modified since. Only verified tokens should be trusted for security decisions. Our tool decodes JWTs but does not verify them — for verification, use a library like jsonwebtoken (Node.js) or PyJWT (Python).
Registered claims (defined in RFC 7519): `sub` (subject — the user ID), `iss` (issuer), `aud` (audience), `exp` (expiration time), `nbf` (not before), `iat` (issued at), `jti` (JWT ID). Private claims: custom claims agreed upon by the parties, such as `role`, `permissions`, `email`, or `name`. Our tool displays all claims in the payload as formatted JSON.
Real-world scenarios where a JWT decoder is essential.
Inspect the claims of a JWT issued by your auth server to confirm the user ID, roles, or expiration time.
Quickly verify that the JWT you generate on the server contains the expected payload before sending it to the client.
See exactly how a JWT is structured — header, payload, signature — without writing any code or installing libraries.
Instantly see whether a 401 error is caused by an expired `exp` claim or a not-yet-valid `nbf` claim.
A side-by-side comparison of popular JWT decoding tools.
| Feature | NovaTools | JWT.io | JWT.ms |
|---|---|---|---|
| Privacy (no upload) | 100% local | Uploads to server | Uploads to server |
| Price | Free unlimited | Free with ads | Free |
| Claim status (exp/nbf/iat) | Color-coded | ||
| Pretty-printed JSON | |||
| UTF-8 safe decoding | Limited | ||
| Mobile friendly | Limited | Limited | |
| Works offline | After page load |
JWT.io and JWT.ms upload your token to their servers for decoding. Our tool decodes everything locally — your JWT never leaves your browser.
Key facts about JSON Web Tokens.
| Symbol / Code | Description | Example |
|---|---|---|
header.payload.signature | Three Base64URL-encoded parts separated by dots. | eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.abc123 |
header | JSON object with algorithm (alg) and token type (typ). | {"alg":"HS256","typ":"JWT"} |
payload | JSON object with claims about the user and token. | {"sub":"123","exp":1735689600} |
signature | HMAC/RSA/ECDSA signature. Not decoded, only verified. | HMAC-SHA256(header.payload, secret) |
header.payload.signatureThree Base64URL-encoded parts separated by dots.
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.abc123headerJSON object with algorithm (alg) and token type (typ).
{"alg":"HS256","typ":"JWT"}payloadJSON object with claims about the user and token.
{"sub":"123","exp":1735689600}signatureHMAC/RSA/ECDSA signature. Not decoded, only verified.
HMAC-SHA256(header.payload, secret)| Symbol / Code | Description | Example |
|---|---|---|
sub | Subject — identifies the user or entity. | "sub":"user-123" |
iss | Issuer — identifies who issued the token. | "iss":"auth.example.com" |
aud | Audience — intended recipient of the token. | "aud":"api.example.com" |
exp | Expiration time (Unix timestamp in seconds). | "exp":1735689600 |
iat | Issued at (Unix timestamp in seconds). | "iat":1735603200 |
nbf | Not before — token is not valid before this time. | "nbf":1735603200 |
subSubject — identifies the user or entity.
"sub":"user-123"issIssuer — identifies who issued the token.
"iss":"auth.example.com"audAudience — intended recipient of the token.
"aud":"api.example.com"expExpiration time (Unix timestamp in seconds).
"exp":1735689600iatIssued at (Unix timestamp in seconds).
"iat":1735603200nbfNot before — token is not valid before this time.
"nbf":1735603200| Symbol / Code | Description | Example |
|---|---|---|
HS256 | HMAC with SHA-256. Symmetric — same secret for sign and verify. | {"alg":"HS256"} + shared secret |
RS256 | RSA signature with SHA-256. Asymmetric — private key signs, public key verifies. | {"alg":"RS256"} + RSA 2048-bit key pair |
ES256 | ECDSA with P-256 and SHA-256. Asymmetric — smaller signatures than RSA. | {"alg":"ES256"} + EC P-256 key pair |
none | No signature. INSECURE — never use in production. | {"alg":"none"} — CRITICAL vulnerability |
HS256HMAC with SHA-256. Symmetric — same secret for sign and verify.
{"alg":"HS256"} + shared secretRS256RSA signature with SHA-256. Asymmetric — private key signs, public key verifies.
{"alg":"RS256"} + RSA 2048-bit key pairES256ECDSA with P-256 and SHA-256. Asymmetric — smaller signatures than RSA.
{"alg":"ES256"} + EC P-256 key pairnoneNo signature. INSECURE — never use in production.
{"alg":"none"} — CRITICAL vulnerabilityJWT decoding happens entirely in your browser.
Learn what a JWT is, what its three parts mean, how iat, nbf and exp claims work, and the critical difference between decoding and verifying a token.
Learn what Base64 is, when to use standard vs URL-safe Base64, and how to encode or decode text locally in your browser without uploading data.
Discover the best free tools for developers that boost productivity without breaking the bank. From code formatters to API testers, these tools will streamline your workflow.