QR code generator for links and text

Type or paste a web address or a text and get a QR code that works for as long as the content does.

This tool needs JavaScript. The rest of the page works without it.

Start a web address with https:// so that scanners recognise it as a link.

Error correction

A higher level keeps the code readable when part of it is dirty or damaged, but needs more modules.

PNG size

Approximate width of the PNG image. The SVG file can be scaled to any size.

Colours and logo (optional)

Contrast 100%: good.

Logo (optional)

An image from this device, placed in the middle of the code. It is not uploaded. With a logo the code uses error correction H.

No QR code yet

Your QR code will appear here.

What this tool does

It stores exactly the text you enter in a QR code. When the text is a web address that starts with https://, scanners recognise it as a link and usually offer to open it. Any other text is shown to the person who scans the code.

The code is static. It does not lead through this site, it has no scan limit and it does not expire.

How to use it

  1. Enter the web address or the text. Copy a web address from the address bar of your browser to avoid typing mistakes.
  2. Keep error correction M unless you have a reason to change it. The section below explains the levels.
  3. Choose the width of the PNG image. For print, plan to use the SVG file, which has no fixed size.
  4. Select “Create QR code”, scan the preview with your phone and download the file you need.

How the code is made

The text is converted to bytes in the UTF-8 encoding. The tool then picks the smallest of the 40 versions of the QR code that holds these bytes at the chosen error correction level, adds the error correction data, and tries all eight masks of the standard. It keeps the mask that the rules of the standard rate best, which is the one with the fewest large single-coloured areas and misleading patterns.

The result shows the version, the number of modules, the level and the number of bytes. A light margin of four modules is added on every side of the downloaded files.

Largest content in bytes for the first five versions
VersionModulesLMQH
121 × 211714117
225 × 2532262014
329 × 2953423224
433 × 3378624634
537 × 37106846044

Worked example

The address https://example.com/menu has 24 characters, all of them plain, so it is 24 bytes long. At level M version 1 holds 14 bytes and version 2 holds 26, so the tool uses version 2 with 25 by 25 modules. With the margin the picture is 33 modules wide.

For a PNG of about 1024 pixels the tool draws every module 31 pixels wide, because whole pixels per module keep the edges sharp. The file is therefore 1023 by 1023 pixels. At level Q or H the same address needs version 3 with 29 by 29 modules.

Colours, logo and the automatic check

Under “Colours and logo (optional)” you can choose the colour of the code and of the background, and put a logo from your device in the middle. The logo is opened by your browser and is not uploaded. The SVG file contains it as an embedded image, and the modules stay vector shapes.

A code needs contrast. The tool compares the luminance of the two colours: 0% for two equal colours, 100% for black on white. Below 40% it does not create the code, and below 70% it warns. These limits are our convention, borrowed from the grades of symbol contrast in ISO/IEC 15415, the print-quality standard for two-dimensional codes; colours on a screen only approximate printed ink. A code that is lighter than its background is read by some scanners and not by others, so the tool warns about that as well.

With a logo the tool always uses error correction H and leaves a square in the middle free of modules, about 22% of the width of the code, which is 3% to 6% of its area. Level H can restore about 30% of the codewords.

Before the download buttons work, the tool reads the finished PNG image back with a separate decoder (jsQR) and compares the text with what you entered. A coloured code or a code with a logo that does not read back is not offered for download. For a plain black-and-white code a failed check is only reported, because the encoder itself is tested with two decoders. The check shows that this decoder reads the image in your browser; it does not replace a test with real phones.

Common mistakes

  • Leaving out https://. A code with example.com may be only text for a scanner. The tool points this out but does not change what you typed.
  • A typing mistake in the address. A printed code cannot be corrected, so scan the preview and open the page before you print.
  • Too much text. A long text makes a fine pattern that is hard to scan from a small print. Link to a page instead of putting the whole text into the code.
  • An address that changes. If the page may move, point the code to an address on your own site that you can redirect yourself.
  • Cutting off the margin or placing the code on a busy background.

Sources

Frequently asked questions

Does the code expire?
No. The code contains the text itself and needs no service to stay alive. A code with a web address works until the page behind the address is removed.
How much text fits into one code?
At most 2,953 bytes at error correction level L, 2,331 at M, 1,663 at Q and 1,273 at H. Plain English letters and digits take one byte each, other characters up to four. If the text is too long, the tool tells you the length and the limit.
Can I see how often the code was scanned?
Not with a static code, because a scan does not contact this site. If you need numbers, let the code point to a page of your own website and count the visits of that page with your own statistics.
Is the text sent to your server?
No. The code is calculated by your browser and the files are created on your device. The text is not part of any request to this site.
Should I download SVG or PNG?
SVG is a drawing of squares that stays sharp at any size, which is best for print. PNG is a picture with a fixed number of pixels that every program accepts. If a PNG has to be enlarged, create a larger one instead of stretching a small one.
Do accents, Chinese characters or emoji work?
Yes. They are stored in the UTF-8 encoding and need two to four bytes per character, so the code grows faster than with plain letters. The two decoders in our tests read such codes correctly. We have not tested every scanner app, so try the code with the phones your audience uses.

Last updated: September 29, 2026