About this tool
What a QR code holds
A QR code stores a short run of bytes, usually text. What happens after a scan depends on the scanner and on how that text starts: most phone cameras offer to open an https:// link in the browser, to join the network described by a WIFI: string, to start a message for a mailto: link and to call a tel: number.
The codes made here are static: the content is written into the pattern itself. There is no redirect and no account behind them, so they keep working for as long as the link or the network they point to exists.
Versions, modules and error correction
The small squares are called modules. A QR code comes in 40 sizes, called versions: version 1 is 21 × 21 modules, and each version adds 4 modules per side, up to 177 × 177 for version 40. The tool picks the smallest version that fits your content.
Part of every code is redundancy, which lets a scanner rebuild it when it is scratched or partly covered. Level L can restore about 7% of the code, M 15%, Q 25% and H 30%. More redundancy leaves less room: the largest code holds 2,953 bytes at level L and 1,273 bytes at level H.
Making a code that scans
Scanners expect dark modules on a light background with an empty margin, the quiet zone, of 4 modules on every side. Low contrast, inverted colours and a missing margin are the usual reasons a code fails.
Use SVG for print: it stays sharp at any size. The PNG gives every module the same whole number of pixels, so the edges stay crisp; pixels that do not divide evenly become extra margin.
How it runs
The pattern is computed by the open-source Go library go-qrcode, compiled to WebAssembly and executed in a background thread of your browser. The SVG and the PNG are then drawn by the page from that pattern. The content, a Wi-Fi password included, is not sent anywhere.