Tools

Nineteen small tools for QA and developers

The everyday jobs that interrupt a debugging session: decode a JWT, check a file's SHA-256 against a published one, find out what a file really is, find out why a CSV will not import, turn a JSON Schema into test cases, work out what a cron line actually does, generate an image at an exact pixel size, or produce test data that cannot reach a real person. Every one runs in this page, so a production token, a customer CSV or a file you are not allowed to share never leaves your machine.

πŸ”’ Runs entirely in your browser: nothing is uploaded

JWT decoder

Decode a JSON Web Token's header and payload. Not verified: decoding only, in your browser.

HEADER
PAYLOAD

JSON formatter & validator

Pretty-print, minify, or validate JSON.

JSON Schema test-case generator

Paste a JSON Schema and get the test data that goes with it: one valid instance, then boundary values and invalid variants for every property. Missing required fields, wrong types, one past each length and range limit, values outside the enum, broken formats, duplicate items. Every case is checked against the schema before it is shown, so "invalid" really fails. Runs in your browser.

Keywords it understands: type, properties, required, additionalProperties, enum, const, minLength, maxLength, pattern, format (email, uri, date, date-time, time, uuid, ipv4, hostname), minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, items, minItems, maxItems, uniqueItems, minProperties, maxProperties, allOf, anyOf, oneOf, not, and $ref within the schema. Anything else is listed so you know it was skipped. Format cases only fail when your validator enforces format, which most do not by default: Ajv needs ajv-formats, and Python's jsonschema needs a format_checker.

Base64 encode / decode

Unicode-safe (UTF-8). Handles emoji and non-ASCII correctly.

Hash / checksum

SHA-1, SHA-256, SHA-384, SHA-512 of your text, computed with the browser's native crypto.

On brand: the SHA-256 here is exactly how every HEXAQA test file's published digest is computed: download a file, hash it, and it matches the value in the catalog.

UUID generator

Cryptographically-random UUID v4, generated locally.

Timestamp / epoch converter

Convert between Unix time and human dates. Seconds vs milliseconds auto-detected.

URL parser

Break a URL into its parts and decode the query string.

File hash & checksum verifier

Drop a file to fingerprint it, then paste an expected value to confirm it matches. The file is read locally: nothing is uploaded.

Drop a file here, or

SHA-1 / SHA-256 / SHA-384 / SHA-512 via the browser's native crypto, plus MD5 and CRC32.

On brand: every HEXAQA test file publishes a SHA-256: download one, drop it here, and confirm the digest matches the catalog exactly.

File signature inspector

Drop a file to see what it really is. A file's first bytes identify its format whatever it is called: this reads them, compares them with the name, and checks the structure for the damage and disguises that upload filters miss. The file is read locally: nothing is uploaded.

Drop a file here, or

Reads the first and last 64 KB. Over 90 formats, including the ZIP-based ones (DOCX, XLSX, EPUB, JAR).

Try it on the traps: a .jpg that is an executable, a GIF that is also HTML, a Zip Slip archive and a PDF with a broken cross-reference. Download one, then drop it here. What each signature means: file signature reference.

Test image generator

Create an image of an exact pixel size: for upload limits, layout tests and placeholders. Rendered on a canvas in your browser.

Fake test-data generator

Realistic-looking filler for forms and test databases: assembled at random, never copied from any real record.

Chosen so nothing reaches a real person: emails use example.test (RFC 2606 reserves .test, and it is never delegated in the public DNS, so mail cannot be delivered to anyone); phone numbers use 555-0100–555-0199, the only part of 555 that NANPA reserves for fiction; card numbers are published sandbox test numbers from payment processors such as Stripe, which only work in test mode; IBANs use a TEST bank code that does not exist.

Honest caveat: not guaranteed unique: names, companies and addresses are randomly assembled, not taken from any real record. Place names are deliberately synthetic and the ZIP deliberately does not match the state, so addresses are not deliverable. But a random pairing of a common first and last name can still coincide with a real person by chance. Treat these as realistic-looking filler, not as provably-unused identifiers.

Text / JSON diff

Line-by-line comparison. Normalise as JSON first so key order and formatting don't show up as false differences.

Regex tester

Test a pattern against sample text, see every match highlighted and list the capture groups.

CSV ⇄ JSON converter

RFC 4180-aware: handles quoted fields, embedded commas, newlines and doubled quotes correctly.

CSV and encoding inspector

Find out why a CSV will not import. Checks the encoding (UTF-8, a byte order mark, UTF-16 or Windows-1252), the delimiter, rows with the wrong number of fields, an unclosed quote, invisible characters, mixed line endings and cells that would run as spreadsheet formulas. The file is read locally: nothing is uploaded.

Drop a CSV here, or

Reads up to the first 50 MB. The encoding check needs the file itself: pasted text is already decoded.

Or paste CSV text

Try it on the traps: ragged rows, a BOM with semicolons, formula injection and a Latin-1 file. Download one, then drop it here.

Cron expression explainer

Translate a 5-field cron expression into plain English and preview the next times it will fire.

Field order: minute hour day-of-month month day-of-week. Day-of-week is 0–6 with 0 = Sunday.

Password & secret generator

Cryptographically-random values from your browser's secure RNG: useful for seeding test accounts and API keys.

QR code generator

Turn any text or URL into a QR code you can download as PNG: handy for testing scanners and deep links.