🔧 TL3 Tools

📱 QR Code Generator

Written by Alex Chen · Reviewed by Sarah Mitchell · July 19, 2026

Generate custom QR codes for URLs, plain text, Wi-Fi credentials, phone numbers, SMS, and email addresses.

Content

Appearance

QR Code

Configure and generate your QR code.

What each data type actually produces

Every option in the dropdown is converted into a standard URI scheme before it gets drawn, because that is the format phone cameras and reader apps are built to understand. Wi-Fi becomes a string that opens with WIFI:T: and lists the encryption type, network name, and password in a fixed order. A phone number becomes TEL: plus the digits, which is why adding a country code matters. An SMS entry becomes SMSTO: with the recipient, a colon, and the message body. Email becomes a mailto: link with the subject and body appended as URL-encoded parameters. Plain text stays exactly as typed, and most scanners will notice a web address and offer to open it. The form does the syntax assembly for you, so you never have to remember any of it — but knowing it helps you predict what a scanner will do with the result.

What happens when you hit Generate

Generation runs entirely in the browser. The page loads a compact JavaScript library and draws the pattern onto a canvas element; nothing about your content is transmitted to a server, and there is no backend step that can throttle or fail. The library places the three finder squares that anchor the corners, lays down timing patterns so a scanner can measure the module grid, then writes the encoded data with Reed-Solomon correction bytes mixed in. It finishes by applying one of eight masking patterns, chosen to break up long stretches of identical modules — a code with a big blank area or too many repeated blocks is measurably harder for a scanner to lock onto. This is also why the size dropdown only changes the pixel dimensions: the number of modules is decided by the data and the error correction level, not by the export size. The Download button reads the finished canvas and saves a PNG, which is a raster image, so the 1024 px option genuinely gives you more pixels per module for large prints.

Worked example: the default URL at three settings

The textarea starts with https://tl3.tools — 16 characters of data. At Low error correction (7%), that fits in a version 1 code: 21 by 21 modules. At the default Medium (15%), version 1 is too small, so the generator moves up to version 2, a 25 by 25 grid. Push error correction to High (30%) and even version 2 runs out of room; the pattern jumps to version 3, 29 by 29 modules. Same content every time, three visibly different patterns. That is the whole trade-off: more correction means more redundancy, so the code survives scratches, folds, glare, and clipped corners, but the pattern gets denser and needs sharper printing. A scanner does not care which version you chose — it reads the grid size from the finder patterns, corrects for the angle of the camera, and re-samples the modules. That is also what the scanner "sees": not the message, but a grid to decode, plus the quiet zone around it that tells it where the code ends.

Where QR codes fall over

Scanners judge contrast by brightness, not by color. The defaults here — near-black modules on white — are about as safe as it gets. A white-on-black inversion or a pastel-on-pastel combination will often fail even though the code looks fine to your eyes. The quiet zone is another common killer: QR codes need roughly four modules of blank space on every side, and cropping the PNG to the very edge of the pattern is a reliable way to break scanning. Print size matters too — a code meant to be read from a few meters away has to be physically larger, and the ten-to-one distance rule of thumb is a decent starting point. Two quirks are specific to this tool. The Wi-Fi string is assembled without escaping, so an SSID or password containing a semicolon, a colon, or a quote will produce a code that some phones reject — rename the network or choose a different password if that happens. And there is no length validation, so very long text will happily render into a dense pattern that older scanners cannot resolve; keeping URLs under 200 characters is the practical limit for reliable scanning.

Questions about QR codes that come up often

Why does the pattern get denser when I raise the error correction?

The library adds Reed-Solomon correction data alongside your content. More redundancy means more modules, so the same input needs a larger version of the code. That is the density you are seeing — not a mistake, just the price of resilience.

Will a 1024-pixel download scan better than a 256-pixel one?

Not on its own. The module count is fixed by the data and correction level; pixel size only controls how many pixels each module gets. A larger PNG helps when you print big, because the printed module stays crisp, but a dense code exported at 1024 px is still a dense code.

Why won't my phone connect to the Wi-Fi code?

Check the encryption dropdown first — WPA/WPA2 is right for nearly all modern routers, while WEP is legacy and Open should only be used for guest networks that genuinely have no password. If the SSID or password contains a semicolon, colon, or quote, regenerate with a cleaner value, because the Wi-Fi syntax here is not escaped. Finally, some built-in camera apps refuse the WIFI: format; a dedicated reader app usually handles it.

Can a colored QR code still be scanned?

Yes, as long as the modules and the background differ strongly in brightness. Dark-on-light is safest. Avoid light-on-white, dark-on-black, and gradients, and never rely on hue alone to separate the two.

Can I see how many times this code gets scanned?

No, and that is a property of static QR codes generally, not a limitation of this page. The data is baked directly into the pattern, so there is no server in the loop to count anything. Analytics require a dynamic code backed by a redirect service that logs each hit before forwarding the scanner along.

Does the code expire?

The pattern itself never expires — it is just squares on a surface. What can die is the destination: if the URL stops resolving or the page is taken down, the code becomes a dead link. For content you control, keep the address stable and the code keeps working indefinitely.

When to use this — and when not to

Reach for it for menus and flyers, business cards, event check-in, signage that points to a web page, and Wi-Fi credentials for guests. Skip it when the destination is likely to change — point the code at a short link you manage instead, so you can swap the target without reprinting. Skip it for anything sensitive, because a Wi-Fi code is effectively your password printed in public, and anyone who scans it can join the network. And skip it when you need usage numbers: that requires a dynamic service, not a static pattern.

Related Tools