Tools › Developer › QR code generator

QR code generator

Make a QR code for a link, some text, a wifi network or a contact card, as an SVG that stays sharp at any size, generated in your browser so the code is never logged.

  • SVG output, so it prints as sharply at poster size as on screen
  • Four error-correction levels: the one that decides whether a scuffed code still scans
  • Wifi, contact cards and plain text, not just URLs
  • Never a redirect through anyone else: the code points where you said
LINKWI-FIPNGSVG

Save the SVG when you can. A QR code exported small as a PNG and then enlarged for print is the usual reason one will not scan.

Error correction, and why it is the setting that matters

A QR code carries redundant data so it still reads when part of it is damaged. Four levels: L recovers about 7% of the code, M 15%, Q 25%, H 30%. Higher correction means more squares for the same content, so the pattern gets denser.

Use M for anything on a screen. Use Q or H for anything printed, and especially for anything that will be outdoors, handled, or have a logo placed over the middle, that logo is damage, and H is what lets the code survive it.

Why SVG rather than PNG

A QR code is squares. An SVG describes them as shapes, so it is sharp at any size, the same file works on a business card and on a shop window. A PNG is fixed pixels, and scaling one up gives soft edges that scanners read more slowly or not at all.

Take the PNG if something will not accept SVG. Take the SVG for anything going to print.

Keep the URL short

More characters means more squares, and more squares at the same printed size means smaller squares, which is what makes a code fail to scan from a distance. A 40-character URL and a 120-character one are visibly different codes.

If the destination is long, shorten it first, but be aware that a shortener puts a third party between the scan and the destination, and it can break or start redirecting somewhere else. For anything printed and permanent, a short URL on your own domain is worth arranging.

Static codes cannot be changed

A code made here encodes your data directly. That is a feature: nothing is logged, no service can track scans, and it works forever with no account. It also means the destination is fixed: printing a thousand of them and then changing the URL is not possible.

The "dynamic QR" services solve that by pointing every code at themselves and redirecting, which is also how they meter you and how a code stops working when you stop paying. If you need changeable destinations, point the code at a URL on your own domain and change what that URL serves.

Contrast, size and the quiet zone

Dark on light, always. Inverted codes fail on many scanners. Leave the light margin around the edge; it is part of the specification and scanners use it to find the code. As a rule of thumb, a code needs to be about a tenth of the scanning distance: readable from two metres means roughly 20 cm across.

Questions

Is my data sent anywhere?

No. The code is generated in this tab, so nothing you encode is logged and no service sits between the scan and its destination.

Which error correction should I pick?

M for screens, Q or H for print, and H if a logo will cover part of the code.

SVG or PNG?

SVG for anything printed, because it stays sharp at any size. PNG only where SVG is not accepted.

Can I change where it points after printing?

Not for a code made here: the URL is encoded in the pattern. Point it at a URL on your own domain and change what that serves.

Why will my code not scan?

Usually too small, too little contrast, the light margin cropped off, or an inverted colour scheme. Dark on light with a clear border.

How big should it be?

Roughly a tenth of the scanning distance. Two metres away means about 20 cm across.

Does it expire?

No. It has no account behind it and nothing to expire, it will work as long as its destination does.

Next

The guide that goes with this