Developer Tools
Convert between JSON, CSV and YAML with nesting handled for you. Write Markdown and save it as a page or PDF. Compare two versions of some text, change its case, clean up its spacing, and encode or decode Base64, URLs and JWTs.
Everything happens on your device — your files are never uploaded
Input
Paste data, drop a file, or load an example
Nothing loaded yet
.json · .csv · .tsv · .yaml · .yml · .txt — opened in this tab, never uploaded
Output
Your converted data will appear here
Nothing to show yet
Paste something on the left, drop a file, or load one of the examples.
Saved straight from this tab
How nesting is flattened and rebuilt
The six rules that decide whether a round trip comes back unchanged.
How nesting is flattened and rebuilt
The six rules that decide whether a round trip comes back unchanged.
- Nested objects become dotted columns
- { "address": { "city": "London" } } flattens to a column called address.city, and rebuilds into a real object on the way back.
- Arrays become numbered columns
- tags.0, tags.1, tags.2 — and any path segment that is bare digits turns back into an array rather than an object.
- Keys that contain a dot still work
- A key written literally as "a.b" is escaped in the header as a\.b, so it is never mistaken for two levels of nesting. A key that is only digits is escaped the same way.
- Empty cells and nulls are different things
- A null is written as the word null. An empty cell reads back as an empty string — except under an array index, where it is treated as a gap so ragged lists keep their length.
- Type reading is a choice, not a guess you are stuck with
- By default 42 becomes a number and true a boolean. Leading zeros, very long digit strings and anything that would lose precision are always kept as text. Turn the toggle off to keep every cell exactly as typed.
- Converting to the same format just tidies it
- JSON and YAML are re-indented. CSV is re-quoted and given the delimiter you picked, with every cell value left byte-for-byte alone.
Theme & export
The theme applies to the live preview and to every export. PDFs go through your browser’s own print dialog — pick “Save as PDF” as the destination for real, selectable text.
Clean sans-serif, roomy line height, almost no chrome. Exports are always light — printed and shared documents usually are.
Compare two texts
Nothing is sent anywhere — both sides are compared inside this tab.
0 chars · 0 words · 0 lines
0 chars · 0 words · 0 lines
Differences
Type into both boxes to see what changed.
Nothing to compare yet
Paste the before and after versions above. Added lines are marked with +, removed lines with −, and the exact words that changed are highlighted.
Text to convert
Identifiers are understood too — camelCase, snake_case, kebab-case and CONSTANT_CASE all round-trip. Each line is treated on its own.
0 chars · 0 words · 0 lines
Convert to
Result
Pick a case above to see the result.
No case selected
Choose one of the ten cases above. Title Case keeps short joining words like “of” and “the” lowercase, except at the start or end.
Text to clean
Every option is applied live. Nothing is uploaded — the cleaning happens in this tab.
0 chars · 0 words · 0 lines
Operations
Each one is independent; they are applied top to bottom.
Cleaned text
The cleaned result appears here.
Nothing to clean yet
Paste text above. The counts and the list of what was removed update as you type.
Base64
Unicode-safe: text is converted to UTF-8 bytes first, so accents and emoji survive the trip.
0 chars · 0 words · 0 lines
0 chars · 0 words · 0 lines
URL escaping
Component mode escapes everything including / ? & =. Whole-URL mode leaves the structure of a link intact.
0 chars · 0 words · 0 lines
0 chars · 0 words · 0 lines
HTML entities
Escapes the five characters that break markup (& < > " and ') so HTML can be shown as text, and turns named or numeric entities back again.
0 chars · 0 words · 0 lines
0 chars · 0 words · 0 lines
Unescaping is done with a lookup table rather than the browser's HTML parser, so pasted markup is never executed.
The signature is not verified.
This is a decoder, not a validator. Anyone can write a JWT and base64 its contents, so nothing shown below proves the token is genuine, unexpired in the eyes of a server, or issued by who it claims. Only the issuer’s key can tell you that.
The decoding happens in this browser tab. Your token is never sent anywhere — which is the point, since a real access token is a password in disguise.
Token
Paste a JWT — three base64url parts separated by dots. A leading “Bearer ” is ignored.
0 chars · 0 words · 0 lines
No token yet
Paste a token above to see its header, payload and timestamp claims in plain English.