QR Code Generator

Build a QR code that will still work in ten years - the data is written into the pattern itself, not stored on anyone's server - then work out exactly how big to print it.

What should the code do?

The code is built in this browser tab and the data is written straight into the pattern. Nothing is uploaded, nothing is tracked, and the code never expires or stops working.

Leave off https:// and it is added for you. Shorter links make a smaller, more reliable code.

Colours and shape

Palettes

Logo in the middle

The image stays on your device. Adding a logo destroys part of the pattern, so error correction is raised to H automatically to compensate.

Error correction and export size

The PNG snaps to a whole number of pixels per module, so the exported size is the closest clean fit. For print, the SVG is better - it stays sharp at any size.

Your QR code

Your code appears here as you type.

How full this code is

How big to print it

The single most common reason a printed QR code fails is that it was printed too small for the distance people scan it from. The working rule is that a code reads reliably up to about ten times its own width, so the distance decides the size — and the amount of data you packed in decides how fine each module ends up.

Typical distances: a business card or menu is scanned from about 20–30 cm, a poster on a wall from 1–2 m, a shop window from 2–3 m, and a billboard from 20 m or more.

Which error correction level to pick

Every QR code carries spare copies of its own data so it still reads when part of it is dirty, torn, curved or covered. More redundancy means a denser grid for the same content — so the right level depends on where the code will live, not on how cautious you feel.

L — recovers about 7%Screens, emails, PDFs and anything scanned off glass. Nothing is going to damage it, so spend the space on a coarser, easier-to-read grid instead.
M — recovers about 15%The sensible default and what most printed material should use. Handles ordinary print, a fingerprint, a slight crease.
Q — recovers about 25%Product labels, outdoor signage, anything on a curved surface such as a bottle or a tube, and codes that will be handled a lot.
H — recovers about 30%Required when a logo sits over the middle, and worth it for industrial settings, restaurant tables and anywhere the code gets scuffed. Costs roughly 30% more modules than L.

Error correction protects against damage, not against a bad print. A code that is too small or too low contrast fails at every level.

Test it before you print a thousand of them

A code that scans on your desk under office lighting from 15 cm is not evidence that it works. Four checks catch almost every failure.

Print one at final sizeNot scaled on screen — actually printed, on the actual material. Ink spread on uncoated stock and matte vinyl thickens modules and closes the gaps between them.
Scan it from the real distanceStand where your reader will stand. If it is a window sticker, go outside and stand on the pavement.
Try more than one phoneUse an old Android as well as a current iPhone. Older cameras and cheaper sensors are far less forgiving of small modules and low contrast.
Check awkward lightDirect sun, a dim restaurant, and glare on a laminated surface. Glossy lamination over a dark background is a common failure that never shows up indoors.

Related calculators

How this QR code generator works

Everything on this page happens inside your own browser tab. When you type a link, the text is encoded into a module grid by JavaScript running on your device, drawn onto a canvas, and handed back to you as a PNG or an SVG file. Nothing is sent to a server, so there is no upload to intercept, no record of what you encoded, and nothing that can be taken away later.

That last point matters more than it sounds. The codes produced here are static: the data lives in the black-and-white pattern itself. A scanner reads the pattern and gets your link directly. There is no redirect in the middle, which means the code cannot expire, cannot be rate-limited, cannot start showing an advert, and will not break if this site ever disappears. Print it on ten thousand leaflets and it will still work in a decade.

Static and dynamic codes are not the same product

Many generators advertise a free tier and then quietly hand you a dynamic code. A dynamic code does not contain your link at all — it contains a short address on the provider's own domain, which forwards to wherever you have currently pointed it. The appeal is real: you can change the destination after printing, and you get scan analytics.

The cost is that the code stops being yours. It works only for as long as that company keeps the redirect alive and you keep paying. Free dynamic tiers routinely cap total scans, and once you hit the cap the code stops resolving — on material you have already printed and distributed. If you have ever seen a menu or a poster whose QR code leads to an upgrade prompt, that is what happened.

Use a static code, like the ones here, whenever the destination is stable: your website, your Wi-Fi password, your contact details, a phone number, a location. If you genuinely need to redirect later, the robust approach is to encode a URL you control — a page on your own domain that you can repoint whenever you like. You keep the flexibility without handing the code's survival to a third party.

Choosing the right code type

