QR codes as PNG or SVG, generated entirely in the browser.
Higher error correction survives more damage but needs a bigger code for the same content.
What it's for
Make a QR code — the square pattern a phone camera reads — for a web link, your Wi-Fi network or your contact details.
Before you start
Have the link ready or, for Wi-Fi, the network name and password exactly as the router shows them. Nothing you type leaves your browser.
Choose what the code is for
Press Text or link for a web address or a message, Wi-Fi so guests can join without typing the password, or Contact to share your name and number.
Fill in the details
For a link, replace the sample with your own. For Wi-Fi, type the Network name (SSID) and Password exactly, capitals included, and leave Security on WPA / WPA2 / WPA3 unless your router says otherwise. For a contact, fill in Full name and any of Mobile, Email and Organisation.
Choose how sturdy it should be
Error correction lets the code scan even when part of it is dirty or torn. Medium suits a screen; choose High for print, outdoors or a curved surface, though the code gets bigger.
Pick the colours, if you like
Foreground colours the dots and Background the space behind them. Keep the dots dark and the background light — a scanner reads nothing else.
Press Generate and test it
Press Generate to bring the code into view; it already changes as you type. Scan it with your own phone before sharing it.
Save it
Press Download PNG for a picture to print or send, or Download SVG for a file that stays sharp at any size. Both include the white border the code needs.
Reading the result
If it goes wrong
A QR code for a link, a Wi-Fi network or a contact card. The content is written into the pattern itself, so the code is permanent: it does not point at us, there is nothing to renew, and no one is counting the scans.
The Wi-Fi and contact tabs matter more than they look. Both formats use punctuation as structure — a semicolon ends a field in a Wi-Fi payload, a comma separates values in a contact card — so a password containing one has to be escaped or the phone joins with the wrong password and the code seems simply broken. That escaping is done here; a good many generators skip it.
The encoder is written into the site rather than pulled from a package, because the calculation layer carries no third-party code at all. On a page where people type their home Wi-Fi password, that is worth the effort — and it is checked against libqrencode, an independent implementation, across every one of the forty sizes at all four error-correction levels.
No. The whole encoder runs in this tab — it is part of the page, not a service it calls. Nothing you type reaches our servers, and no request carrying it is ever made. That matters most on the Wi-Fi tab, which exists to encode the password to your own network.
Never. A QR code is not a link to us — the content is written into the pattern itself, so the code works forever with no account, no tracking and nothing to renew. Services that offer "dynamic" codes point at their own server first, which is why those stop working when the service does.
Spare data woven through the code so it still reads when part of it is dirty, torn or covered. Low recovers about 7%, High about 30% — but the spare data takes room, so High needs a bigger code for the same content. Medium is right for a screen. Choose High for anything printed, outdoors, or on a curved surface.
QR codes come in 40 fixed sizes, so capacity goes up in steps rather than smoothly. Crossing a boundary jumps to the next size. Lower case also costs more than upper case: the compact alphabet has no lower-case letters, so HTTP://EXAMPLE.PH encodes smaller than the same address in lower case.
Within limits, and the page will tell you when you have passed them. A scanner only distinguishes dark from light, so the two need a clear difference — the tool warns below about 4:1. It also warns if you invert them, because most scanners will not read a light-on-dark code however good it looks.
The quiet zone. The standard requires four clear modules on every side, and it is the commonest reason a code will not scan — pasted flush against text or a photo, the scanner cannot find where the code ends. Both downloads include it; do not crop it off.
Up to a point. As a rough guide the code should be at least a tenth of the distance it will be scanned from — 10cm across for a metre away. More content means more, finer modules at the same printed size, so keep the content short and the code will read from further away.
The big squares in three corners are finder patterns. Three, not four, is what tells the camera which way up the code is — a fourth would make it ambiguous. The dotted line running between them is the timing pattern, which tells the scanner how wide one module is.
Reed-Solomon parity, the same family of maths that keeps a scratched CD playing. It is what lets a company put a logo over the middle of a code and have it still work.
The compact alphabet holds digits, capitals and nine punctuation marks — no lower case. A domain is not case sensitive, so shouting it fits more in a smaller code.
Important
Codes made here are static — the content is written into the pattern, so they never expire and nothing is tracked. Nothing you type here is sent to our servers — the calculation runs entirely in your browser.