DevTools

Reference · works offline

Do it in the terminal

Most of these tools have a Linux command-line equivalent. Here's the command for each — and like everything here, they run entirely on your machine, with no upload and no account. Copy, paste, done.

In distro repos24Third-party16No CLI3

In distro repos — installs with apt/dnf/pacman (some already present). Third-party — needs npm, pip, Go, or a separate download.

Data & formats

9 tools

Format and beautify JSON, YAML, TOML, XML, HTML, and CSS — with JSON/CSS minify and JSON schema validation.

$ prettier -w file.js

JS/TS/CSS/HTML/JSON/Markdown

$ black file.py

Python

$ gofmt -w file.go

Go

$ jq . file.json

Pretty-print JSON

Each language brings its own formatter — prettier via npm, black via pip, gofmt with the Go toolchain. Only jq (for JSON) is in the distro repos; the browser tool covers them all in one place.

Needsnpm: prettierpip: blackgo toolchainjq

Data Diff↗ open toolIn distro repos

Compare two JSON, YAML, or TOML documents by structure, not text: added, removed, and changed values with their paths. Key order and formatting are ignored. Runs in your browser.

$ diff <(jq -S . a.json) <(jq -S . b.json)

Structural JSON diff (keys sorted)

$ dyff between a.yaml b.yaml

Readable YAML/JSON diff (dyff — Homebrew/AUR/Go)

Chain it

$ diff <(curl -s host-a/config.json | jq -S .) <(curl -s host-b/config.json | jq -S .)

Diff the same JSON on two servers

Needsjq

Open a .har network export and explore its requests, sizes, status codes, and a timing waterfall — entirely in your browser. Nothing is uploaded.

$ jq '.log.entries[] | {url: .request.url, status: .response.status}' session.har

List requests + status

$ jq '[.log.entries[].time] | add' session.har

Total load time (ms)

jq reads the .har JSON, but there is no built-in waterfall/timeline view.

Needsjq

Convert structured data between JSON, YAML, and TOML, live in your browser.

$ yq -p json -o yaml file.json

JSON → YAML

$ yq -p yaml -o toml file.yaml

YAML → TOML

$ yq -p toml -o json file.toml

TOML → JSON

These use mikefarah’s yq (a Go binary from its GitHub releases); the yq some distros package is a different, jq-based tool. dasel (in the Debian/Ubuntu repos) is an in-repo alternative.

Needsyq (mikefarah)

Infer a SQL CREATE TABLE from a JSON sample or a JSON Schema — column types, nullability, and a primary-key guess — for PostgreSQL, MySQL, or SQLite. Runs in your browser.

$ csvsql --tables people data.csv

Infer a CREATE TABLE + INSERTs from CSV

$ jq -r '(.[0]|keys_unsorted),(.[]|[.[]])|@csv' data.json | csvsql

From JSON: flatten to CSV first

csvkit (in the distro repos) works from CSV, so JSON is converted with jq first.

Needscsvkit

Turn a JSON sample or a JSON Schema into TypeScript, Zod, Go structs, Python dataclasses, Kotlin data classes, or Java records/Lombok. Infers optional and nullable fields. Runs in your browser.

$ quicktype data.json -o Types.ts

JSON → TypeScript types

$ quicktype data.json -l go -o types.go

Other languages with -l

Needsnpm: quicktype

Query JSON live with JSONPath — filter, slice, and recurse, and see each matched value with its path, all in your browser.

$ jq '.store.book[].title' data.json

Query nested values

$ jq '.items[] | select(.price > 10)' data.json

Filter

Chain it

$ curl -s https://api.example.com/users | jq '.[].email'

Pull a field straight from an API response

jq is the shell’s JSON query language; its syntax differs from JSONPath but does the same job.

Needsjq

Open a huge log file — JSON/NDJSON, logfmt, syslog, or Java/app-server text — and get instant time-range narrowing, faceting, a timeline, request tracing, and full-text search, entirely in your browser with nothing uploaded.

