Learn
What is actually inside the square.
A QR code is not a picture of a link. It is text, encoded into a grid with enough redundancy to survive being crumpled, badly lit, and photographed at an angle. Here is how that works, and what each type of code really contains.
Last updated 12 August 2026
A QR code is just text
Everything a QR code can do comes from one fact: it holds a string of characters. When your camera reads one, it decodes that string and then decides what to offer you based on how the string begins.
A string starting with https:// is offered as a link. One starting with WIFI: is offered as a network to join. One starting with BEGIN:VCARD is offered as a contact to save. The square is identical in every case — only the text inside differs. That is why picking the right format matters more than anything else about the code.
The three squares in the corners
Those are finder patterns. A scanner looks for that specific ratio of dark and light bands — 1:1:3:1:1 — to locate the code, work out its orientation, and correct for the angle you are holding the phone at.
It is why you can scan a code upside down, from the side, or reflected in a window. It is also why you should never cover or restyle them: a decorative code that loses the finder ratio stops being findable at all.
Error correction, and why a logo fits
QR codes use Reed–Solomon error correction, which stores redundant data so the code still decodes when part of it is unreadable. There are four levels, and the level you choose is a trade between resilience and density.
This is what makes a logo in the middle possible: at level H the code tolerates losing about 30% of itself, so a small covered area in the centre is recoverable. The cost is that the same content needs a bigger, denser grid.
- Level L — recovers about 7%. Smallest code, least forgiving. Good for clean digital display.
- Level M — about 15%. The default here, and the right balance for most printing.
- Level Q — about 25%. Worth it for signage that will get dirty or damaged.
- Level H — about 30%. Required if you want to put a logo in the middle.
Every payload format, in one table
This is the part most generators hide. Each type below is the literal string encoded into the square — you can read it, check it, and reproduce it yourself.
URL https://example.com/menu
Text Any characters at all
WiFi WIFI:T:WPA;S:Cafe Rio;P:flatwhite22;;
Contact BEGIN:VCARD VERSION:3.0 FN:Priya Rao ... END:VCARD
UPI upi://pay?pa=shop@bank&pn=Shop&am=250&cu=INR
Email mailto:[email protected]?subject=Enquiry
Phone tel:+919876543210
SMS SMSTO:+919876543210:Table for two at 8?
Location geo:19.076,72.8777
Event BEGIN:VEVENT SUMMARY:... DTSTART:... UID:... END:VEVENT
PayPal https://paypal.me/someone/25Static and dynamic codes
Every code on this site is static: the data lives inside the square. Nothing is looked up, nothing phones home, and the code works with no service behind it — including after this site is gone. That is a feature, not a limitation.
A dynamic code holds a short redirect URL instead, which lets you change the destination after printing and count scans. The trade is real and permanent: a dynamic code stops working the moment its redirect service does. For anything printed at scale, or anything you cannot reprint, static is the safer choice.
Printing codes that actually scan
Most scan failures are physical, not technical. A few rules cover almost all of them.
- Size for the distance: the code should be roughly a tenth of the distance it is read from. Two metres away means about 20 cm.
- Keep the quiet zone: the blank margin around the code is part of the code. Crowding it with other artwork breaks detection.
- Never invert: dark modules on a light background. A light-on-dark code fails on a large share of scanners.
- Keep the contrast high: aim for a strong difference between foreground and background. Pale grey on white is the classic mistake.
- Use vector for print: an SVG or PDF stays crisp at any size. A small PNG scaled up produces soft edges that confuse scanners.
- Test at final size, on a real phone, in the light where it will live.
Why these are built in your browser
The encoder runs on your device. A WiFi password, a UPI ID or a phone number typed into this site is never transmitted, because there is no server to transmit it to — which is also why the generator keeps working with the network off.
It means we cannot see what you make, cannot lose it in a breach, and cannot hold it hostage behind a subscription later. The trade is that we cannot offer scan analytics on a static code, because nothing reports back.