A QR code is just a container for text. What makes a Wi-Fi code join a network and a contact code open the address book is the format of that text, which phone cameras recognise by prefix. Picking the right type here writes the correct format for you.

Link is the workhorse and produces the smallest, most reliable codes. Wi-Fi writes a WIFI: string that Android and iOS 11 and later join straight from the camera — ideal for a guest network, since people never have to see or retype the password. Contact produces a vCard, which is by far the most data-hungry option; fill in only what a person actually needs, because every extra field makes the grid finer and the code harder to scan. Email, SMS, Phone and WhatsApp open the relevant app with the details already filled in, though the person still has to press send. Location drops a pin. Event writes a calendar entry.

One rule cuts across all of them: less text means fewer modules, and fewer modules means a code that scans faster, from further away, and at a smaller printed size. If a code looks alarmingly dense, the fix is almost always to shorten the data rather than to print it bigger.

Size is what actually breaks printed codes

The most common reason a QR code fails in the wild is not damage or a bad scanner — it is that somebody sized it by eye. The usual working rule is that a code can be read from roughly ten times its own width. A code 3 cm across is good for about 30 cm, which is fine on a business card and useless on a wall.

Underneath that rule is the module size, sometimes called the X dimension: the width of one individual square in the grid. Scanning is really a question of whether the camera can resolve those squares. Below about 0.4 mm per module you are relying on a good camera in good light; below 0.25 mm, ink spread on the paper starts closing the gaps between modules and no camera will help. This is why data length and physical size are the same problem. A version 10 code packs 57×57 modules into whatever space you give it, so at 3 cm wide each module is only about 0.5 mm across, while a short link at version 3 gives you 1.1 mm in the same space.

The calculator above works this out both ways: give it a scanning distance and it tells you how wide to print, or give it the space you have and it tells you how far away the code will still read — using the module count of the code you have actually built, not a generic estimate.

Colour, contrast and the inversion trap

You can colour a QR code, within limits that are stricter than most brand guidelines assume. Scanners look for a dark pattern on a light background and threshold the image between the two. Two rules follow.

First, keep real contrast. A mid-grey code on a cream background looks tasteful on screen and fails on a phone in a dim room. Aim for a genuinely dark foreground — dark navy, forest green and deep burgundy all work; pastels and mid-tones do not.

Second, never invert. A light code on a dark background is the single most common design mistake, because it looks striking and it scans on the designer's phone. Many scanners will not attempt an inverted code at all, and the ones that do are slower and less reliable. If your layout demands a dark panel, put the code inside a light rectangle within it. The generator warns you when your colour choice trips either rule.

The quiet zone — the blank margin around the code — is not decorative padding. The specification requires four modules on every side, and scanners use it to find where the symbol begins. Designers trim it constantly, and it is a frequent cause of codes that read on some devices and not others.

Putting a logo in the middle

A logo works because QR codes carry Reed–Solomon error correction: spare data that lets a scanner rebuild modules it cannot read. Level H can reconstruct roughly 30% of the code, which is why covering the centre with a mark is survivable at all. This tool raises error correction to H automatically as soon as you add a logo.

Two cautions. The recoverable percentage is a budget shared with everything else that can go wrong — print quality, a scuff, a fold, glare — so spending most of it on a logo leaves nothing for real-world wear. Keeping the logo under about a fifth of the width is a sensible ceiling. And a logo placed over one of the three big corner squares will break the code outright, because those are the finder patterns a scanner uses to locate and orient the symbol before it decodes anything. This tool only ever clears space in the middle, for exactly that reason.

PNG or SVG

Use the SVG for anything printed. It stores the code as vector shapes, so it stays perfectly sharp whether it goes on a business card or the side of a van, and print shops prefer it. Use the PNG for screens, documents and anywhere a vector file is awkward. The PNG here snaps to a whole number of pixels per module, which avoids the soft, half-grey module edges that resampling produces — a subtle but real cause of scanning problems at small sizes.

Frequently asked questions

