Skip to content
Aarrange

Best JWT Decoders in 2026: 7 Tools Compared

Seven JWT decoders compared on checks, error help and where your token goes.

Updated We make Aarrange, and we rate it by the same rules as the others.

Quick comparison

ToolScorePrivacyPriceSign-upVerdict
1Aarrange14 / 15In your browserFreeNoneCatches expired tokens and points to the broken character; no encoder yet.
2jwt.io13 / 15In your browserFreeNoneThe best known, with an encoder; it calls an expired token valid.
3token.dev13 / 15In your browserFreeNoneWarns about expired tokens and does PASETO; weak on broken tokens.
4FusionAuth12 / 15In your browserFreeNoneEdit the payload and re-sign; no dates or expiry check.
5jwt.ms11 / 15In your browserFreeNoneThe best claim explanations; it cannot check a signature.
6SuperTokens10 / 15In your browserFreeNoneA simple encoder and decoder; HS256 checks only.
7jstoolset9 / 15Partly on a serverFreeNoneA clear claims table; its share button uploads your token.
On this page

Scores

Updated

Out of 5, from what each tool does. The reasons are in the reviews below.

ToolPrivacyFeaturesPrice
Aarrange545
jwt.io535
token.dev535
FusionAuth525
jwt.ms515
SuperTokens415
jstoolset315

What makes a good JWT decoder

Every JWT decoder can split a token at the dots and show the JSON inside. That part is easy. The differences show up when something is wrong with the token, and that is usually why you opened the decoder in the first place.

A good decoder answers the questions a server asks. Is the signature right for this key? Has the token expired, or is it not valid yet? What do claims like aud, scp or tid mean? When a token is broken, a good decoder says where and why, not just "invalid".

We tested each tool with the same tokens: a normal HS256 token that expired on 24 October 2025, a token with a broken payload, and a token with Bearer in front of it. The results were not what we expected. Only two of the seven tools said that the expired token had expired.

A live token is a password

Anyone who has a valid access token can use it until it expires. So the first question about a JWT decoder is the same as for a password field: where does the text go?

Good news: all seven decode in your browserWe watched the network in Chrome while we pasted a test token into each tool. None of them sent the token to a server while decoding. Two details still matter. SuperTokens sends usage analytics to its own API and to Amplitude when you paste; the token was not in those requests. And jstoolset has a Permanent Link button that uploads the token to its server and makes a short link to it.

Even with a tool that runs in your browser, the safest habit is to decode test tokens, not production ones. If you must look at a real token, use a tool you can check, and let the token expire or revoke it afterwards.

Detailed reviews

01

Aarrange

Catches expired tokens and points to the broken character; no encoder yet.

Privacy
In your browser
Price
Free
Sign-up
None
Privacy
Decodes and verifies in your browser
Features
Four of five checks; no encoder
Price
Free, no paid tier

Pros

  • Decodes and verifies in your browser; nothing is uploaded and nothing goes in the URL
  • Warns about expired tokens, tokens that are not valid yet, tokens with no `exp`, and `alg: none`
  • Verifies HS, RS, PS, ES and EdDSA signatures with a secret, PEM, X.509 certificate, JWK or a whole JWKS (it picks the key by `kid`)
  • Marks the exact character where a broken token fails, with the reason and the fix
  • Explains each claim, including OpenID Connect and Microsoft Entra claims

Cons

  • No encoder: it cannot make or sign a new token
  • Smaller and newer than jwt.io
  • No dark mode

Aarrange's JWT Decoder is built around the question a server asks: would this token be accepted? Paste a token and the Claims view shows each claim with its meaning and every time as a date. A red note says when the token has expired or the signature does not match, and an amber note flags risks such as no exp, alg: none or a short HMAC secret.

It reads tokens the way people copy them, with Bearer , quotes or line breaks around them, and Clean token removes the rest. When a token is broken, it marks the character where decoding fails and says what to change, for example the quote that is missing in the payload.