$ grep -i error app.log

Find matching lines

$ awk '{print $9}' access.log | sort | uniq -c | sort -rn

Count by field (e.g. status codes)

$ tail -f app.log | grep --line-buffered WARN

Live-filter a stream

Chain it

$ awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

Top 10 client IPs

Needscoreutilsgrepgawk

Test XPath expressions against XML or HTML live — see matched nodes, their location paths, and string/number/boolean results, all in your browser.

$ xmllint --xpath '//book/title/text()' file.xml

Evaluate an XPath expression

$ xidel -e '//a/@href' page.html

XPath/CSS over HTML too (xidel — Homebrew/AUR)

Needslibxml2-utils

Security & privacy

9 tools

Decode ASN.1 DER/BER — paste PEM, Base64, or hex and see the tag–length–value tree behind X.509 certificates, keys, and CMS, entirely in your browser.

$ openssl asn1parse -in file.pem

Decode PEM

$ openssl asn1parse -inform DER -in file.der

Decode raw DER

Needsopenssl

Decode X.509 / PEM certificates — view subject, issuer, validity, SANs, key, and fingerprints, all in your browser.

$ openssl x509 -in cert.pem -text -noout

Full human-readable certificate

$ openssl x509 -in cert.pem -noout -fingerprint -sha256

SHA-256 fingerprint

Chain it

$ echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -text

Fetch a live site’s certificate and decode it

Needsopenssl

Compute MD5, SHA-1, SHA-256, SHA-384, and SHA-512 hashes of text or a file, plus HMAC — all at once, entirely in your browser.

$ sha256sum file.zip

Hash a file

$ printf '%s' "text" | sha256sum

Hash a string

$ openssl dgst -sha512 file.zip

Other algorithms via openssl

Chain it

$ curl -sL "$URL" | sha256sum

Checksum a download without saving it first

Needscoreutilsopenssl

Decode and inspect JSON Web Tokens: view the header and payload, check expiry, and verify HS/RS/PS/ES signatures — all in your browser.

$ awk -F. '{print $2}' <<< "$JWT" | base64 -d 2>/dev/null | jq

Decode the payload

$ step crypto jwt verify --key pub.pem < token.jwt

Verify the signature

Chain it

$ for i in 1 2; do awk -F. -v n=$i '{print $n}' <<< "$JWT" | base64 -d 2>/dev/null | jq; done

Decode both the header and the payload

JWTs are base64url; the quick decode may need padding. `step` (from smallstep.com — not in most distro repos) verifies signatures properly.

Needsjqstep (smallstep.com)

Build a JWT header and payload and sign it with HMAC (HS256/384/512) or an RSA/ECDSA private key (RS/PS/ES) — entirely in your browser. Nothing is uploaded.

$ step crypto jwt sign --key key.pem --iss me --aud you --sub 123 --exp $(date -d '+1 hour' +%s)

Sign a new token

Needsstep (smallstep.com)

Inspect the hidden metadata in a photo or document — EXIF, GPS location, author, dates, and more — right in your browser. Download a cleaned copy with the metadata removed.

$ exiftool photo.jpg

All EXIF/XMP/IPTC metadata

$ mediainfo video.mp4

Media/container metadata

Chain it

$ exiftool -filename -gpslatitude -gpslongitude -n *.jpg

List every photo’s GPS coordinates

Needslibimage-exiftool-perlmediainfo

Strip EXIF, GPS, author, and hidden metadata from images and documents in one batch — locally in your browser. JPEG, PNG, WebP, GIF, PDF, Office, OpenDocument & EPUB.

$ exiftool -all= photo.jpg

Strip all metadata (keeps a backup)

$ mat2 document.pdf

Format-aware metadata remover

Needslibimage-exiftool-perlmat2

