QR Code Generator

Create a QR code from any text or URL, download it as PNG or SVG. Generated in your browser — nothing is uploaded, and no tracking redirect is added.

All processing happens in your browser. Nothing is uploaded.

2Version
25×25Modules
23Bytes encoded

Higher levels survive more damage — a scuffed sticker, a logo placed over the middle — but need a denser code for the same content. M is the usual choice; use H only if the code will be printed small, placed on something that gets handled, or covered by a logo.

The blank border is part of the specification, not decoration. Without it many scanners cannot locate the code at all, which is why a QR pasted tight against dark artwork often fails to scan.

Every code produced here is decoded again by a real QR reader in our test suite before release — a QR that is wrong still looks perfectly normal, so it cannot be checked by eye.

How to use

  1. Type or paste the text — a URL, plain text, anything.
  2. Pick an error correction level. M is the right default.
  3. Adjust the quiet zone if you need a wider or narrower border.
  4. Download as PNG for general use, or SVG if it will be printed or resized.

About QR codes

A QR code is a grid of black and white modules that stores data with enough redundancy to be read back from a photograph — at an angle, under poor light, partially damaged. The three large squares in the corners let a scanner find the code and work out its orientation; the alternating line between them establishes the module spacing; and the blank border around everything, the quiet zone, is what lets the scanner separate the code from the background. That border is specified, not decorative, and omitting it is the single most common reason a printed code fails to scan.

The redundancy comes from Reed-Solomon error correction, the same family of codes used on CDs and in deep-space transmission. Four levels are available, recovering roughly 7%, 15%, 25% and 30% of the code respectively. Higher correction is not free: the extra recovery data has to go somewhere, so the same content needs a denser grid. At a fixed print size a denser grid means smaller modules, which is harder for a camera to resolve — so the highest level is not automatically the safest choice. It is the right choice when you expect damage or plan to cover part of the code with a logo.

One thing worth knowing about free QR services: many of them encode a link to their own domain that redirects to your destination. That lets them count scans, and it also means your code stops working if they shut down, and can be redirected or paywalled later. A code that encodes your URL directly has no such dependency — it will work as long as your URL does. That is what this tool produces.

Finally, a note on how this generator is verified. A QR code that is subtly wrong looks completely normal — the modules are still black and white squares in a plausible pattern, and nothing about it signals a problem until someone tries to scan it. Checking by eye is impossible. So every code shape this tool can produce is generated and then decoded again by a real QR reader in the test suite, across content types, error correction levels and symbol versions. Three separate bugs were caught that way during development, each of which produced codes that looked perfectly fine and could not be read at all.

Frequently asked questions

Does the QR code expire or stop working?

No. The code encodes your text directly — there is no short link in the middle that could expire or be switched. Many free QR services generate a redirect through their own domain, which lets them track scans and, in some cases, change the destination later or start charging. A code from here points at exactly what you typed, permanently.

Is anything uploaded?

No. The code is computed in your browser and the image is drawn locally. Nothing you type is transmitted, which matters if you are encoding a private URL, a WiFi password or an internal address.

Which error correction level should I choose?

M for most uses. Higher levels let the code survive more damage — a scuffed sticker, a logo over the middle — but pack the same content into a denser grid, which makes each module smaller at a given print size. Use H when the code will be printed small, handled often, or partially covered; use L only when the content is long and the code will be scanned from a clean screen.

Why does the code need a blank border?

The quiet zone is part of the specification, not decoration. Scanners locate a code by finding the three corner squares against a plain background; without the border they often cannot lock on at all. A QR pasted flush against dark artwork failing to scan is almost always this.

PNG or SVG?

SVG for anything that will be printed or resized — it stays sharp at any size because it stores the modules as shapes rather than pixels. PNG for places that will not accept SVG, such as most social platforms and messaging apps. The PNG here is drawn module by module at whole-pixel boundaries, so the edges stay crisp rather than blurring.

Can I put a logo in the middle?

Yes, that is what the error correction is for — level H can lose about 30% of the code and still decode. Keep the logo under roughly 20% of the area, centred, and never cover a corner square: those are how the scanner finds and orients the code. Test the result with an actual phone before printing a thousand of them.

How much text fits?

About 2,900 bytes at the largest version with the lowest error correction, though a code that large is impractical to scan. In practice keep it short: a URL under 100 characters produces a code that scans reliably from a phone at arm's length. Long text means a dense grid, and a dense grid needs a bigger print or a closer camera.