To verify, paste the key in the Key tab: a shared secret for HS256, or for RS, PS, ES and EdDSA tokens a PEM block, an X.509 certificate, a JWK or the issuer's whole JWKS. It never fetches a key from a URL, and it decodes and verifies in your browser. You can watch the Network tab in DevTools to check that.

The gap is creating tokens. Aarrange has no encoder, so to make and sign a test token you need jwt.io, token.dev or a library.

02

jwt.io

The best known, with an encoder; it calls an expired token valid.

Privacy
In your browser
Price
Free
Sign-up
None
Website
jwt.io
Privacy
Decodes in your browser
Features
Encoder; no expiry warning or error place
Price
Free to use

Pros

  • Decoder and encoder in one page
  • Generates example tokens for 22 algorithms, from HS256 to EdDSA (Ed25519) and post-quantum ML-DSA
  • Claims Breakdown shows times as dates and explains the registered claims
  • Verifies with a secret, or with a public key as PEM or JWK

Cons

  • Showed "Valid JWT" for our token that expired a year earlier
  • Error messages name the broken part but not the place
  • Run by Auth0, so the page also promotes Auth0 sign-up and an ebook

jwt.io is the name most developers know, and it is published by Auth0. The current debugger has a JWT Decoder tab and a JWT Encoder tab, a Claims Breakdown view that turns iat and exp into dates, and signature checks with a secret or a public key in PEM or JWK form. Its example generator covers 22 algorithms, including Ed25519 and the post-quantum ML-DSA family.

We pasted our test token and watched the network: no request carried the token. Decoding happens in your browser.

The weak spot is the verdict. Our test token expired on 24 October 2025, and jwt.io still showed "Valid JWT" on top. The Claims Breakdown shows the expiry date, but nothing says that the date has passed. A server would reject that token. When a token is broken, jwt.io says which part is wrong, but not where in it.

03

token.dev

Warns about expired tokens and does PASETO; weak on broken tokens.

Privacy
In your browser
Price
Free
Sign-up
None
Website
token.dev
Privacy
Decodes and verifies in your browser
Features
Expiry warning and encoder; fewer algorithms
Price
Free to use

Pros

  • Said "Jwt is expired" for our expired token, and shows times as "a year ago" with the date
  • Encodes and decodes, and also handles PASETO tokens
  • Says on the page that verification happens in the browser only

Cons

  • Algorithms stop at HS, RS and ES: no PS256 and no EdDSA
  • A broken token only gets "Jwt cannot be parsed", and the old payload stays on screen
  • Does not read a token with `Bearer ` in front

token.dev comes from Okta's developer team (the footer links to Okta's developer site). It is one of only two tools in this test that told us our expired token had expired: the status line read "Jwt is expired" and the claims showed "Expired: a year ago" with the date.

It encodes as well as decodes, and it has a second tab for PASETO, an alternative token format. The algorithm list covers HS256 to HS512, RS256 to RS512, ES256 to ES512 and none. There is no PS256 or EdDSA.

Broken input is where it falls short. Our token with a broken payload got "Jwt cannot be parsed", while the header and payload panes kept showing the previous token. A token with Bearer in front got the same message.

04

FusionAuth

Edit the payload and re-sign; no dates or expiry check.

Privacy
In your browser
Price
Free
Sign-up
None
Privacy
Decodes in your browser
Features
Re-sign and verify; no dates or warnings
Price
Free to use

Pros

  • Edit the header or payload and the token changes with it
  • Verifies with a secret, PEM or JWK
  • Tells you plainly not to paste production tokens

Cons

  • Shows `exp` and `iat` as raw numbers, with no dates and no expiry warning
  • No claim explanations
  • Showed non-ASCII text such as ë as wrong characters in our earlier test

FusionAuth's decoder lives in its documentation. It shows the token, the header and the payload in three editors, and the header and payload are editable: change a claim and the token is rebuilt, which makes it a quick way to make a test token. Signature checks take a secret, a PEM key or a JWK.

