QR Code Generator

A real QR encoder that runs in your browser — no upload, no tracking redirect, no expiry. Download it as SVG or PNG and it is yours forever.

Include the protocol. A code containing example.com with no https:// is read as plain text by many scanners and will not open anything.
How much of the symbol can be damaged and still read. Higher costs size.

Nothing you type here is uploaded, stored or sent anywhere. It all runs in your browser.

This page encodes the code itself

Most free QR generators are a form that posts what you typed to a server, which renders an image and sends it back. Two things follow from that. The first is that whatever you encoded — a Wi-Fi password, a personal phone number, a link to an unlisted page — has now been typed into somebody else's log. The second is worse: a great many of them do not encode your link at all. They encode their link, which redirects to yours, so the code stops working the day that service shuts down or starts charging. People have found this out by reprinting menus.

There is no server here. The encoder — byte-mode segmentation, Reed–Solomon error correction over GF(256), automatic version selection, and the mask chosen by the penalty rules in ISO/IEC 18004 — is written out in the JavaScript on this page and runs in your browser. The code contains exactly the bytes shown in the readout. Nothing is uploaded, and the image you download will still scan in ten years because nothing has to stay online for it to work.

The quiet zone is not decoration

The blank margin around a QR code is part of the specification: four modules wide on every side. It is how a scanner finds the edges of the symbol against whatever is behind it. Set it to zero and the code will often still work on a white page, because the page supplies the margin by accident — then fails the moment somebody places it on a photograph, a dark background or hard against the edge of a label. Designers trim it constantly and it is the single most common reason a printed code will not scan. Leave it at four.

What error correction actually buys you

A QR code carries redundant data so it can be read when part of it is damaged. Level L recovers roughly 7% of the symbol, M about 15%, Q about 25% and H about 30%. The cost is size: at the same content, H needs substantially more modules than L, which means either a bigger code or smaller modules at the same physical size — and smaller modules are themselves harder to scan.

So the tradeoff is not "more is better". Use M for a screen, where nothing is going to be damaged. Use Q or H for anything printed on a surface that will be handled, rained on, or stuck on a curved bottle — and for the one case where H is genuinely required, which is putting a logo in the middle. That trick works only because the error correction treats the logo as damage. Cover more than about a fifth of the symbol and it stops working, whatever level you picked.

Contrast, and why inverting it breaks things

Scanners look for dark modules on a light background. A low-contrast pair — grey on slightly lighter grey, two similar brand colours — fails under bad lighting even when it looks fine on your monitor. Worse, a light-on-dark code is inverted, and although some modern phone cameras cope, plenty of dedicated scanners and older apps do not. If the design calls for a dark background, put the code in a light panel rather than inverting it. The tool warns you when the contrast drops below the point where it is reliable.

A printed Wi-Fi QR code is a written-down password

The Wi-Fi format is WIFI:T:WPA;S:name;P:password;; — the password sits in the code as readable characters. Anything that can scan the code can read the password, and unlike a password on a whiteboard it can be copied perfectly from a photograph taken across the room. That is fine for a guest network which is isolated from everything you care about. It is not fine for the network your point-of-sale terminal is on. Separate the two before you print anything.

The same applies to a vCard. A contact card QR on a business card is a phone number and an email address in a machine-readable form, which is exactly what makes it convenient and exactly what makes it scrapeable at scale.

SVG or PNG

Take the SVG for anything printed. It is vector, so it is sharp at any size, it is a few kilobytes, and a printer can scale it to a billboard without the edges going soft. Take the PNG for anything that has to go into software that will not accept an SVG — some email platforms, some point-of-sale systems, a few social networks. Both files contain the same symbol.

Practical sizing

The usual rule of thumb is that a code needs to be about a tenth of the distance it will be scanned from: two centimetres for a code read at twenty, ten centimetres for one read from a metre. Below roughly two centimetres printed, cheap printing starts to blur the modules together and scanning becomes unreliable regardless of what the file says. Shorten the URL before you shrink the code — fewer bytes means fewer modules, and fewer, larger modules scan better than more, smaller ones.

Questions people ask

Do these codes expire?

No. The code contains your content directly, so there is nothing to expire and no service that has to stay running. That is the difference between a static code, which is what this generates, and a dynamic code, where the QR contains a tracking URL owned by whoever made it and the destination is looked up at scan time. Dynamic codes let you change the target later; they also stop working entirely if that company folds or moves you to a paid plan.

Is what I type sent to a server?

No. The QR encoder itself is in the JavaScript on this page — the Reed-Solomon arithmetic, the version selection, the mask evaluation, all of it. Nothing is posted anywhere, and you can verify that with your browser network tab open.

Which error correction level should I pick?

M for screens and anything disposable. Q or H for printing on something that will be handled, folded or left outdoors, and H if you intend to put a logo in the middle, since that only works because the error correction absorbs the covered area as damage. Higher levels make the code physically denser at the same content, which is a real cost.

Can I put a logo in the middle?

Yes, at level H, covering no more than about a fifth of the symbol and never touching the three large squares in the corners or the dotted lines that run between them. Those are the finder and timing patterns and a scanner cannot locate the code without them. Test the result with more than one phone before printing anything.

Why did the code get bigger when I added text?

QR codes come in forty fixed sizes, called versions, from 21 modules square up to 177. The tool picks the smallest version that fits your content at the error-correction level you chose, so adding characters eventually pushes it up a version — and a longer link means a denser code that has to be printed larger. Shortening the URL is the cheapest way to make a printed code more reliable.

Why does my code look different from another generator with the same text?

Because of the mask. The specification defines eight patterns that get XORed over the data to break up runs of identical modules, and the encoder picks whichever scores lowest on four penalty rules. Two correct implementations can choose differently if they lay the padding out differently, and both codes decode to the same text. The corner squares and the dotted timing lines will be identical either way.

A QR code is a link nobody can click

Printed codes do nothing for search. If you want the page they point at to rank, it needs links from sites Google already trusts.

Book a Call More free tools