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 uploadedJWT decoder
Decode a JSON Web Token's header and payload. Not verified: decoding only, in your browser.
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.