Every dev-tool that takes pasted text or builds a generated file got a rebuild. Plain textareas became proper code editors. Side-by-side input/output panes replaced the old two-textbox layout. JSON, CSV, and YAML conversions consolidated into one bidirectional tool that auto-detects what you pasted.
Line numbers + syntax highlighting on every output
Every output pane now shows numbered lines and proper colour coding. JSON keys go cyan, strings green, numbers and booleans orange. The same treatment applies to XML, YAML, CSS, HTML, JavaScript, SQL, Markdown, and JWT decoded payloads. Highlighting loads on demand per language so the page stays light.
The input side stays a plain monospace textarea — that's a deliberate choice. Highlighting while you type breaks cursor placement and copy-paste in browsers; we'd rather you have a textarea that behaves like a textarea, with the highlight reserved for the formatted output you actually want to read or copy.
One bidirectional converter for CSV, JSON, and YAML
Previously we shipped three separate tools: CSV → JSON, JSON → CSV, and YAML → JSON. They were the same tool with the input and output swapped. Now there's one tool with two format dropdowns and a swap button between the panes.
/tools/dev-tools/csv-to-json — CSV in, JSON out (default).
/tools/dev-tools/json-to-csv — same tool, JSON → CSV by default. URL preserved for SEO and bookmarks.
/tools/dev-tools/yaml-to-json — same tool, YAML → JSON by default.
/tools/dev-tools/json-to-yaml — same tool, JSON → YAML by default.
Click the round arrow between panes to swap source and target on the fly. Toggle "Auto-detect" and the tool sniffs the format of whatever you paste. Status chips below each pane tell you how many rows / columns were detected and which delimiter the parser picked.
New per-tool wins
JSON formatter — two new toggles in Advanced Options. BigInt-safe quotes integers larger than 2^53 before parsing so they survive the round-trip without losing precision (banking IDs, Twitter snowflakes, distributed-system tokens — anything that gets silently corrupted by JSON.parse). Auto-repair strips trailing commas, quotes unquoted keys, normalises single-quoted strings, lowercases True/False/None. Useful for Python or JS-object-literal copy-pastes.
Hash generator — pick from MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 (turn each on or off independently). Switch to HMAC mode and provide a shared secret to authenticate a payload. Paste a known hash into the Expected hash field for an instant match check across every enabled algorithm at once.
Markdown to HTML — DOMPurify sanitization is on by default with a green "Sanitized" chip when active. Toggle it off and the chip turns amber to remind you the raw HTML is unsafe to render unless you trust the input.
Timestamp converter — completely rebuilt. A live "current epoch" ticker at the top updates every second in seconds / milliseconds / microseconds, each one click-to-copy. Below: input format (Unix-s / Unix-ms / Date-string), timezone selector, and an All-Formats output covering Unix, ISO 8601, RFC 2822, Local, and Relative time. The new Code snippets panel below shows ready-to-paste expressions for that exact moment in JavaScript, Python, Go, Rust, PostgreSQL, MySQL, Bash, and ISO 8601.
UUID generator — auto-generates one UUID on page load (no more empty output). Choose v4 (random) or v7 (timestamp-ordered). Format options for braces, no-hyphens, uppercase, URN. New Decode field: paste a UUID and we extract its version, variant, and (for v1 / v7) the embedded timestamp.
URL encoder/decoder — new URL inspector view appears in the Tips slot when you decode a valid URL. The pasted URL splits into protocol / host / path / query-params / fragment so you can inspect each piece individually.
HTML minifier — new Preserve template syntax toggle. Minify a Blade / EJS / Smarty / Handlebars / PHP template and the {{ … }}, <?= … ?>, {% … %}, <% … %> blocks survive intact while the surrounding HTML still gets crushed.
JWT decoder — claim-validation chips. When the token has an exp claim that's already passed, a red Token expired chip shows. Standard claims iss, sub, aud are surfaced when present.
Regex tester + Diff checker — both now ship with default sample input so the result panel never starts empty. Replace the sample to test your own pattern / your own diff pair.
Examples + Copy + Download on every tool
Every tool's input pane has an Examples dropdown with one or two sample inputs you can load with a click. Every output pane has a Copy button (top-right, where you'd expect) and a Download button beside it that saves the output as the right file type — .json, .css, .min.js, .htaccess, sitemap.xml, uuids.txt, etc.
Advanced Options and Tips live in collapsible cards beneath the panes. Open or close once and we remember your preference for next time.
Why this took a rebuild instead of a polish
The old layout was two plain textareas with a tiny center column for controls. No line numbers, no highlight, no Copy on the output, no Examples menu, no Download. We could have papered over each gap one tool at a time, but eight separate text-tool migrations are coming and they all need the same chrome. Rebuilding the underlying template once means every text-flavored tool the site ships from now on inherits the same workspace UX.