{"ok":true,"count":150,"tools":[{"id":"address-formatter","name":"Address Formatter","category":"text","description":"Format a postal address according to local conventions for 27+ countries (US/CA/UK/EU/JP/CN/KR/BR/etc.). Returns lines, the full mailing label, and a single-line form for CSVs/forms. Unknown country codes fall back to a generic format.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"aes-encrypt-decrypt","name":"AES-GCM Encrypt / Decrypt","category":"crypto","description":"Symmetric AES-256-GCM encrypt/decrypt with a passphrase. Key derived via PBKDF2-SHA-256 (600k iterations) from a per-message random 16-byte salt; 12-byte IV per message. Encrypt is non-deterministic (random salt+IV); the same plaintext yields a different ciphertext each call.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"age-calculator","name":"Age Calculator","category":"datetime","description":"Compute an exact age in years/months/days between a birthdate and a reference date, plus totals (days, weeks, hours, minutes), day-of-the-week born, and next birthday. All dates interpreted as local-midnight; the year/month/day diff handles short months correctly.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"ansi-stripper","name":"ANSI Stripper","category":"text","description":"Strip ANSI color/style escape sequences from text (CSI, OSC, single-char ESC). Optionally also strips literal text-encoded escapes like `\\e[31m` that show up in log files. Removes stray C0 control characters while preserving tab/LF/CR.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"area-code-lookup","name":"NANP Area Code Lookup","category":"network","description":"North American Numbering Plan area-code reference (US, Canada, Caribbean). `lookup` by 3-digit code, `search` by substring across code/region/notes, or `list` everything. Static snapshot of NANPA assignments — overlay relationships may not be fully reflected.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"aspect-ratio-calculator","name":"Aspect Ratio Calculator","category":"design","description":"Given a ratio (e.g. 16:9) and either a width or height, compute the other dimension. Returns the dimensions, the original ratio string, and a GCD-simplified form.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"base64","name":"Base64 Encoder / Decoder","category":"encoding","description":"Encode UTF-8 text to Base64 or decode Base64 back to text. URL-safe mode replaces + and / with - and _ and strips padding (used in JWTs and URL fragments).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"base-converter","name":"Base Converter","category":"encoding","description":"Convert an integer between numeric bases (2-36) using arbitrary-precision arithmetic (no 64-bit overflow). If `toBase` is omitted, returns binary/octal/decimal/hex at once.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"bitwise-calculator","name":"Bitwise Calculator","category":"encoding","description":"Compute AND, OR, XOR, NOT, SHL, SHR on integers at 8/16/32/64-bit widths using BigInt (no JS 32-bit overflow). Result returned in decimal, hex, and padded binary.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"bom-tool","name":"BOM Tool","category":"encoding","description":"Detect, add, or strip a UTF-8 Byte Order Mark (U+FEFF, `EF BB BF`). Excel still requires a BOM at the top of UTF-8 CSV files to recognise non-ASCII characters; most other tooling does not want one.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"border-radius-generator","name":"Border Radius Generator","category":"design","description":"Build a CSS `border-radius` value from per-corner radii. Each corner may be a number (circular) or [horizontal, vertical] pair (elliptical). Returns both the raw value and a full declaration.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"box-shadow-generator","name":"Box Shadow Generator","category":"design","description":"Build a CSS `box-shadow` value from one or more layers, each with x/y/blur/spread/color/alpha and an optional inset flag. Returns both the raw value and a full declaration.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"business-days-calculator","name":"Business Days Calculator","category":"datetime","description":"Count business days between two dates, or add/subtract a number of business days to a start date. Optional US Federal or UK Bank Holiday calendars. Both modes treat weekends + matched holidays as non-business; range mode returns the holidays hit in-window.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"cache-control-builder","name":"Cache-Control Builder","category":"network","description":"Build an HTTP `Cache-Control` header value from structured options. Common combinations: static asset (`public, max-age=31536000, immutable`), HTML (`private, no-cache`), API SWR (`public, max-age=60, stale-while-revalidate=600`). `noStore` short-circuits to just `no-store`.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"cargo-toml-parser","name":"Cargo.toml Parser","category":"code","description":"Parse a Rust `Cargo.toml` manifest and return structured package metadata, dependency lists (with versions, features, flags, source), workspace members, and features table. Lightweight TOML subset — handles inline tables, arrays, comments, and continuation lines but not all edge cases.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"case-converter","name":"Case Converter","category":"text","description":"Convert a string between case styles: upper, lower, Title, Sentence, camelCase, PascalCase, snake_case, CONSTANT_CASE, kebab-case, dot.case, path/case. Pass a `case` to get a single value, omit it to get all variants.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"certificate-decoder","name":"Certificate Decoder","category":"network","description":"Parse a PEM-encoded X.509 certificate (offline, no fetch) and return subject/issuer/validity/SANs/fingerprints/extensions. `daysRemaining` is negative for expired certs. Does NOT verify the chain or revocation.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"chmod-calculator","name":"chmod Calculator","category":"system","description":"Convert Unix file-permission bits between octal (e.g. `755`), symbolic (`rwxr-xr-x`), and per-class booleans. Supports setuid/setgid/sticky bits. Use `from-octal` to parse a string or `from-perms` for fields.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"cidr-calculator","name":"CIDR Calculator","category":"network","description":"Compute network details for an IPv4 CIDR block: network/broadcast/first-host/last-host, subnet mask, wildcard, next adjacent block, total and usable host counts, classfulness, and visibility (private/loopback/multicast/public).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"color-converter","name":"Color Converter","category":"design","description":"Convert a color between hex, RGB, HSL, HSV, and CMYK. Accepts any of those formats as input and returns all of them. Hex output is uppercase 6-digit.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"comment-style-converter","name":"Comment Style Converter","category":"code","description":"Convert source-code comments between styles: `//`, `#`, `--`, `;`, `%`, `/* */`, `<!-- -->`, `{- -}`, `(* *)`. Non-comment lines are passed through unchanged. Set `stripOnly: true` to remove markers without rewrapping.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"composer-json-validator","name":"composer.json Validator","category":"code","description":"Validate a PHP `composer.json` against common constraints: vendor/package name pattern, version syntax, require/require-dev constraint shape, recognized type/stability/license. Issues are split into errors (spec violations) and warnings (style / unusual values).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"compound-interest","name":"Compound Interest Calculator","category":"finance","description":"Project the future value of a starting principal plus recurring contributions at a given annual rate, with configurable compounding (daily through annual) and contribution frequency (weekly/monthly/annual). Returns total FV, principal/contribution breakdown, interest earned, and per-year balance table.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"cookie-builder","name":"Cookie Builder","category":"network","description":"Build a `Set-Cookie` header value from structured attributes, or parse one into name/value/attrs. Build mode also returns sanity warnings (e.g. `SameSite=None requires Secure`, `__Host-` prefix rules).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"coordinates-tool","name":"Coordinates Tool","category":"network","description":"Parse a lat/lon coordinate (decimal `37.7749, -122.4194` or DMS `37°46'30\"N, 122°25'10\"W`), normalise to both formats, and produce a Google Maps URL. Pass a second point `b` to also compute great-circle distance (km/mi/nmi) and initial bearing (degrees + compass).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"country-code-lookup","name":"Country Code Lookup","category":"network","description":"ISO 3166 country reference: name, alpha-2, alpha-3, E.164 phone code, ISO 4217 currency, ccTLD. `lookup` by `a2`/`a3`/`name`, `search` by substring across every field, or `list` everything.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"cron-explainer","name":"Cron Explainer","category":"datetime","description":"Translate a 5-field cron expression to plain English (via cronstrue) and compute the next N firing times. Handles `,` lists, `-` ranges, `/` steps, `*`/`?` wildcards, and 3-letter month/day names. Approximates POSIX DOM/DOW behaviour (requires both — common case is one is wildcard).","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"csp-builder","name":"Content Security Policy Builder","category":"network","description":"Build a `Content-Security-Policy` header value from per-directive source lists. Returns the raw value, the full HTTP header, and an equivalent <meta> tag. Use to lock down which origins your site can load scripts/styles/images from.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"css-specificity","name":"CSS Specificity","category":"design","description":"Compute CSS-selector specificity as (a, b, c). Handles `:is()` / `:not()` / `:has()` / `:matches()` (max of arguments), `:where()` (always 0), pseudo-elements (single- or double-colon), attribute selectors, namespaces. Comma-separated selectors on one line score independently.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"css-unit-converter","name":"CSS Unit Converter","category":"design","description":"Convert a value between px, rem, em, pt, and percent. Provide `base` (root font size) for rem, `parent` (parent font size) for em, and `container` (container size) for percent. Defaults are 16/16/1280.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"csv-json","name":"CSV ↔ JSON Converter","category":"csv","description":"Convert CSV with a header row into a JSON array of objects, or flatten a JSON array of objects back into CSV. Quoted fields and embedded delimiters are handled.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"curl-builder","name":"cURL Builder","category":"network","description":"Build a properly quoted `curl` command from structured fields (method, URL, headers, body, auth, flags). Use to script API calls reproducibly. Body modes: `raw`, `json` (adds Content-Type), `form` (URL-encodes per line). Does not execute the command.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"curl-converter","name":"cURL Converter","category":"network","description":"Parse a `curl` command and emit equivalent code in another language: JavaScript fetch, Node https, Python requests, Ruby Net::HTTP, Go net/http, PowerShell, HTTPie, or wget. Pass `lang` for a single output; omit it for every language.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"csv-cleaner","name":"CSV Cleaner","category":"data","description":"Tidy a CSV: auto-detect delimiter (`,`, `;`, tab, `|`), trim/collapse whitespace, drop empty rows, deduplicate body rows, optionally lowercase the header. Re-emits as RFC 4180-style quoted CSV in the resolved delimiter.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"data-size-converter","name":"Data Size Converter","category":"encoding","description":"Convert a data size between bits, bytes, SI units (KB/MB/GB/TB/PB, 1000-based), and binary units (KiB/MiB/GiB/TiB/PiB, 1024-based). Pass `to` for a single conversion or omit it to get every unit at once.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"diff-checker","name":"Text Diff","category":"text","description":"Line-level diff between two text blobs using the LCS algorithm. Returns hunks (with line numbers), totals, and a unified-diff string. Optional case- and whitespace-insensitive comparison. Inputs capped at 5000 lines per side.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"discount-calculator","name":"Discount Calculator","category":"finance","description":"Compute the final price after one or more stacked percentage discounts, plus optional sales tax. Discounts are applied in order (so `[20, 10]` is 20% off, then another 10% off the result — not 30% total). Tax is calculated on the post-discount price by default.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"dns-record-types","name":"DNS Record Types","category":"network","description":"Static reference for the DNS record types you actually meet in the wild: A/AAAA, CNAME/ALIAS, MX, TXT, NS/SOA, PTR, SRV, CAA, DNSSEC (DS/DNSKEY/RRSIG/NSEC), DANE TLSA, SSHFP, SVCB/HTTPS, NAPTR, plus TXT-carried SPF/DKIM/DMARC/BIMI. `lookup` by type, `search` by substring, or `list` everything.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"docker-compose-validator","name":"docker-compose Validator","category":"devops","description":"Validate a `docker-compose.yml` against common-sense rules: known top-level keys, every service has `image` or `build`, recognized restart policies, depends_on points at real services, no host-port conflicts. Errors block; warnings nudge.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"dockerfile-starter","name":"Dockerfile Starter","category":"devops","description":"Generate a multi-stage Dockerfile and matching .dockerignore for a chosen ecosystem (node-alpine, python-slim, go-distroless, etc.). Starters only — review before shipping.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"email-auth-parser","name":"Email Auth Parser","category":"network","description":"Parse and explain SPF / DKIM / DMARC TXT records. SPF mechanisms get qualifier translations and a DNS-lookup count check (RFC 7208 limit of 10). DMARC/DKIM tags get per-tag explanations.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"email-list-parser","name":"Email List Parser","category":"text","description":"Parse a messy list of email addresses into structured records. Splits on `,`/`;`/newline (quote- and angle-bracket aware), strips `(comments)`, extracts display names from `Name <addr>` form, classifies each as valid/invalid, optionally deduplicates, and bins by domain.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"env-parser","name":".env Parser","category":"code","description":"Parse a `.env` file into structured entries. Honours `export `, double-quoted values with `\\n`/`\\t`/`\\\"` escapes, single-quoted values with `''` literal quotes, multi-line quoted values, and trailing comments. Returns entries with line numbers, warnings for malformed entries, and a `{ key: value }` map for direct use.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"escape-unescape","name":"Escape / Unescape","category":"text","description":"Escape or unescape text for JSON strings, JavaScript string literals, HTML, XML, or SQL string literals. JSON unescape uses JSON.parse semantics; HTML unescape covers the standard short entity list (no full HTML5 table).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"exif-viewer","name":"EXIF Viewer","category":"image","description":"Read EXIF / IPTC / XMP metadata from an image (JPEG/PNG/WebP/HEIC/TIFF). Accepts base64-encoded bytes. Flags privacy-sensitive tags (GPS coords, timestamps, serial numbers, camera model). Does NOT strip metadata — use an image re-encode for that.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"find-replace","name":"Find & Replace","category":"text","description":"Find and replace text with optional regex, case-insensitivity, whole-word matching, and multi-line mode. Returns the modified text and the replacement count. Always replaces all matches.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"gemfile-parser","name":"Gemfile Parser","category":"code","description":"Parse a Ruby `Gemfile` into structured form: sources, Ruby version, gem list with version requirement, the group it belongs to (default if outside a `group … do`), and any options (`require: false`, `git: …`, etc.). Lightweight — doesn't execute Ruby code.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"gh-actions-starter","name":"GitHub Actions Starter","category":"devops","description":"Generate a GitHub Actions workflow YAML for common pipelines (node-ci, python-ci, etc.). Customizable branch and matrix. Starters only — review before merging.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"gitignore-builder","name":".gitignore Builder","category":"devops","description":"Merge one or more language/framework/editor templates into a single .gitignore. Deduplicates lines across templates while preserving section headers. Templates list available via `available` in the response.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"go-mod-parser","name":"go.mod Parser","category":"code","description":"Parse a Go `go.mod` file and return module path, Go version, toolchain, require list (with indirect flag), replace/exclude/retract directives. Handles both block (`require ( … )`) and single-line forms.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"gradient-generator","name":"CSS Gradient Generator","category":"design","description":"Build a CSS gradient function (linear, radial, or conic) from a list of color stops. Returns both the raw gradient value and a complete `background:` declaration.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"hash-generator","name":"Hash Generator","category":"crypto","description":"Compute SHA-1, SHA-256, SHA-384, and SHA-512 hex digests of a UTF-8 string (or base64-decoded bytes). Useful for checksums and content fingerprints. Do NOT use SHA-1 for security; prefer SHA-256+ for trust decisions.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"hash-snippet-generator","name":"Hash Snippet Generator","category":"code","description":"Emit ready-to-paste hash code in Node, browser Web Crypto, Python, PHP, Ruby, Go, Rust, or shell. Supports MD5, SHA-1, SHA-256, SHA-512, and HMAC-SHA-256. Pass `lang` for a single snippet, omit for all.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"headline-analyzer","name":"Headline Analyzer","category":"content","description":"Score a headline on length, word count, number presence, power words, emotional words, headline type (how-to / list / question / statement), and capitalisation. Heuristic — useful for blog / marketing copy A/B comparison. Output is opinionated, not authoritative.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"hmac-calculator","name":"HMAC Calculator","category":"crypto","description":"Compute an HMAC signature over a message using a shared secret. Returns both hex and base64 forms. Use to verify webhook signatures, sign API requests, or generate one-time tokens. SHA-256 by default.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"hreflang-generator","name":"Hreflang Generator","category":"marketing","description":"Emit `<link rel=\"alternate\" hreflang>` tags for an SEO multi-region/multi-language site. Pass a list of `{ lang, url }` pairs; remember to include an `x-default` entry. Attribute values are HTML-escaped.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"html-css-formatter","name":"HTML / CSS Formatter & Minifier","category":"web","description":"Pretty-print or minify HTML and CSS. Formatting uses js-beautify; minification strips comments (preserves IE conditional comments) and collapses whitespace.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"html-entities","name":"HTML Entities Encode / Decode","category":"encoding","description":"Encode & < > \" ' as HTML entities for safe embedding, or decode entities back to characters. Decoding supports the common ~30 named entities plus all numeric and hex character references.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"html-table-generator","name":"HTML Table Generator","category":"web","description":"Convert CSV (or TSV / SSV) to a plain `<table>`, a Tailwind-styled `<table>`, or a Markdown pipe table. Quote-aware CSV parsing, HTML-escapes cell contents, optional header row.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"http-message-parser","name":"HTTP Message Parser","category":"network","description":"Parse a raw HTTP request, raw HTTP response, or bare header block into a structured object. Handles header line folding (continuation lines), distinguishes start lines from headers, and separates the body at the first blank line.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"http-status-codes","name":"HTTP Status Codes","category":"network","description":"Look up an HTTP status code by number, search across name/description, or list all codes in a class (1xx/2xx/3xx/4xx/5xx). Static reference — covers RFC-defined codes plus the common WebDAV/IANA additions.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"ip-classifier","name":"IP Classifier","category":"network","description":"Classify an IPv4 or IPv6 address into a category (public, private, loopback, link-local, multicast, documentation, CGNAT, ULA, etc.) with the RFC reference. Auto-detects family.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"ip-converter","name":"IP Converter","category":"network","description":"Convert an IP address between notations. IPv4: dotted-quad ↔ integer ↔ hex ↔ binary. IPv6: any notation → expanded, compressed (RFC 5952), 128-bit hex, plus the embedded IPv4 if any. Auto-detects family from the input.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"js-ast-viewer","name":"JavaScript AST Viewer","category":"code","description":"Parse JavaScript / TypeScript-flavoured source code to an ESTree AST via Acorn. Optional `jsx: true` strips JSX expressions to `null` placeholders so the surrounding JS parses (acorn doesn't ship with full JSX). ESLint and prettier and many codemods walk this same tree.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"js-minifier","name":"JavaScript Minifier","category":"code","description":"Minify JavaScript via Terser. Supports compress, mangle, keep-classnames, and ECMA target (2017/2020/2022). Returns the minified code with byte counts and percent saved.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"js-stack-parser","name":"JS Stack Trace Parser","category":"code","description":"Parse a JavaScript stack trace into a structured frame list. Supports V8 (`at Foo (file:line:col)`, including `async`/`new` and `eval at`) and Firefox (`Foo@file:line:col`) formats. Flags third-party frames (node_modules, node:, webpack vendor) so you can filter them.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"json-diff","name":"JSON Diff","category":"json","description":"Structural diff of two JSON values. Walks objects and arrays recursively, returning added/removed/changed ops with JSONPath-style paths. Optionally treats arrays as unordered sets for diffing tag-like lists.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"keyword-density","name":"Keyword Density","category":"marketing","description":"Compute keyword density for a block of text. Returns total/unique word counts plus top-N 1/2/3-grams. With `ignoreStopwords: true` (default), drops common English filler words.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"json-formatter","name":"JSON Formatter","category":"json","description":"Pretty-print JSON with a configurable indent, or minify it to a single line. Throws on invalid JSON with the parser's error position.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"json-to-code","name":"JSON → Code Literal","category":"json","description":"Render a JSON value as a code literal in JavaScript/TypeScript, Python, PHP, Ruby, Go (map[string]any), Rust (serde-style), or Java (Map.of / Map.ofEntries). Pass `lang` for a single output, omit for all.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"json-to-schema","name":"JSON → JSON Schema","category":"json","description":"Infer a JSON Schema (Draft 2020-12) from sample data. Handles a single value, a single object, or an array of objects (merged into a shared schema). Detects common string formats (date, date-time, email, uri, uuid). Returns additionalProperties: false on objects.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"json-to-struct","name":"JSON → Struct / Class","category":"json","description":"Generate typed structs/classes from sample JSON in TypeScript, Python (@dataclass), PHP, Ruby (Struct), Go (json tags), Rust (serde), or Java (Jackson). Merges sibling object shapes across array elements. Pass `lang` for a single output, omit for all.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"json-to-ts","name":"JSON → TypeScript","category":"json","description":"Generate TypeScript interfaces (or `type` aliases) from sample JSON. Merges sibling object shapes, marks keys missing in some samples as `?`, names nested types by their key. Optional `readonly` modifier on all fields.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"json-to-zod","name":"JSON → Zod","category":"json","description":"Generate a Zod schema (`z.object({…})`) and inferred TypeScript type from sample JSON. Sniffs string formats (uuid, email, url, datetime, date) and emits `.optional()` for keys not present in every sampled object.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"jsonpath-tester","name":"JSONPath Tester","category":"json","description":"Query JSON data with a JSONPath expression. Supports `$`, `.name`/`['name']`, recursive `..`, wildcards `[*]`, indices `[i]`, slices `[a:b:s]`, and filter expressions `[?(@.prop > 5)]`. Filter expressions are evaluated with `@` as the current item using a sandboxed Function.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"jwt-builder","name":"JWT Builder","category":"security","description":"Build a JWT from a payload object. Supports HS256/HS384/HS512 (HMAC) signing and `none` for testing. Pass `iat`/`exp`/`nbf` claims yourself — the tool does not invent them. Header `alg` is always set from the chosen algorithm.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"jwt-decoder","name":"JWT Decoder","category":"auth","description":"Decode a JSON Web Token into its header, payload, and signature. Reports whether the exp claim is in the past. Does NOT verify the signature — never trust decoded claims for authorization without verifying.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"jwt-secret-strength","name":"JWT Secret Strength","category":"security","description":"Audit an HMAC JWT signing secret. Returns byte length, estimated bits of entropy, whether the secret appears in well-known-defaults lists, and a per-algorithm pass/fail against RFC 7518 minimum key sizes (HS256: 32B, HS384: 48B, HS512: 64B).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"license-picker","name":"License Picker","category":"code","description":"Generate a filled-in LICENSE file for common open-source licenses (MIT, Apache-2.0, GPL-3.0, BSD-2-Clause, BSD-3-Clause, ISC, MPL-2.0, Unlicense, etc.). Substitutes `{year}` and `{author}` placeholders. Returns the SPDX id, full body, and a summary of permissions/conditions.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"line-endings","name":"Line Endings","category":"text","description":"Detect and convert line endings (LF / CRLF / CR). Returns counts of each style plus the dominant variant. Pass `target` to convert; omit to detect only.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"line-sorter","name":"Line Sorter","category":"text","description":"Sort, deduplicate, and clean a list of lines. Orders: alphabetical, natural (1, 2, 10), length, reverse, shuffle. Options: case-insensitive compare, trim whitespace, drop blank lines, dedupe. Returns counts of input/output/duplicates removed.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"list-cleaner","name":"List Cleaner","category":"text","description":"Parse a sloppy list (newlines / commas / semicolons / tabs, quoted or not), normalise case, optionally deduplicate and sort, then re-emit in newline / comma / semicolon / space / JSON / quoted-CSV form.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"loan-calculator","name":"Loan Calculator","category":"finance","description":"Compute the monthly payment, total paid, and total interest for a fixed-rate amortising loan. Optionally returns the full month-by-month amortization schedule. Uses the standard PMT formula; final month sweeps up any rounding remainder.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"log-parser","name":"Access Log Parser","category":"devops","description":"Parse Apache/nginx Combined Log Format into structured rows (IP, timestamp, method/path/protocol, status, bytes, referer, UA) plus aggregates: total bytes, status-code distribution, top 5 requested paths.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"lorem-ipsum","name":"Lorem Ipsum Generator","category":"text","description":"Generate placeholder text in paragraphs, sentences, or words. Optional `seed` makes the output deterministic (mulberry32 PRNG); without a seed, output is random. `startWithLorem` controls whether the first unit gets the canonical opener.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"luhn-validator","name":"Luhn / Card Validator","category":"security","description":"Run the Luhn (mod-10) checksum on a digit sequence and identify the card brand by IIN (Visa, Mastercard, Amex, Discover, Diners Club, JCB, UnionPay, Maestro). Returns checksum validity, brand, and whether the digit count matches the brand's expected lengths.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"mac-formatter","name":"MAC Formatter","category":"network","description":"Normalise a MAC address (any input form) to colon, hyphen, Cisco dot-quad, and bare formats. Reports the OUI (first 24 bits) and decodes the I/G (unicast/multicast) and U/L (universal/local) bits from the first byte.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"markdown-html-converter","name":"Markdown ↔ HTML Converter","category":"web","description":"Convert Markdown to HTML (via marked, GFM enabled by default) or HTML to Markdown (via turndown). Note: the output of md2html is RAW HTML — sanitize before rendering in a browser context.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"meta-length-checker","name":"Meta Length Checker","category":"marketing","description":"Check SEO title and meta-description against Google's character and pixel budgets (≈600px / 60 chars for title; ≈920px / 160 chars for description). Pixel widths are heuristic (canvas-free server-side approximation).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"mime-types","name":"MIME Types","category":"encoding","description":"MIME type reference (text/application/image/audio/video/font/multipart). `byMime` returns the canonical entry; `byExtension` finds the first MIME for a file extension; `search` does substring matching across MIME/extension/description; `list` returns everything.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"mortgage-calculator","name":"Mortgage Calculator","category":"finance","description":"Compute the full monthly mortgage payment (PITI) — principal + interest from the loan, monthly property tax, monthly insurance, and PMI when LTV > 80%. Returns LTV, the breakdown, and total interest / total paid over the term.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"nanoid-generator","name":"NanoID Generator","category":"id","description":"Generate NanoID-style random identifiers using a chosen alphabet. Presets: default (URL-safe 64), alphanumeric, lower/upper alphanumeric, digits, hex, no-lookalikes. Returns the bits of entropy per ID alongside the values.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"og-tag-generator","name":"Open Graph Tag Generator","category":"marketing","description":"Build a complete set of Open Graph + Twitter Card `<meta>` tags for social-media previews. Attribute values are HTML-escaped. Includes `og:title/description/type/url/image/site_name/locale` plus matching `twitter:card/title/description/image/site`.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"package-json-validator","name":"package.json Validator","category":"code","description":"Validate an npm `package.json` against the spec: required `name` and `version`, SemVer format, allowed name characters, scripts shape, dependency ranges, SPDX license, engines ranges. Errors are spec violations; warnings flag non-standard but functional values.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"password-generator","name":"Password Generator","category":"security","description":"Generate cryptographically random passwords using Web Crypto. Configurable length (4-256) and character classes (lowercase, uppercase, digits, symbols). Output always includes at least one of each enabled class. Returns each password with its estimated entropy.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"password-strength","name":"Password Strength Checker","category":"security","description":"Estimate password entropy and offline crack time. Detects common passwords, keyboard sequences, repeated runs, and `<word><number>` patterns. Returns bits of entropy, a verbal band (Very weak → Excellent), the estimated crack time at the assumed guesses/sec, and prescriptive suggestions.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"pem-formatter","name":"PEM Formatter","category":"security","description":"Parse one or more PEM blocks (CERTIFICATE, PUBLIC KEY, etc.), verify the base64 body decodes, and re-emit with canonical 64-column line wrapping. A raw base64 blob with no headers is reported back in `loose`.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"percentage-tool","name":"Percentage Toolkit","category":"finance","description":"Six percentage calculations in one tool: `pctOf` (X% of Y), `whatPct` (X is what % of Y), `pctChange` (X → Y % change), `markup` (cost → selling price), `margin` (cost + sell → margin), `ratio` (simplify A:B with GCD).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"php-serialize","name":"PHP serialize() ↔ JSON","category":"code","description":"Decode PHP's `serialize()` format to a JSON value, or encode a JSON value back. Handles N/b/i/d/s/a types; rejects O (objects) and r/R (references). PHP arrays with sequential integer keys decode as JS arrays; otherwise as objects.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"pyproject-toml-parser","name":"pyproject.toml Parser","category":"code","description":"Parse a Python `pyproject.toml` into structured `[project]`, `[build-system]`, dependency lists, optional-dependency groups, and `[tool.X]` settings (e.g. tool.ruff, tool.mypy). Lightweight TOML subset — handles inline tables, arrays, comments, continuation lines.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"python-string-escape","name":"Python String Escape","category":"code","description":"Escape / unescape Python string literals. Supports `\\n`, `\\t`, `\\x`, `\\u`, `\\U`, `\\N{NAME}` (preserved), octal escapes; `r`/`u`/`b` string prefixes on unescape. ASCII-only mode in escape converts non-ASCII to `\\u`/`\\U` escapes.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"python-traceback-parser","name":"Python Traceback Parser","category":"code","description":"Parse a Python traceback (including chained exceptions with `During handling` / `direct cause`) into structured blocks of frames + exception. Each frame is flagged as third-party when the file path lives in `/pythonX.Y/` or `/site-packages/`. Option `hideStdlib` filters those out.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"qr-code","name":"QR Code Generator","category":"image","description":"Generate a QR code as a data URL, SVG string, or base64-encoded PNG. Configurable size (64-2048px), error correction level (L/M/Q/H), and quiet-zone margin. Useful for embedding URLs, Wi-Fi credentials, vCards, payment links.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"query-param-manager","name":"Query Param Manager","category":"web","description":"Inspect and edit a URL's query string. Returns the parsed params, base URL, and hash; pass `ops` to remove keys, set/overwrite values, append duplicates, or sort alphabetically. Useful for normalising tracking URLs.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"random-number-generator","name":"Random Number Generator","category":"math","description":"Generate cryptographically uniform random integers in `[min, max]` (inclusive). Optional `unique: true` draws without replacement (cap at the range size); `sorted: true` returns in ascending order. Uses `crypto.getRandomValues` with rejection sampling.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"readability-checker","name":"Readability Checker","category":"content","description":"Compute readability metrics for prose: Flesch Reading Ease (with named band), Flesch-Kincaid Grade Level, Automated Readability Index, Coleman-Liau, Gunning Fog. Includes word/sentence/syllable counts and complex-word count. Syllable counting is heuristic.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"readme-skeleton","name":"README Skeleton","category":"code","description":"Generate a starter README.md with sensible defaults: title, badges (CI / npm / coverage / license), description, table of contents, install command, language-specific usage block (Node/Python/Ruby/Rust/Go/generic), API / Configuration / Contributing / License sections.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"regex-cheatsheet","name":"Regex Cheatsheet","category":"text","description":"Reference for JavaScript-flavoured regex tokens: character classes, anchors, quantifiers, groups, escapes, flags. Also returns common pre-built patterns (email, URL, IPv4, US phone, hex color, date). Use `search` to find tokens or labels matching a substring.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"regex-safety","name":"Regex Safety / ReDoS","category":"text","description":"Audit a regex for ReDoS (catastrophic backtracking) risks. Looks for nested quantifiers, overlapping alternation under quantifiers, multiple greedy `.+`/`.*`, excessive lookarounds. Also runs synthetic worst-case probes (`a+!` of varying length) to detect exponential slowdowns empirically.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"regex-tester","name":"Regex Tester","category":"text","description":"Test a JavaScript-flavoured regex against text. Returns every match with start/end offsets, captured text, and group values (named groups labelled). The `g` flag is added automatically so all matches enumerate. Safety cap: at most 5000 matches.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"requirements-txt-parser","name":"requirements.txt Parser","category":"code","description":"Parse a Python `requirements.txt` into typed entries: pinned requirements (with extras + specifier + environment marker), direct-URL installs (`name @ url`), editable installs (`-e`), `-r`/`-c` include/constraint lines, options, comments, blanks, and invalid lines. Also returns a normalised package-name list.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"robots-txt-generator","name":"robots.txt Generator","category":"marketing","description":"Generate a `robots.txt` file from per-user-agent rule blocks. Each block has its own Allow/Disallow lists and optional Crawl-delay. An empty block emits `Disallow:` (allow everything for that agent). Optional `Sitemap:` URL appended at the end.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"savings-goal","name":"Savings Goal Calculator","category":"finance","description":"Two modes: `requiredMonthly` — how much to save monthly to reach a target in N years; `timeToGoal` — how long a given monthly contribution will take. Both compound monthly at the supplied annual rate. Returns null months if the goal is unreachable (e.g. zero contribution, zero rate, starting < target).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"schema-markup-generator","name":"Schema.org Markup Generator","category":"marketing","description":"Build schema.org JSON-LD blocks for FAQ pages, LocalBusiness listings, Articles, or Products. Returns both the parsed object and a ready-to-drop `<script type=\"application/ld+json\">` tag. Useful for SEO rich-results eligibility.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"schema-to-ts","name":"JSON Schema → TypeScript","category":"json","description":"Convert a JSON Schema (Draft 2020-12) into TypeScript type aliases. Handles `$ref` (local `#/$defs/...` only), `oneOf`/`anyOf`/`allOf`, `enum`/`const`, nullable type unions, `additionalProperties`, and named definitions under `$defs` or `definitions`.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"schema-validator","name":"JSON Schema Validator","category":"json","description":"Validate data against a JSON Schema (draft 2020-12 by default) using Ajv with `addFormats` enabled. Returns `valid` plus a structured list of errors (path, keyword, message, params). Pass `schema` as either a JSON string or a parsed object.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"semver-compare","name":"SemVer Compare","category":"code","description":"Compare two semantic versions (with or without leading `v`, with prerelease and build metadata). Returns the parsed components and a verdict: which version is newer (`up`/`down`/`equal`) and what kind of change separates them (major/minor/patch/prerelease/build).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"serp-preview","name":"SERP Preview","category":"marketing","description":"Preview how a page's title, URL breadcrumb, and meta description appear in Google search results — desktop and mobile, with realistic truncation. Width estimates are heuristic (server-safe, no canvas).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"slug-generator","name":"Slug Generator","category":"text","description":"Turn text into a URL-safe slug. Decomposes accents (NFKD), transliterates ß/æ/œ/ø, replaces runs of non-alphanumerics with the chosen separator, optionally lowercases, optionally strips English stop-words, and truncates cleanly at separator boundaries. Multi-line input produces one slug per non-empty line.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"source-map-decoder","name":"Source Map Decoder","category":"code","description":"Given a JavaScript source map and a list of bundled-output positions, return the original `source:line:column:name` for each. Useful for un-minifying stack traces. Accepts the source map as either a JSON string or an already-parsed object.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"sql-create-table-generator","name":"SQL CREATE TABLE Generator","category":"sql","description":"Infer column types from sample CSV/TSV/JSON data and emit a `CREATE TABLE` statement for PostgreSQL, MySQL, SQLite, or SQL Server. Detects int/bigint/decimal/boolean/date/timestamp/varchar/text. Optional auto-increment primary key. Columns with no empty values get `NOT NULL`.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"sql-diff","name":"SQL Diff","category":"sql","description":"Canonicalize two SQL snippets to a common formatting (via sql-formatter) and produce a line-level LCS diff. Returns `same`/`add`/`del` ops plus add/remove counts. Useful for comparing query revisions without false-positives from formatting noise.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"sql-escape","name":"SQL Escape / Unescape","category":"sql","description":"Escape raw text for embedding in a SQL string literal, or unescape a SQL literal back to raw text. ANSI is the cross-dialect default; MySQL adds backslash escapes; Postgres uses E'…' form when special characters are present.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"sql-formatter","name":"SQL Formatter","category":"sql","description":"Pretty-print SQL with indentation, keyword case normalization, and per-dialect keyword recognition. Backed by sql-formatter.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"sql-insert-generator","name":"SQL INSERT Generator","category":"sql","description":"Generate `INSERT INTO …` SQL from CSV/TSV/JSON sample data. Auto-detects CSV delimiter, supports JSON array-of-objects. Modes: `multi` (one INSERT with multi-row VALUES) or `single` (one INSERT per row). Empty cells become `NULL` by default.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"sql-minifier","name":"SQL Minifier","category":"sql","description":"Strip SQL comments and collapse whitespace while preserving string literals, quoted identifiers, and dollar-quoted blocks. Output is a single line of valid SQL.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"sql-parameterizer","name":"SQL Parameterizer","category":"sql","description":"Replace inline SQL string and numeric literals with placeholders (?, $1, :p1) and return the extracted bind values. Use to convert ad-hoc SQL into prepared-statement form for review or to prevent injection.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"svg-optimizer","name":"SVG Optimizer","category":"image","description":"Optimise SVG markup via SVGO (browser build) with the default plugin set. Configurable multipass, floating-point precision (0-8), and optional removal of width/height attributes. `removeViewBox` is exposed but usually shouldn't be enabled — it breaks responsive scaling.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"tabs-spaces","name":"Tabs ↔ Spaces","category":"text","description":"Convert between tab and space indentation. Default scope is `leading` (only touches indentation at the start of each line) — use `all` to replace every occurrence. Reports detected tab/space line counts so you can spot mixed indentation.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"tcp-port-reference","name":"TCP/UDP Port Reference","category":"network","description":"Common TCP/UDP port assignments. `lookup` finds every service registered on a port (including the IANA tier); `search` matches substring against port/service/description/protocol; `list` returns everything.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"time-duration","name":"Time Duration","category":"datetime","description":"Two modes: `between` computes the duration between two timestamps (ms, human-readable, breakdown, totals); `add` returns the timestamp resulting from adding days/hours/minutes/seconds to a start time.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"timestamp-converter","name":"Timestamp Converter","category":"time","description":"Convert between Unix timestamps (auto-detects seconds vs milliseconds), ISO 8601, and human-readable strings. Output is always in UTC.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"tip-calculator","name":"Tip Calculator","category":"finance","description":"Compute tip, tax, and total for a restaurant bill, split per person. Tip is on the pre-tax bill by default (US convention); pass `tipOnPreTax: false` to tip on the post-tax total instead.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"totp-generator","name":"TOTP Generator","category":"security","description":"Compute the current TOTP (RFC 6238) code for a Base32 secret or a full `otpauth://totp/…` URI. Returns the code, seconds remaining until rotation, and the underlying parameters (algorithm, digits, period). Pass `timestamp` to compute for a specific moment.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"ulid-generator","name":"ULID Generator","category":"id","description":"Generate or decode ULIDs (Universally Unique Lexicographically Sortable Identifier). 26-char Crockford Base32: 10 chars of millisecond timestamp + 16 chars of randomness. Sortable by creation time, URL-safe, case-insensitive.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"unicode-codepoint","name":"Unicode Codepoint Inspector","category":"encoding","description":"Inspect Unicode characters: codepoint (U+XXXX), decimal, UTF-8 hex + URL-encoded form, UTF-16, JS/Python/Rust escapes, HTML entities (decimal/hex/named when known). Mode `chars` walks each character of the input; mode `codepoint` parses a codepoint expression.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"unit-converter","name":"Unit Converter","category":"encoding","description":"Convert between units in 9 categories: length, mass, volume (US + UK + metric), area, speed, pressure, energy, angle, and temperature (C/F/K, non-linear). Pass `to` for a single conversion or omit it to get every unit in the category.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"url-encoder","name":"URL Encoder / Decoder","category":"url","description":"Percent-encode or decode text for use in URLs. 'component' scope is the right pick 95% of the time (query values, path segments). 'uri' scope is for transforming a whole URL where the structural characters need to survive.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"url-parser","name":"URL Parser","category":"url","description":"Parse a URL into its components per the WHATWG URL standard: protocol, host, port, pathname, search, hash, plus a flattened params array. Use instead of regex-parsing URLs.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"user-agent-parser","name":"User-Agent Parser","category":"network","description":"Parse a User-Agent header into browser/engine/OS/device/CPU components via ua-parser-js. Useful for analytics normalization and feature gating. Note: modern User-Agent strings are increasingly reduced — prefer Client Hints (Sec-CH-UA-*) for accurate UA data from real browsers.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"utm-builder","name":"UTM Builder","category":"marketing","description":"Append Google Analytics-compatible UTM parameters (utm_source, utm_medium, utm_campaign, optional utm_term and utm_content) to a destination URL. Strips any existing utm_* params before appending so you can re-tag confidently.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"utm-parser","name":"UTM Parser","category":"marketing","description":"Parse a URL into its base, hash, UTM params, recognised vendor click IDs (gclid, fbclid, msclkid, mc_cid, etc.) annotated with the vendor, and any remaining query params. Useful for normalising tracking-laden URLs before storing them.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"uuid-v3-v5","name":"Namespace UUID (v3 / v5)","category":"id","description":"Generate deterministic UUIDs by hashing a name under a namespace. v5 (SHA-1) is the modern choice; v3 (MD5) is legacy. Namespace can be a preset (`dns`, `url`, `oid`, `x500`) or any UUID. Same name + namespace always yields the same UUID.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"uuid-validator","name":"UUID Validator","category":"id","description":"Validate a UUID and report its version, variant (NCS-compatible / RFC 4122 / Microsoft / Reserved / Nil), and embedded timestamp if the version carries one (v1, v7). Returns valid:false for malformed input rather than throwing.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"uuid-generator","name":"UUID Generator","category":"encoding","description":"Generate UUIDs. v4 is random (best for unguessable IDs, auth tokens). v7 is time-ordered (best for database primary keys — sortable by creation time). Up to 1000 at a time.","outputKind":"json","deterministic":false,"needsNetwork":false,"version":"1.0.0"},{"id":"wake-on-lan","name":"Wake-on-LAN Packet","category":"network","description":"Build a 102-byte Wake-on-LAN magic packet for a target MAC address (6 bytes of `0xFF` + 16 repetitions of the MAC). Returns continuous hex, byte-grouped hex, and base64. Send via UDP to port 9 (discard) or port 7 (echo) on the broadcast address.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"word-counter","name":"Word Counter","category":"text","description":"Count characters (with and without whitespace), words, sentences, paragraphs, and lines for a string. Also returns an estimated reading time in minutes. Sentence count is a heuristic (counts runs ending in `.!?`).","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"xml-formatter","name":"XML Formatter & Minifier","category":"web","description":"Pretty-print or minify XML. Uses a stream tokenizer rather than a DOM round-trip, so comments, processing instructions, and CDATA blocks are preserved. Does not validate structure — pass invalid XML and you'll get best-effort output.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"yaml-json","name":"YAML ↔ JSON Converter","category":"yaml","description":"Convert YAML to JSON or JSON to YAML. Multi-document YAML (separated by ---) is preserved as a JSON array.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"},{"id":"zip-code-lookup","name":"US ZIP Code Lookup","category":"network","description":"US ZIP code reference: city, state, county, lat/lon. Starter dataset — not exhaustive. `lookup` by 5-digit ZIP returns the first hit (a ZIP may serve multiple cities), `search` finds substring matches, `list` returns the full dataset.","outputKind":"json","deterministic":true,"needsNetwork":false,"version":"1.0.0"}]}