The page says the data never leaves the page, and our network check agreed. It also tells you not to paste production tokens, which is good advice for every tool here.

It does less to explain a token. Times stay as Unix numbers, there is no warning when a token has expired, and claims have no descriptions. In our tests a week earlier, it also showed the name "Zoë" as mojibake (wrongly decoded text).

05

jwt.ms

The best claim explanations; it cannot check a signature.

Privacy
In your browser
Price
Free
Sign-up
None
Website
jwt.ms
Privacy
Decodes in your browser
Features
Decode and explain only
Price
Free to use

Pros

  • Explains every claim with a sentence and a link to the standard
  • Knows Microsoft Entra ID (Azure AD) claims
  • Says on the page that the token never leaves your browser

Cons

  • No signature check at all
  • No warning for an expired token
  • Showed nothing at all for our broken token

jwt.ms is a plain decoder with one strong feature: the Claims tab. Each claim gets a full sentence from the standard that defines it, with the section number, so exp comes with the RFC 7519 text and name with the OpenID Connect text. It also explains claims from Microsoft Entra ID (formerly Azure AD) tokens.

That is all it does. There is no field for a secret or a public key, so it cannot check a signature. It showed our expired token's exp as a date with no warning, and it showed a blank result for the broken token.

06

SuperTokens

A simple encoder and decoder; HS256 checks only.

Privacy
In your browser
Price
Free
Sign-up
None
Privacy
Decodes locally; sends usage analytics
Features
Encoder and HS256 check only
Price
Free to use

Pros

  • Encode and decode on one page
  • Clean layout
  • Says that all processing happens on the client side

Cons

  • Signature check is HMAC with a secret only
  • Sends usage analytics when you paste a token (the token was not in them)
  • No dates, no expiry warning and no error message for a broken token

SuperTokens, an open-source login provider, has a small encoder and decoder on its site. Paste a token and you see the header, the payload and the HMAC formula with a field for your secret.

It decodes in your browser, but it is not quiet: when we pasted our token, the page sent analytics events to SuperTokens' API and to Amplitude. We checked those requests and the token was not in them.

It shows exp as a raw number with no warning, and a week earlier it kept showing the previous payload when we pasted a broken token, with no error at all.

07

jstoolset

A clear claims table; its share button uploads your token.

Privacy
Partly on a server
Price
Free
Sign-up
None
Privacy
Share button uploads the token
Features
Decode and explain only
Price
Free, no ads

Pros

  • Explanation table with each claim, its value and dates in ISO format
  • JSON tree of the decoded token
  • No ads

Cons

  • The Permanent Link button uploads the token to its server
  • No signature check
  • Error messages are vague, and blamed the wrong cause for a `Bearer ` prefix

jstoolset decodes the token in your browser and shows it twice: as a JSON tree and as an explanation table with each claim, its value, ISO dates for the times and a short meaning. It is easy to read.

Be careful with the Permanent Link button. When we pressed it, the page sent our test token to jstoolset.com/blob/set/ and changed the address to a short link to the saved token. That is handy for a test token and risky for a real one.

There is no signature check and no expiry warning. In our earlier test, a broken token got "Invalid JSON", and a token with Bearer in front got a message that blamed the header.

Search interest

How often people search Google for each tool by name, month by month over five years. It shows which names people know, not how many people use the tool.

Average search interest per tool, 0 to 100
Tool5 yearsPast year
jwt.io4740
jwt.ms<1<1
Aarrange<1<1
token.dev<10
jstoolset00
Source: Google Trends, worldwide web search, Oct 2021 to Oct 2026 (Oct 2026 is a part month). This is search interest, not visits: 100 is the busiest month of any name in this chart, and the table shows averages. Fetched 2026-10-31.

Full feature comparison

This table shows every feature we checked across all seven tools: full support, partial support, or no support.

