QR Code Generator

Generate QR codes for URLs, text, or vCards.

Share
How does a QR code work?

About the QR Code Generator

A QR code is a two-dimensional barcode that stores text - a URL, a phone number, a contact card, a payment string - in a pattern a camera can read from any angle. This generator builds one in your browser and hands you a PNG or JPG you can drop into a poster, a slide, a business card, or a product label.

There is no account, no watermark, and no expiry. The image is generated locally from the text you type, so the code will keep working for as long as whatever it points at keeps working. That last part matters more than most people expect - see the note on dynamic codes below.

How to use this tool

  1. Choose URL or text for a plain payload, or vCard to build a scannable contact card from a name, phone, and email.
  2. Type the content. The preview regenerates as you type.
  3. Set the error correction level. Higher levels survive more damage but make the pattern denser.
  4. Adjust the foreground colour, background colour, width, and quiet-zone margin to suit where the code will be printed.
  5. Pick PNG or JPG and download. PNG is the better choice for print because it has no compression artefacts around the sharp edges scanners rely on.

Choosing an error correction level

QR codes use Reed-Solomon error correction, which means a scanner can still read a code that is partially obscured, smudged, or torn. You are trading capacity for robustness: the four levels recover from roughly 7% (L), 15% (M), 25% (Q), and 30% (H) damage respectively, and each step up leaves less room for your actual data at the same physical size.

For a code on a screen or a clean printed page, L or M is plenty. Choose Q or H for codes going onto surfaces that will be handled, folded, or exposed to weather - restaurant tables, shipping labels, outdoor signage - or if you plan to place a logo over the centre of the code.

Why the margin and contrast matter

The blank border around a QR code is called the quiet zone, and it is part of the specification rather than decoration. Scanners use it to find where the code starts. Setting the margin too low is one of the most common reasons a code that looks fine on screen fails when printed against a busy background.

Contrast is the other frequent failure. Scanners look for dark modules on a light background. Inverting that - light code on a dark background - breaks many older readers, and low-contrast colour pairs like mid-grey on beige break almost all of them. If you are customising colours, keep the code substantially darker than the background and test with more than one phone before committing to a print run.

Static codes and the redirect trick

The code this tool produces is static: the destination is baked into the pattern itself. That is a genuine advantage in that it never depends on a third party staying in business, and there is nothing to track you with. The trade-off is that you cannot change where it points after printing.

If you need to change the destination later, do not reach for a commercial dynamic-QR service by default. Encode a URL on a domain you control that issues a redirect, then change the redirect. You get the same flexibility, keep the analytics, and nobody can hold your printed material hostage behind a subscription.

Frequently asked questions

Do these codes expire or stop working?
No. The code is a picture of your data, generated locally. There is no server in the loop and no account tied to it. It stops working only if the thing it points to - a URL, a phone number - stops working.
How small can I print it?
As a rough rule, keep the code at least one tenth of the expected scanning distance. A code read from about a metre away wants roughly 10 cm across. Longer payloads need a denser pattern and therefore more physical space, so shortening a URL before encoding genuinely helps.
Can I put my logo in the middle?
Yes, using an image editor after downloading, and you should generate at error correction level H first. Keep the covered area under about 20% of the code and never obscure the three large squares in the corners - those are the position markers a scanner needs to orient itself.
Is the data I type sent anywhere?
No. Generation happens in your browser. The vCard fields in particular - name, phone, email - never leave your machine.