Hash a password with Argon2id, bcrypt, scrypt, or PBKDF2 — with OWASP-recommended parameters — and verify a password against a hash, entirely in your browser.

$ openssl passwd -6 'my-password'

SHA-512 crypt

$ htpasswd -nbB user 'my-password'

bcrypt (for .htpasswd)

$ echo -n 'my-password' | argon2 "$(openssl rand -hex 16)" -id

Argon2id

Needsopensslapache2-utilsargon2

Redact a PDF so the text is permanently removed, not just covered — and strip its hidden metadata, comments, and attachments. Entirely in your browser, nothing uploaded.

$ exiftool -all= file.pdf

Strip metadata

$ gs -o flat.pdf -sDEVICE=pdfwrite -dFILTERTEXT file.pdf

Flatten/remove text layer

Visually covering regions and burning them in isn’t a simple CLI job — the browser tool draws and flattens boxes for you.

Needslibimage-exiftool-perlghostscript

Text

9 tools

Convert text between camelCase, PascalCase, snake_case, CONSTANT_CASE, kebab-case, Title Case, and more — all at once, in your browser.

$ tr '[:lower:]' '[:upper:]' <<< "hello world"

UPPERCASE

$ sed -E 's/\b(\w)/\U\1/g' <<< "hello world"

Title Case

Chain it

$ tr '[:upper:]' '[:lower:]' <<< "My Report Title" | tr ' ' '-'

Slugify a title → my-report-title

Needscoreutilssed

Compare two texts or code snippets side by side with line-level difference highlighting.

$ diff -u a.txt b.txt

Unified diff

$ git diff --no-index a.txt b.txt

Colourised, word-level

$ delta a.txt b.txt

Syntax-highlighted diff

Needsdiffutilsgitgit-delta

Extract the text from a screenshot, photo, or scanned document with OCR — in 18 languages, entirely in your browser. Nothing is uploaded.

$ tesseract scan.png out

OCR → out.txt

$ tesseract scan.png - -l eng+deu

Multiple languages, to stdout

Chain it

$ tesseract scan.png - -l eng | wc -w

Count the words on a scanned page

Needstesseract-ocr

Write Markdown with a live GitHub-flavored preview, a table of contents, and one-click export to Markdown or HTML — entirely in your browser, nothing uploaded.

$ pandoc README.md -o README.html

Markdown → HTML (or PDF, docx…)

$ glow README.md

Rendered preview in the terminal (glow — Charm’s repo / Homebrew / Go)

Needspandoc

Repair garbled text where UTF-8 was misread as Windows-1252 — turn “café” back into “café” and “’” back into “’”. Runs entirely in your browser.

$ ftfy < garbled.txt

Repair mojibake automatically

$ iconv -f WINDOWS-1252 -t UTF-8 in.txt

Re-decode a known wrong encoding (iconv is preinstalled)

ftfy fixes true mojibake; iconv (from glibc, already present) only helps when you know the original encoding.

Needspip: ftfy

Visualize a regular expression as a railroad diagram and read a plain-English, step-by-step explanation. Hover to link the two. Runs in your browser.

Rendering a regex as a railroad diagram is inherently visual — there is no command-line equivalent.

Generate example strings that match a regular expression, then send them straight into the Regex Tester. Every sample is verified to match — all in your browser.

$ exrex 'user_[a-z]{5}[0-9]{2}'

Generate strings that match a regex

Needspip: exrex

Build and test regular expressions live — highlight matches, inspect capture groups, and preview replacements.

$ grep -P 'colou?r' file.txt

Test a pattern (Perl regex)

$ rg '\bTODO\b' src/

ripgrep — fast, recursive

$ sed -E 's/(\w+)@(\w+)/\2:\1/' file.txt

Match + replace with groups

Chain it

$ rg -oI 'https?://\S+' . | sort -u

List every unique URL across a project

Needsgrepripgrep