Do these QR codes ever expire?
No. The codes produced here are static, which means your link or text is encoded directly into the black-and-white pattern. A scanner reads the pattern and gets your data straight away, with no redirect through this site or anyone else's. There is nothing to keep alive, nothing to pay for, and nothing that can be switched off. A code you print today will still work if this website disappears tomorrow. Generators that advertise free codes which later stop working are using dynamic codes, where the pattern only contains a short link on the provider's own domain.
Is there a limit on how many I can make, or a watermark?
There is no limit, no account, no sign-up and no watermark. The generator runs in your browser, so every code costs nothing to produce and there is no meter to hit.
Is my data uploaded anywhere?
No. The encoding, the drawing and the file download all happen in your browser tab using JavaScript. No request is made while you type, and you can confirm this by opening your browser's developer tools and watching the Network tab. This matters most for Wi-Fi passwords and contact details, which are exactly the things you would rather not post to a stranger's server. Logo images you add are read locally by the browser and are never uploaded either.
What size should I print my QR code?
Work backwards from how far away people will scan it. A code reads reliably up to roughly ten times its own width, so for scanning at 50 cm you want about 5 cm across, and for a poster read from 2 m you want about 20 cm. Use the print-size calculator on this page - it uses the actual module count of the code you have built, which matters because a long link produces a finer grid that needs more physical space than a short one. As a floor, keep each module at 0.4 mm or larger, and never print smaller than about 2 cm square regardless of the maths.
Which error correction level should I choose?
M for most printed material - it recovers about 15% damage and keeps the code reasonably coarse. Drop to L for codes that only ever appear on a screen or in a PDF, since nothing will damage them and the lower level gives you a smaller grid. Go to Q for product labels, outdoor signs and curved surfaces such as bottles. Use H when a logo covers the middle, which this tool switches to automatically. Higher levels are not free: level H needs roughly 30% more modules than L for the same content, so the code gets denser and has to be printed larger.
Can I add my logo without breaking the code?
Yes, within limits. QR codes carry redundant data that lets a scanner rebuild parts it cannot read, and level H can recover around 30% of the symbol. Keep the logo under about a fifth of the code's width, leave the error correction at H, and never cover the three large corner squares - those are the finder patterns a scanner uses to locate the code before it decodes anything. This tool only clears a space in the centre and warns you when the logo is eating too much of the damage budget. Always scan-test a logo code before printing it in quantity.
Why does my code fail when I invert the colours?
Scanners are built on the assumption of a dark pattern on a light background, and many will not even attempt an inverted code. Light-on-dark looks striking and usually scans on the designer's own phone, which is how it survives to print. If your layout needs a dark panel, place the code inside a light rectangle within it. The same applies to low contrast: a mid-grey code on a cream background fails in poor light even though it looks fine on screen.
What is the quiet zone and can I remove it?
It is the blank margin around the code, and the specification requires it to be at least four modules wide on every side. Scanners use it to work out where the symbol starts, so trimming it is a genuine cause of codes that read on some phones and not others. You can reduce it here because layouts sometimes force the issue, but the tool will warn you, and fixed-mount and handheld industrial scanners are far less forgiving than a phone camera.
Should I download the PNG or the SVG?
SVG for anything that gets printed. It stores the code as vector shapes, so it stays perfectly sharp at any size and print shops prefer it. PNG for screens, slides and documents, or wherever a vector file is inconvenient. The PNG exported here snaps to a whole number of pixels per module, which avoids the blurred module edges that resizing introduces - a subtle but real cause of scan failures at small sizes.
How much data can a QR code hold?
At the largest version and the lowest error correction, about 2,953 bytes of arbitrary text, 4,296 alphanumeric characters, or 7,089 digits. In practice you should never get close. A code holding a few hundred characters already has a very fine grid and needs to be printed large to scan at all. Keep links short, keep contact cards to the fields people actually need, and if you are encoding a long document, encode a link to it instead.
Why did my Wi-Fi QR code not connect?
Check three things. The network name is case-sensitive and must match exactly, including spaces. The security type must be right - selecting WPA for an open network, or the reverse, will fail. And on a hidden network you must tick the hidden option, otherwise the phone looks for a broadcast SSID and gives up. Passwords containing semicolons, colons, commas, quotes or backslashes are escaped automatically here, which is a common source of failure in generators that do not handle it.
Can I use these codes commercially?
Yes. QR code technology was released for public use by its inventor, Denso Wave, and the standard is published as ISO/IEC 18004. Codes you generate here are yours to use on packaging, signage, advertising or anything else, with no attribution and no licence fee.

Last reviewed · How ListCalc calculates · Report an error