Pixitools

Search Pixitools

Search tools, utilities and conversion pages

7 min read

What Can You Put in a QR Code? Types, Limits and How to Test One

A QR code is just data in a grid — the magic is entirely in the convention a scanner follows once it reads the text. Knowing those conventions explains why a Wi-Fi code works on one phone and not another, why a logo can be perfectly safe or quietly fatal, and why printing a dark-blue code on a grey background is a gamble rather than a design choice.

What actually fits inside one

A QR code holds up to 2 953 bytes. That is roughly 4 000 Latin characters, 1 800 characters of Cyrillic, or 1 200 of Japanese — and the practical capacity is smaller as soon as you raise the error-correction level. What you put in it is plain text, so anything a phone can recognise as a convention goes: a URL, a Wi-Fi credential string, a vCard, an iCalendar event, a phone number, a geo coordinate pair, a payment request.

TypeWhat the scan doesPayload starts with
LinkOpens the browser on the URLhttps:// or http://
Plain textShows the text, no action—
Wi-FiOffers to join the networkWIFI:
ContactSaves or opens a contact cardBEGIN:VCARD
EventAdds a calendar entryBEGIN:VEVENT
Phone / SMSStarts a call or a messagetel: / SMSTO:
LocationOpens the coordinates on a mapgeo:
WhatsAppOpens a chat with that numberhttps://wa.me/

The QR Code Generator builds all of these, showing only the fields each type needs and escaping the characters that would otherwise break the payload.

Escaping is where hand-built codes fail

Wi-Fi strings use semicolons and colons as field separators, so a network called "Cafe;Free" has to be written as Cafe\;Free — otherwise the scanner reads the name as two fields and the join fails. The same idea applies to vCard (semicolons, commas) and iCalendar (semicolons, commas, newlines). If you build these payloads by hand from a template, the escaping is the part that bites.

Error correction, quiet zones and density

Error-correction level is the redundancy baked into the code: L recovers about 7% damage, M about 15%, Q about 25% and H about 30%. Higher levels mean a denser code for the same content. M is the sensible default; H is what you want when the code will be printed small, placed on a curved surface, or covered by a logo.

  • Keep the quiet zone: at least four modules of empty space on every side, or scanners lose the edge of the symbol.
  • Prefer dark modules on a light background. Inverted codes work with some scanners and fail with others.
  • Give the code contrast — a mid-tone foreground on a mid-tone background fails the same way grey text on grey paper does.
  • Do not print below roughly 2 cm × 2 cm per version-1 symbol; denser codes need more room to be readable.

Contrast is measurable, not a matter of taste: the Contrast Checker gives you the WCAG ratio between your two colours, and it is worth knowing that phones are much fussier about low-contrast codes than a colourful design mock-up suggests.

Logos, colours and shapes without breaking the code

Styled codes are fine — the format tolerates it — as long as the damage stays inside the redundancy you paid for and you keep the three corner finder patterns intact. Practical rules: keep a centre logo to about 20–25% of the code width, use error correction H whenever you add one, and leave the eye patterns recognisable even if you recolour or round them.

Scanning: what the reader needs from you

Reading a code needs a clear frame and a moment of stillness; steep angles, glare and motion blur are the usual reasons a scan takes a few seconds. In a browser, QR Code Scanner can use the camera where the browser exposes it, and falls back to scanning a photo or screenshot when it does not — both paths decode on your device, so nothing you scan is uploaded or logged.

PNG or SVG?

  • PNG for chat, documents, slides and anything that will be viewed on a screen.
  • SVG for print, signage and merchandise — it scales to any size without blurring.
  • Never re-compress a JPEG QR code: soft module edges are the fastest way to make a working code unreliable.

One more thing: no redirect layer

Some generators hand you a short link they control, which lets them count scans — and lets them break your code later. A code that encodes the destination directly has no such dependency: whoever scans it reaches exactly what you typed, forever. Pixitools codes work that way: the payload you see is the payload that is printed. The Base64 encoder and the Metadata Viewer work on the same principle — local, inspectable, no server in the middle.

Try it with these tools

Every tool mentioned in this article runs entirely in your browser — see privacy for what that means.