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 repos — installs with apt/dnf/pacman (some already present). Third-party — needs npm, pip, Go, or a separate download.
Data & formats
9 toolsFormat and beautify JSON, YAML, TOML, XML, HTML, and CSS — with JSON/CSS minify and JSON schema validation.
$ prettier -w file.jsJS/TS/CSS/HTML/JSON/Markdown
$ black file.pyPython
$ gofmt -w file.goGo
$ jq . file.jsonPretty-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
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.yamlReadable 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.harList requests + status
$ jq '[.log.entries[].time] | add' session.harTotal 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.jsonJSON → YAML
$ yq -p yaml -o toml file.yamlYAML → TOML
$ yq -p toml -o json file.tomlTOML → 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.csvInfer a CREATE TABLE + INSERTs from CSV
$ jq -r '(.[0]|keys_unsorted),(.[]|[.[]])|@csv' data.json | csvsqlFrom 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.tsJSON → TypeScript types
$ quicktype data.json -l go -o types.goOther 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.jsonQuery nested values
$ jq '.items[] | select(.price > 10)' data.jsonFilter
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.logFind matching lines
$ awk '{print $9}' access.log | sort | uniq -c | sort -rnCount by field (e.g. status codes)
$ tail -f app.log | grep --line-buffered WARNLive-filter a stream
Chain it
$ awk '{print $1}' access.log | sort | uniq -c | sort -rn | headTop 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.xmlEvaluate an XPath expression
$ xidel -e '//a/@href' page.htmlXPath/CSS over HTML too (xidel — Homebrew/AUR)
Needslibxml2-utils
Security & privacy
9 toolsDecode 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.pemDecode PEM
$ openssl asn1parse -inform DER -in file.derDecode 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 -nooutFull human-readable certificate
$ openssl x509 -in cert.pem -noout -fingerprint -sha256SHA-256 fingerprint
Chain it
$ echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -textFetch 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.zipHash a file
$ printf '%s' "text" | sha256sumHash a string
$ openssl dgst -sha512 file.zipOther algorithms via openssl
Chain it
$ curl -sL "$URL" | sha256sumChecksum 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 | jqDecode the payload
$ step crypto jwt verify --key pub.pem < token.jwtVerify the signature
Chain it
$ for i in 1 2; do awk -F. -v n=$i '{print $n}' <<< "$JWT" | base64 -d 2>/dev/null | jq; doneDecode 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.jpgAll EXIF/XMP/IPTC metadata
$ mediainfo video.mp4Media/container metadata
Chain it
$ exiftool -filename -gpslatitude -gpslongitude -n *.jpgList 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.jpgStrip all metadata (keeps a backup)
$ mat2 document.pdfFormat-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)" -idArgon2id
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.pdfStrip metadata
$ gs -o flat.pdf -sDEVICE=pdfwrite -dFILTERTEXT file.pdfFlatten/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 toolsConvert 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.txtUnified diff
$ git diff --no-index a.txt b.txtColourised, word-level
$ delta a.txt b.txtSyntax-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 outOCR → out.txt
$ tesseract scan.png - -l eng+deuMultiple languages, to stdout
Chain it
$ tesseract scan.png - -l eng | wc -wCount 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.htmlMarkdown → HTML (or PDF, docx…)
$ glow README.mdRendered 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.txtRepair mojibake automatically
$ iconv -f WINDOWS-1252 -t UTF-8 in.txtRe-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.txtTest a pattern (Perl regex)
$ rg '\bTODO\b' src/ripgrep — fast, recursive
$ sed -E 's/(\w+)@(\w+)/\2:\1/' file.txtMatch + replace with groups
Chain it
$ rg -oI 'https?://\S+' . | sort -uList 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 toolsTurn 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" | bcpx → 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" | base64Base64 encode
$ printf '%s' "aGVsbG8=" | base64 -dBase64 decode
$ printf '%s' "a b&c" | jq -sRr @uriURL-encode
$ printf '%s' "hi" | xxd -pTo hex (xxd -r -p to reverse)
Chain it
$ base64 -d <<< "$B64" | jqDecode 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.jpgHEIC → JPG
$ magick photo.heic -quality 82 photo.jpgOr via ImageMagick
$ for f in *.heic; do heif-convert "$f" "${f%.heic}.jpg"; doneWhole folder
Chain it
$ for f in *.heic; do heif-convert "$f" "${f%.heic}.jpg" && exiftool -all= "${f%.heic}.jpg"; doneConvert 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.jpgRe-encode at 80% quality
$ cwebp -q 80 in.png -o out.webpCompress to WebP
$ jpegoptim --max=80 *.jpgOptimise JPEGs in place
$ pngquant --quality=65-80 in.pngLossy 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.webpConvert between formats
$ cwebp in.png -o out.webpPNG/JPEG → WebP
Chain it
$ for f in *.png; do cwebp -q 80 "$f" -o "${f%.png}.webp"; doneConvert 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 @1700000000Unix epoch → local time
$ date -u -d @1700000000 +"%Y-%m-%dT%H:%M:%SZ"Epoch → ISO 8601 (UTC)
$ date +%sCurrent 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 toolsGenerate 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.pngMany symbologies
$ barcode -b "123456" -o out.psGNU 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 ./clientClient 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.pdfMerge
$ pdfseparate in.pdf page-%d.pdfSplit into pages
$ qpdf --pages in.pdf 1-3 -- in.pdf first3.pdfExtract a page range
$ gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -o small.pdf in.pdfCompress
Chain it
$ pdftotext report.pdf - | grep -in totalSearch 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.pngRead 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-utilsPrefer not to install anything? Every one of these has a browser version here that runs with nothing to set up.