QR code generator

Turn a link or any text into a QR code, encoded and drawn in this browser tab

The tool loads here. It needs JavaScript, because the work happens on your device.

Your files and your privacy

Nothing you type is uploaded: the payload is encoded and the image drawn on your own device, and the PNG and SVG downloads are produced there. With no shortener and no redirect domain, nobody — including us — can count who scans your code. Nothing is kept between visits, not even your last-used colours.

What this tool does

Encode a web address or any text as a QR code, with control over the error-correction level, quiet zone, colours and output size. The code holds exactly the value shown under the preview — no shortener, no redirect.

It encodes your text as a QR matrix in byte mode and draws it at a module size measured in whole pixels, so every cell is identical. The panel reports the module count, the image size, the payload length in UTF-8 bytes and the contrast ratio between your two colours, and warns you before you print something that will not scan. A missing scheme on a web address is added for you, and the addition is stated rather than made quietly.

How to use it

  1. Choose Link for a web address or Text for anything else; the exact string to be encoded is shown under the preview.
  2. Pick an error-correction level: M for most uses, Q for anything handled, folded or printed small.
  3. Check the contrast figure and keep the quiet zone at four modules or more, which is the specification’s minimum.
  4. Export SVG for print or PNG for screens, then scan the result with a real phone at the real size before printing a run.

Example use cases

Supported input and output

Accepts

Produces

What this tool will not do

Common mistakes

Technical notes

Encoding uses the qrcode-generator library in byte mode, with the smallest version that fits chosen automatically. Text is converted to UTF-8 bytes first, because that library’s ESM build treats byte mode as Latin-1: an accented character passed straight in emits the wrong byte and yields a code that scans but decodes to mangled text. The SVG is one path of merged module runs, so adjacent modules meet exactly, and the PNG floors the module size to whole pixels.

Frequently asked questions

Is my link sent to a server?
No. The code is built in this tab, and it contains only the value shown in the payload box. Open your browser’s network panel while you type and you will see no request carrying it.
Which error-correction level should I choose?
M for most things, Q for anything handled or printed small, and H only when part of the code will be covered. Higher is not automatically safer, because it adds modules.
Why does my code scan on one phone but not another?
Almost always contrast, quiet zone or module size. Check the contrast figure, keep four modules of margin, and make the code physically bigger rather than raising the correction level.