Break a URL into its parts and an editable query-string table, then rebuild it. Decodes parameters and exports them as JSON. Runs in your browser.

$ trurl --url "https://a.com/p?q=1" --get '{host} {path} {query}'

Break a URL into parts

$ python3 -c "import sys,urllib.parse as u; print(u.urlparse(sys.argv[1]))" "https://a.com/p?q=1"

Or a Python one-liner — no install needed

Chain it

$ trurl --url "$URL" --get '{query}' | tr '&' '\n'

List each query parameter on its own line

trurl is in the Debian/Ubuntu, Fedora, and Arch repos; the Python fallback needs only Python 3, which is usually already present.

Needstrurl

Converters

9 tools

Turn TypeScript or Java source into a Mermaid class diagram — classes, interfaces, enums, fields, methods, inheritance, and interfaces — rendered live in your browser.

$ pyreverse -o svg -p MyApp mypackage/

UML from Python source

Language-specific: pyreverse covers Python. There is no general tool that derives a diagram from any source language.

Needspylint

Convert colors between HEX, RGB, HSL, HSV, and OKLCH, with a picker, alpha, and a WCAG contrast checker — all in your browser.

$ pastel format hex "rgb(31,139,72)"

RGB → HEX

$ pastel format hsl "#1f8b48"

HEX → HSL

sharkdp’s pastel isn’t in the distro repos — install with cargo or Homebrew.

Needscargo: pastel

Convert between CSS units — px, rem, em, pt, vw, vh, and more — with live visual feedback and a full conversion table.

$ echo "scale=4; 24 / 16" | bc

px → rem (÷ root font-size)

Unit conversions are just arithmetic — bc does the math, but there is no dedicated CSS-unit CLI.

Needsbc

Encode and decode text with Base64, URL, and Hex — UTF-8 safe, instant, and fully in your browser.

$ printf '%s' "hello" | base64

Base64 encode

$ printf '%s' "aGVsbG8=" | base64 -d

Base64 decode

$ printf '%s' "a b&c" | jq -sRr @uri

URL-encode

$ printf '%s' "hi" | xxd -p

To hex (xxd -r -p to reverse)

Chain it

$ base64 -d <<< "$B64" | jq

Decode Base64, then format the JSON

$ base64 -d <<< "$B64" | xmllint --format -

Decode Base64, then pretty-print the XML

Needscoreutilsjqxxd

Convert iPhone HEIC/HEIF photos to JPG, PNG, or WebP — fast, multi-threaded batch conversion entirely in your browser. Nothing is uploaded, and location and metadata are removed by default.

$ heif-convert photo.heic photo.jpg

HEIC → JPG

$ magick photo.heic -quality 82 photo.jpg

Or via ImageMagick

$ for f in *.heic; do heif-convert "$f" "${f%.heic}.jpg"; done

Whole folder

Chain it

$ for f in *.heic; do heif-convert "$f" "${f%.heic}.jpg" && exiftool -all= "${f%.heic}.jpg"; done

Convert a folder and strip metadata from each

Needslibheif-examplesimagemagick

Fast, multi-threaded image compression — shrink many images at once by quality or to a target file size, with WebP/JPEG output and optional resizing, entirely in your browser.

$ magick in.jpg -quality 80 out.jpg

Re-encode at 80% quality

$ cwebp -q 80 in.png -o out.webp

Compress to WebP

$ jpegoptim --max=80 *.jpg

Optimise JPEGs in place

$ pngquant --quality=65-80 in.png

Lossy PNG compression

Chain it

$ find . -name '*.jpg' -exec jpegoptim --max=80 {} +

Compress every JPEG in a folder tree

Needsimagemagickwebpjpegoptimpngquant

Convert, resize, and compress images between PNG, JPEG, and WebP, or copy them as a Base64 data URI — entirely in your browser.

$ magick in.png out.webp

Convert between formats

$ cwebp in.png -o out.webp

