Skip to content
Developer Tool

QR Payload Linter

Paste a QR payload and lint its syntax for known schemes — mailto:, WIFI:, vCard, geo:, tel:, calendar events, and URLs — with errors and warnings listed per payload. Findings update on every edit, entirely in your browser.

1. Paste the payload

The linter detects the scheme from the first line and applies that scheme's rules, plus generic checks: maximum length 2953 characters, stray whitespace, and non-ASCII content.

Result
Detected format
WIFI:
0 error(s) · 0 warning(s) · 37 characters
  • No problems found for the checks this linter runs.

Lint Before You Print

A QR code with a malformed payload fails silently: the code scans, the app opens, and then nothing works — a Wi-Fi code with a missing field, a calendar event without a start time, a mailto with a typo. Those failures are invisible in the artwork and obvious to the person scanning. Linting the payload before printing catches the structural mistakes that proofreading misses.

Lint, then test-scan

Linting proves the payload is well-formed; only a real test scan proves the whole journey works. Do both: lint the payload, print a proof, and scan it on two phones.

Frequently Asked Questions

What does the linter check?

Syntax for common QR payload formats: URLs, mailto:, tel:, sms:, geo:, WIFI:, vCard, and calendar events — plus length, whitespace, and dangerous schemes. It checks structure, not whether the destination is live or trustworthy.

Does a clean lint mean the code will scan?

It means the payload is well-formed. Whether it scans also depends on print size, contrast, density, and the scanner — a valid payload in a badly printed code still fails.

Why flag dangerous schemes?

Schemes like javascript: and data: can execute code or smuggle content when a scanner mishandles them. They have no legitimate place in a printed QR code and most scanners block them.

My payload format is not listed. What then?

The linter still runs the generic checks (length, whitespace, non-ASCII, dangerous scheme). For format-specific rules, check the specification of that format — the linter reports the scheme as unvalidated rather than guessing.