QR Code Generator

Turn any link or text into a scannable QR code. Free, fast, and your files never leave your device.

Your QR code preview will appear here.

From typed text to a grid of modules

A QR code is a grid of black and white squares, called modules, arranged in one of forty defined versions. Version 1 is 21 modules across and each step up adds four more. This generator uses the open source qrcode-generator library with the version set to automatic, which means it encodes your text, works out the smallest version that will hold it at the error correction level you chose, and returns the module grid. The page then decides how many screen pixels each module gets by dividing your chosen size by the module count and rounding down, so every module is a whole number of pixels wide. That is why the saved file is sometimes a little smaller than the size you picked, and it is deliberate: fractional modules produce grey edges that scanners struggle with. The grid is painted onto a canvas in pure black on pure white and saved as qrcode.png.

A real example

Paste https://zillakit.com/tools/qr-code-generator, leave error correction on M, and choose 300 x 300. That is 44 characters, which does not fit a version 3 code in byte mode, so the library steps up to version 4 at 33 modules square. Dividing 300 by 33 gives 9.09, which rounds down to 9 pixels per module, and the exported PNG is therefore 297 x 297. Switch the level to H and the same text needs a larger version, the grid gets denser, and each module shrinks. Scan it with your phone before you commit it to print.

Choosing a size for print

The rule of thumb that matters is the printed width of one module, not the pixel size of the file. Aim for a printed code that is at least a tenth of the distance it will be scanned from: a code read from half a metre wants to be about 50 mm wide, while a poster read from three metres wants roughly 300 mm. For a business card or a table talker, 300 pixels is enough at typical print resolution. For an A3 poster, a shop window sticker or vehicle signage, choose 800 or 1000 so that enlarging the PNG does not soften the module edges. Leave a clear margin of at least four modules of white space around the code when you place it in a layout, because this tool does not draw that quiet zone for you and a code butted up against artwork or a dark background often fails to scan.

Error correction, in practice

The four levels add redundancy so that a damaged code still decodes: L recovers about 7% of the code, M about 15%, Q about 25% and H about 30%. Medium is the sensible default for a screen or a clean printed page. Step up to Q or H when the code will be printed on fabric, on a curved bottle, on a surface that will get scuffed, or when you intend to drop a small logo in the centre. The trade off is real: higher levels need a bigger grid for the same text, which means smaller modules at a fixed size, so pushing to H and then printing small can leave you worse off than M at the same dimensions.

What this generator does not do

  • No dynamic or tracked codes. The text is encoded into the pattern itself, so if the link changes you must generate and reprint a new code.
  • No colour choices, rounded modules, gradients or logo overlays. Output is plain black on white.
  • No SVG, EPS or PDF export. The download is a PNG, so decide the size before you generate.
  • No scanning or decoding of existing codes, and no batch generation from a list.
  • No quiet zone baked into the image, which you need to add in your layout.

Everything happens in your browser and nothing is uploaded to a server, so the address you encode is never logged and no one can see how many codes you make. Using the generator costs nothing, and if your credit has run out a brief rewarded ad plays before the code appears.

Practical uses

Cafe and restaurant table codes pointing at a menu page, a code on an invoice that opens a payment link, a market stall sign linking to an online store, a code in a shop window for after hours enquiries, a conference badge that opens a session schedule, a rental inspection sign pointing to an application form, a sticker on a piece of equipment linking to its manual, or a code on the back of a wedding invitation that opens the RSVP form. Keep the destination short and stable, since a long link produces a denser pattern that needs to be printed larger.

Specialised versions of this tool

For joining a network without typing a password, WiFi QR Code builds the correctly formatted network string. For a code that saves your details to a phone's contacts, use vCard QR Code. To put the finished code on a card or a signature block, see Business Card Maker and Email Signature Generator. To lay the PNG over a photo or a flyer, use Add Text to Image, and if the file needs to fit a fixed placeholder, Resize Image will scale it, though you should regenerate at the larger size instead of upscaling wherever you can.

Questions

Why is the downloaded image slightly smaller than the size I picked?

Each module has to be a whole number of pixels, so the module count is divided into your chosen size and rounded down. A 33 module code at 300 pixels becomes 297 pixels, which keeps every square crisp.

Do I need to add white space around the code?

Yes. The PNG has no built in quiet zone, so leave a white margin about four modules wide on every side when you place it in a design. Codes printed hard against a dark background are the most common scanning failure.

Which error correction level should I choose?

Stay on M for screens and clean print. Choose Q or H if the code will be scuffed, curved, printed on fabric, or partly covered by a logo, and remember that the higher levels make the pattern denser for the same text.

Can I change the link later without reprinting?

Not with a static code like this one. The destination is encoded in the pattern, so a new address means a new code. If you expect the target to move, point the code at a short URL you control and update the redirect instead.

Is there a limit on how much text fits?

The format tops out at a few thousand characters, but long input forces a high version number with tiny modules that are hard to scan. Keep it to a link or a short message wherever possible.