PNG/JPEG → WebP

Chain it

$ for f in *.png; do cwebp -q 80 "$f" -o "${f%.png}.webp"; done

Convert a whole folder to WebP

Needsimagemagickwebp

Convert between Unix epoch time and human-readable dates — seconds, milliseconds, ISO 8601, UTC, time zones, and relative time.

$ date -d @1700000000

Unix epoch → local time

$ date -u -d @1700000000 +"%Y-%m-%dT%H:%M:%SZ"

Epoch → ISO 8601 (UTC)

$ date +%s

Current time as epoch seconds

Chain it

$ date -d @"$(stat -c %Y file.log)"

Show a file’s modified time as a readable date

Needscoreutils

Turn a Mermaid class diagram into TypeScript, Python, Java, or C# code — classes, interfaces, enums, inheritance, and relationships — live in your browser.

Generating source code from a UML class diagram has no general command-line tool — use the browser tool.

Generators

7 tools

Generate 1D barcodes — CODE128, CODE39, EAN-13/8, UPC-A, ITF-14, MSI, Codabar and more — with live preview, colors, and PNG/SVG download, all in your browser.

$ zint -b CODE128 -d "123456" -o barcode.png

Many symbologies

$ barcode -b "123456" -o out.ps

GNU barcode (PostScript)

Needszintbarcode

Generate realistic fake test data — names, emails, dates, and more — as JSON, CSV, SQL, or XML, from a schema you build or import.

$ python3 -c "from faker import Faker; f=Faker(); print(f.name(), f.email())"

One fake record

No single CLI — script it with Faker (packaged as “faker” on Debian/Ubuntu, or pip install faker).

Needsfaker

Turn an OpenAPI 3.x spec (JSON or YAML) into a typed TypeScript fetch client, or into models for Go, Python, Kotlin, Java, and Zod. Runs entirely in your browser.

$ openapi-generator-cli generate -i spec.yaml -g typescript-axios -o ./client

Client SDK from a spec

Needsnpm: openapi-generator-cli

Merge, split, reorder, rotate, and delete PDF pages, turn images into a PDF, or export pages as images — entirely in your browser, nothing uploaded.

$ pdfunite a.pdf b.pdf merged.pdf

Merge

$ pdfseparate in.pdf page-%d.pdf

Split into pages

$ qpdf --pages in.pdf 1-3 -- in.pdf first3.pdf

Extract a page range

$ gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -o small.pdf in.pdf

Compress

Chain it

$ pdftotext report.pdf - | grep -in total

Search the text inside a PDF

Needspoppler-utilsqpdfghostscript

Generate QR codes for URLs, Wi-Fi, vCards, events, email, SMS, geo, phone, and text — with selectable error correction, and PNG/SVG download.

$ qrencode -o qr.png "https://example.com"

Write a QR PNG

$ qrencode -t ANSIUTF8 "hello"

Print it in the terminal

Needsqrencode

Decode a QR code from an image or your camera, entirely in your browser. Reads URLs, Wi-Fi, contacts, and more — nothing is uploaded.

$ zbarimg qr.png

Read a QR/barcode from an image

Needszbar-tools

Chain multiple tools into a pipeline and run it in one place: decode, convert, format, and generate types in sequence. Runs entirely in your browser.

The shell’s own pipelines are the workflow — chain any of the commands on this page with | and > to build one.

Getting the packages

Everything here is free and open source. Package names shown are Debian/Ubuntu; Fedora and Arch package the same tools under different names (e.g. exiftool is libimage-exiftool-perl on Debian but perl-Image-ExifTool on Fedora/Arch). Tags like npm:, pip:, or cargo: install through that ecosystem rather than your distro.

$ sudo apt install jq imagemagick libimage-exiftool-perl qrencode zbar-tools tesseract-ocr poppler-utils

Prefer not to install anything? Every one of these has a browser version here that runs with nothing to set up.