QR Code Generator
Turn a URL or any text into a static QR code. Choose error correction, colors and an optional logo, then download it as SVG or PNG.
Up to 4000 characters. Long text makes a dense code that is harder to scan.
Higher levels survive more damage but make the code denser.
PNG, JPEG or WebP up to 1 MB. The file stays on your device. Check with a phone that the code still scans.
Fill in the form to see the QR code.
Everything is generated in your browser; your data and logo are not uploaded.
How it works
Type or paste a URL or any text and the code appears next to the form as you type. Pick an error correction level and colors, add a logo if you want one, and download the result as SVG or PNG. The text and the logo are processed in your browser; nothing is uploaded.
Your text is written as UTF-8 bytes in byte mode. The structure of the symbol (the three square finder patterns, timing and alignment patterns, Reed-Solomon error correction and mask selection) follows ISO/IEC 18004 and is produced by an open-source library; the page then draws the result as vector shapes. "QR Code" is a registered trademark of DENSO WAVE.
A static code, not a redirect
The code made here is static: your text is stored in the pattern itself. Three things follow. The code does not expire and does not depend on a service, because nothing sits on a server. It cannot be changed after printing, so new content means a new code. And nobody counts the scans, because there is nothing to count them with.
A dynamic QR code works differently, in general terms: the pattern holds a short address, a server forwards to the real destination, and that destination can be changed later and visits can be recorded. That requires a service behind the code and usually an account. This tool does not make those.
Error correction
A QR code carries redundant data so a scanner can rebuild what a scratch, a stain or a logo hides. The four standard levels restore roughly this share of the code:
- L: about 7%
- M: about 15% (the default here)
- Q: about 25%
- H: about 30%
The price of a higher level is more modules: the code gets denser and each square gets smaller at the same print size. Use the lowest level that fits the situation. When you add a logo, the tool switches to H and locks the selector.
Size
The tool picks the smallest version that holds the data. Version 1 is 21 x 21 modules; each version adds 4 modules per side, up to version 40 with 177 x 177. The page shows the version it chose. A larger version is not wrong, but it asks more of the camera and of the print.
Colors, quiet zone and logo
Colors are entered as #RRGGBB. The tool warns when the code is lighter than its background, and when the contrast ratio between the two is below 3. A margin of 4 modules, the quiet zone the standard requires, is added around the code; do not crop it.
A logo sits in the center on a square in the background color. Its side is at most 22% of the code's side, so it hides at most about 4.84% of the area, and the error correction level is set to H. PNG, JPEG and WebP up to 1 MB are accepted. SVG logos are refused because an SVG file can carry script.
Examples
The version depends on the number of bytes, not characters. These results come from the tool's own tests:
| Text | Level | Result |
|---|---|---|
| HELLO | L | Version 1, 21 x 21 modules |
| 17 ASCII characters | L | Version 1 (17 bytes is its capacity at L) |
| 9 times ş (18 bytes) | L | Version 2, one byte too many for version 1 |
| 4 emoji (16 bytes) | L | Version 1 |
| 5 emoji (20 bytes) | L | Version 2 |
| 1,500 ASCII letters | L | Fits |
| 1,500 times ş (3,000 bytes) | L | Too long: the limit at L is 2,953 bytes |
| 3,500 ASCII letters | L | Too long for any QR code |
| 4,001 characters | any | Refused by the tool's own 4,000 character limit |
For everyday use the picture is simpler. A short web address gives a sparse code with big squares that is easy to scan from a distance. The same address plus a long tracking query makes a visibly denser code at the same print size. If a page has a long address, point the code at a shorter one you control instead of raising the error correction.
Things to watch for
- Test the finished code. Scan the downloaded file, or better a printout, with the phone your audience uses, from the distance it will be read. A preview on your own screen proves little.
- Write the full address. Whether a scanner offers to open a text as a link is the scanner's decision; typing the complete address with https:// gives it the best chance.
- Whitespace is kept. The text is encoded exactly as typed, including a trailing space or line break. Text that is only spaces counts as empty.
- Keep the margin. The white border is part of the code. Placing it on a busy photo or cropping it tightly can make a scan fail.
- Contrast beats style. A dark code on a light background is the safe choice. Colors are fine as long as the code stays clearly darker than the background.
- Mind the size. A dense code printed very small fails. If it is dense, make it larger rather than raising the error correction level.
- The code is not secret. Anyone who sees it can read what it contains. Do not encode anything you would not print in plain text.
- Printed codes are final. The content cannot be edited afterwards. Check the text, especially the address, before you send anything to print.
- Older scanners. Text with non-ASCII letters relies on the scanning app reading UTF-8, which we have not tested on individual readers.
Frequently asked questions
Last updated: 10/11/2026
Related tools
Create a QR code that lets people join your WiFi network by scanning it, without typing the password. Built in your browser.
Put your contact details into a QR code that a phone can save as a contact. Name, company, phone, email, website and address.
Add utm_source, utm_medium, utm_campaign and optional parameters to a link, with correct encoding and warnings for mixed case and spaces.