Decode Base64 strings back to plain text. Supports standard and URL-safe Base64.
Base64 strings appear in almost every layer of a web application. These are the five places developers most commonly need to decode them:
Not every random-looking string is Base64. These four signals together give a strong indication:
Character set
Only A–Z, a–z, 0–9, +, / (standard) or -, _ (URL-safe)
Padding
Ends with = or == in standard Base64; no padding in URL-safe
Length
Standard Base64 length is always a multiple of 4
Density
High information density — no spaces, punctuation, or recognisable words
These four errors cover the vast majority of failed decodes. Each shows the problematic input, what it should look like, and why the error occurs.
Base64 decoding reverses the encoding process — it takes a Base64 string and reconstructs the original text or binary data. The decoder converts each Base64 character back to its 6-bit value, reassembles the 6-bit groups into bytes, and outputs the original content.
Base64 strings only contain A–Z, a–z, 0–9, +, / (or - and _ for URL-safe). They are padded with = to reach a length that is a multiple of 4. The length is always divisible by 4 in standard Base64. If a string matches this pattern and looks random, it is almost certainly Base64.
Two likely causes: (1) the Base64 string represents binary data (an image, PDF, or compressed file) rather than text — decoding binary as UTF-8 produces unreadable output; (2) you are using the wrong variant — standard decoder on URL-safe input, or vice versa. Toggle URL-safe mode in the settings panel.
Base64 groups input into 3-byte chunks. If the input is not a multiple of 3 bytes, the output is padded with = to reach a multiple of 4 characters. Without correct padding the decoder cannot determine where the real data ends. URL-safe Base64 strips padding, so you may need to re-add = characters before decoding.
Yes — paste one of the first two dot-separated segments (header or payload) into the decoder. For example: eyJhbGciOiJIUzI1NiJ9 decodes to {"alg":"HS256"}. Make sure URL-safe mode is on, since JWT uses Base64URL. Do not paste JWTs containing sensitive claims into tools you do not trust.
A JWT is three Base64URL segments joined by dots (header.payload.signature). The tool decodes a single segment at a time. Paste only the header (before the first dot) or payload (between the dots) — not the full token string with dots included.
Yes. Decoding runs entirely in your browser using the native atob() API. Nothing is sent to any server. You can confirm this by opening DevTools → Network while using the tool — there are no outbound requests.