Guide
Text tools
Four panels for the strings that pass through a terminal, a config file or a log line. Each one applies a single, stated rule — no hidden cleanup.
JSON
Paste a document and choose Format for two-space indentation, Minify for a single line, or use either button to validate first: parsing happens before anything is written, so an invalid document is never reformatted.
When parsing fails, the result box names the reason and the line and column of the first error, which is usually enough to find a missing comma.
Three properties are worth knowing:
- Formatting re-serialises the parsed value, so whitespace and duplicate keys disappear. For ordinary string keys the original order is kept; JavaScript itself places integer-like keys first, in ascending order.
- Numbers are held as IEEE-754 doubles. Integers beyond 253 and high-precision decimals may come back rounded — check large identifiers before pasting them anywhere important.
- JSON with comments or trailing commas is rejected. Rosehip implements plain
JSON.parse, not one of the relaxed dialects.
Base64
Encoding converts the input as UTF-8 and then applies standard Base64, so text outside ASCII — accents, Cyrillic, CJK, emoji — survives a round trip. Decoding reverses it and reports not valid Base64 rather than emitting mojibake when the input is malformed or the bytes are not valid UTF-8.
The URL-safe alphabet option swaps + for - and / for _ and drops padding, which is what JWT segments and many query parameters use. Turn it on to encode for that context, and on again to decode a URL-safe string.
Decoding is forgiving about transport damage: whitespace (including line breaks from a wrapped email or a log dump) is ignored, and missing padding is restored before decoding.
URL
Encoding uses encodeURIComponent, the function that escapes a single query value. That means &, =, ?, # and / are all escaped, which is what you want for a value but not for a whole URL — a complete URL would come back with its structure destroyed.
Decoding accepts a value that was percent-encoded anywhere, and treats a literal + as a space, matching how form submissions are decoded. If the input contains a malformed escape such as a lone %, the tool stops with a message instead of guessing.
input: name=Robin Hood & co encoded: name%3DRobin%20Hood%20%26%20co
Text
Line operations treat the input as a list of lines and write the result below. The panel reports counts of lines, words and characters as you type, which is often the whole job — paste a draft, read the number, close the tab.
- Trim lines removes leading and trailing whitespace from each line, keeping blank lines.
- Drop empty lines removes lines that are empty or contain only whitespace.
- Remove duplicates keeps the first occurrence of each identical line and drops later ones.
- Sort A–Z / Z–A uses the browser's locale-aware comparison for the current language, so case and accented characters may not fall in strict ASCII order.
- lowercase / UPPERCASE change the case of every character.
- Reverse lines flips the order without changing the content.
Operations run on the current input, not on the previous result. To apply two of them in sequence, copy the result back into the input box first; that keeps every step visible and reversible.
One note on line endings
These panels treat a single newline as a line break and also accept Windows line endings; a trailing final newline therefore produces a last empty line, which the counts include. That is usually what you want when comparing with a grep or an editor, and it is also why counts of two files can differ by one line.