FeatureAarrangejwt.iotoken.devFusionAuthjwt.msSuperTokensjstoolset
Read the token
Decode header and payloadYesYesYesYesYesYesYes
Times as datesYesYesYesNoYesNoYes
Claim explanationsYesYesPartlyNoYesNoYes
Check the token
Warns when the token has expiredYesNoYesNoNoNoNo
Verify with a secret (HS256)YesYesYesYesNoYesNo
Verify with a public key (RS, ES)YesYesYesYesNoNoNo
Points to where a broken token failsYesNoNoPartlyNoNoNo
Make a token
Encode and sign a new tokenNoYesYesYesNoYesNo
Privacy and price
Decodes in your browserYesYesYesYesYesYesYes
Token never sent to a serverYesYesYesYesYesYesPartly
Free, no sign-upYesYesYesYesYesYesYes

How we tested

We opened each tool in Chrome on 31 October 2026 and pasted the same HS256 test token. Its payload holds a name, a role, iat and an exp of 24 October 2025, so a correct tool should say that it has expired. We noted what each tool showed for the claims, the dates and the signature.

For privacy, we recorded every request each page made after the paste and searched them for the token. A tool that sent the token anywhere would have scored as server-side. We also pressed each share or link button we found and recorded what it sent.

For broken input, we used a token whose payload misses a closing quote and a token with Bearer in front, in this test and in a test of the same sites on 24 October 2026.

The features score counts five checks: signature checks with both secrets and public keys, an expiry warning, claim explanations, an encoder, and help that points to where a broken token fails. A partial check counts as half, and the total is rounded down. Privacy comes from where the token goes, and price from the pricing model. The order on this page follows the total of the three scores.

DisclosureAarrange is our own tool. We built the JWT Decoder after testing the sites on this list, so it was designed to fill the gaps we found, and that helps its score. We rated it by the same five checks as the others, including its main gap: it has no encoder. Open DevTools and check our claims for yourself.

Our verdict

To find out why a server rejects a token, use Aarrange. It says when a token has expired or is not valid yet, verifies every common algorithm with any key format, and points to the exact place where a broken token fails. It all runs in your browser. Try the JWT Decoder.

To make a test token, use jwt.io or token.dev. Both have an encoder, and token.dev also warns about expired tokens and handles PASETO. jwt.ms has the most detailed claim explanations, which helps with Microsoft Entra tokens.

Whatever you choose, decode test tokens when you can. All seven tools decode in your browser, but a share button can still put a token on someone else's server.

FAQ

Is it safe to paste a JWT into an online decoder?

Only if the decoder runs in your browser, and even then, prefer test tokens. A valid token works like a password until it expires. All seven tools in this test decoded in the browser, but jstoolset's Permanent Link button uploads the token to its server. You can check any tool yourself: open the Network tab in DevTools, paste a token and look for requests that contain it.

Does jwt.io send my token to a server?

Not when it decodes. We pasted a test token into jwt.io and no request carried it. The page does load Auth0's own scripts and a privacy-choices tool, so check the network yourself if you need to be sure.

Why does jwt.io say my expired token is valid?

In our test, jwt.io showed "Valid JWT" for a token that expired a year earlier. It checks the structure, and the expiry date is only shown in the Claims Breakdown. To see a warning, use a decoder that compares exp with the current time, such as Aarrange's JWT Decoder or token.dev.

Which JWT decoder can verify a signature with a JWKS?

Aarrange accepts the issuer's whole JWKS and picks the key whose kid matches the token. jwt.io and FusionAuth take a single key as PEM or JWK, so you copy the right key out of the JWKS first.

Can I create a JWT online?

Yes. jwt.io, token.dev and SuperTokens have encoders, and FusionAuth rebuilds the token when you edit the payload. Use a test secret or a test key pair, never a production key.

What is the difference between jwt.io and jwt.ms?

jwt.io decodes, verifies and encodes tokens, with many algorithms. jwt.ms only decodes, but explains every claim in detail, including Microsoft Entra ID claims. Neither one warned us that our test token had expired.