QR codes went from gimmick to infrastructure faster than anyone predicted. Restaurant menus, payment rails, Wi-Fi onboarding, vaccine passports, parking meters, conference badges — the same 21-by-21 to 177-by-177 grid of black squares now sits behind transactions that move money and identity. The generator above produces all nine of the standard payload types in your browser, with the same wire formats every smartphone camera already knows how to read.
The nine payload types
Text is a raw string — useful for ticket IDs, asset tags, or anything that just needs to round-trip through a scan. URL is the marketing workhorse, with an optional UTM-builder so the same poster can attribute campaign conversions cleanly. Wi-Fi uses the ZXing-style WIFI:T:WPA;S:…;P:…;; format that iOS 11+ and Android 10+ honour natively from the camera app — scan, tap the notification, you're on. Email (RFC 2368 mailto), SMS (SMSTO scheme), and phone (RFC 3966 tel) cover the contact triad. vCard 3.0 (RFC 2426) is the electronic business card — name, organisation, role, channels — that conference badges have used since the late 90s. Geo (RFC 5870) drops a pin. And Pix is the BR-specific killer, covered separately below.
How a QR code actually works
The grid you see is not just data — it's data plus a substantial chunk of redundancy. Reed-Solomon error correction, the same family of codes that lets a scratched DVD play and a deep-space probe phone home, lets a partially obscured QR still decode. The standard defines four levels: L recovers 7% of damage, M 15%, Q 25%, H 30%. Higher recovery costs you capacity: a Version 10 grid at level M holds 395 alphanumeric characters; at level H, it drops to 213. The default in this generator is M — a good balance for screen and small-print use.
Capacity scales by version, where each version adds 4 modules per side. Version 1 is 21×21 and holds 25 alphanumeric chars at L. Version 40 is 177×177 and holds 4,296. The library picks the smallest version that fits your payload at the chosen error-correction level, which is why the same URL can render as a tight 33×33 grid or a sprawling 73×73 grid depending on how much redundancy you ask for.
The three big squares in the corners are the finder patterns — they tell the scanner where the code is and which way is up. The smaller squares scattered throughout larger codes are alignment patterns, used to correct for the perspective skew of a phone held at an angle. None of that is content; all of it is structure. The format was published by Denso Wave in 1994 and standardised as ISO/IEC 18004 in 2000.
A different family of QR sits on top of the same symbology for payments: the EMVCo "Merchant Presented Mode" standard (EMV-QRCPS) that Brazil's Pix, India's UPI, Singapore's SGQR and several other national instant-payment rails all customise. EMV payloads are TLV strings — two-digit tag, two-digit length, value — closed by a CRC-16/CCITT-FALSE checksum in the last field. The symbology is standard QR; the semantics are the payment scheme's. This generator writes native Pix payloads via the Pix form (see the PT-BR editorial for the wire-format breakdown); for other schemes, paste the TLV string into the Text form and it renders unchanged.
Color customization without breaking the scan
Cameras read contrast, not colour. The WCAG 2.1 contrast formula compares relative luminance — black on white scores 21:1, the maximum. For QR scanning the practical floor is about 3:1; below that, autofocus and the camera's auto-exposure start fighting each other and the decoder gives up. This generator computes the WCAG ratio in real time and warns at 3:1, blocks the download at 2:1. The five presets all clear the threshold; the colour pickers let you go anywhere within reason. Dot-style and logo-embed customisation are deferred — they have legitimate uses but introduce a fragility surface that's hard to QA in a privacy-first, no-server-roundtrip context.
Why a client-side generator is the privacy bar
When you paste a URL into a hosted QR generator, you've handed that URL to a server. A legitimate operator logs it for abuse prevention; a less scrupulous one builds a side business out of the traffic patterns. The same is true of vCards (you've just leaked an executive's direct contact details), Wi-Fi codes (you've leaked the password), and Pix payment codes (you've leaked who's getting paid). This generator runs entirely in your browser. There are no fetch calls in the QR-generation path, no analytics events that capture the payload, and the QR library is loaded via dynamic import so even the round-trip to fetch its bytes happens from your browser cache once you've used it.
Print-poster use cases
The "Print poster" button opens a new window with the QR centred on A4 paper, sized for a comfortable scan distance of roughly 30–80 cm. Real-world places that benefit: restaurant tables (menu URL), conference badges (vCard), public Wi-Fi displays in cafés and Airbnb welcome books, museum exhibits, parking-lot payment posts, and event signage that needs to survive being printed once and read for a year. The minimum module size for a reliable phone scan is usually 0.5 mm; the poster sizing here clears that with a safety margin.
A practical checklist before you send a QR to the printer: pick error-correction Q or H if any part of the surface risks damage (outdoor posters, laminated menus, sticker labels that get scuffed), test the printed sample from the actual scan distance you expect (a poster comfortable at 80 cm is illegible at 3 m), and give the code a quiet-zone margin equal to at least four modules on every side — bordering the code straight against text or a photo is one of the top reasons cameras fail to detect the finder patterns. The scan-back validation described in the FAQ catches the size and error-correction issues at generation time; the quiet zone is on you at layout time.
UTM tracking and campaign attribution
A QR code on a physical surface is the cleanest attribution channel a marketing team ever gets — a scan is intent expressed by a human who physically stood in front of your poster. To make that intent trackable, the URL form has an optional UTM builder that appends utm_source, utm_medium, utm_campaign, utm_term and utm_content to the destination URL before the QR is generated. Poster A in the subway carries ?utm_source=subway&utm_medium=poster&utm_campaign=jul2026; poster B at bus stops carries utm_source=busstop; both point at the same page, and GA / Plausible / Umami separates the origin in the acquisition report. Without UTMs, every offline scan collapses into "Direct" traffic and the attribution is gone.
A common trap: printing UTM-tagged QRs without versioning by print batch. If you reprint posters quarterly, add utm_content=batch-q3 or a similar discriminator — you'll want to tell traffic from the old batch still stuck on walls apart from the fresh batch when you calculate campaign ROI. It's campaign hygiene, not technology, but nobody discovers it until the first quarterly report.

