QR Code Generator
Make a QR code for a link, your Wi-Fi password, a contact card or a text message. The code is drawn in your browser and contains your data directly — no redirect, no account, no expiry.
https:// is added automatically if you leave it out.
🎨 Appearance
Higher levels survive more damage but make the code denser.
The blank border around the code. 2 or more is recommended.
👀 Preview
Fill in the fields above and your QR code appears here.
19 bytes
512 × 512 px PNG · scalable SVG
🔒 Nothing you type leaves your device. The code is drawn in your browser.
How to make a QR code
- Pick what the code should contain: a URL, plain text, Wi-Fi credentials, an email, a phone number, an SMS or a contact card.
- Fill in the fields. The preview updates as you type, and the exact encoded string is shown next to it so you can check it.
- Adjust the appearance — size, error correction level, colours and quiet zone — if the default black on white does not suit.
- Download PNG for documents and screens, or SVG for print and anything that will be resized.
- Scan your own code with a phone before you print a thousand of them.
How QR codes encode data
A QR code is a grid of black and white squares called modules. Three large finder patterns in the corners let a scanner locate and orient the code, alignment patterns correct for perspective, and timing patterns establish the grid spacing. Everything else is data plus error-correction codewords.
The interesting part is the format of the text inside. Scanners recognise a handful of prefixes and act on them:
| Type | Encoded string | What the phone does |
|---|---|---|
| URL | https://example.com |
Opens the link |
| Wi-Fi | WIFI:T:WPA;S:MyNet;P:secret;; |
Offers to join the network |
mailto:a@b.com?subject=Hi |
Opens a pre-filled email | |
| Phone | tel:+15551234567 |
Offers to call |
| SMS | SMSTO:+15551234567:Hello |
Opens a pre-filled message |
| Contact | BEGIN:VCARD…END:VCARD |
Offers to save a contact |
Special characters matter. In a Wi-Fi payload the characters backslash, semicolon, comma, colon and double quote all have structural meaning, so a password containing any of them has to be escaped with a backslash. A vCard escapes semicolons, commas, backslashes and newlines instead. This tool handles both automatically, which is why a preview of the encoded string is worth a glance.
Error correction uses Reed–Solomon codes. Level L adds enough redundancy to recover about 7% of the code, M about 15%, Q about 25% and H about 30%. Higher levels mean more codewords, which means a denser grid for the same content.
Worked examples
Guest Wi-Fi card for a café. Network Cafe Guest, password flatwhite2024, WPA, not hidden. The encoded string is WIFI:T:WPA;S:Cafe Guest;P:flatwhite2024;;. Printed at 4 cm on a table card at error correction Q, it survives coffee rings and still scans.
A conference badge contact card. First name Ada, last name Lovelace, organisation Analytical Engines, phone and email filled in. The code carries a vCard of roughly 180 bytes, which fits comfortably and stays readable at 3 cm.
A campaign link in a magazine. A URL of 42 characters at level H produces a fairly sparse code that tolerates the rough registration of magazine printing. Download the SVG so the printer can scale it without softening the edges.
A colour experiment that fails. Foreground #1e90ff on white gives a contrast ratio of about 3.2:1. The tool warns, and in practice many older scanners will hesitate. Darkening the blue to roughly #0b3d91 pushes the ratio past 12:1 and scanning becomes instant.
Tips and common mistakes
- Keep the quiet zone. The blank border around a code is part of the specification — at least four modules, though two is usually enough on screen. Cropping it tightly is the single most common reason a code fails.
- Do not invert the colours. Scanners look for dark modules on a light background. A white-on-black code is technically valid but practically unreliable.
- Shorter content scans faster. A 40-character URL makes a much sparser, more forgiving code than a 300-character one. Use a short path rather than a long tracking URL.
- Test on both platforms. iOS and Android camera apps handle Wi-Fi and vCard payloads slightly differently. Two test scans cost nothing.
- Use SVG for print. A PNG scaled up in a layout program gets blurry edges, which reduces the contrast between modules.
- Do not put a huge logo in the middle. If you add one afterwards, use error correction H and keep the logo under about 20% of the area.
Privacy
Everything happens locally. The QR library runs in this browser tab, so Wi-Fi passwords, phone numbers, email addresses and contact details are never transmitted, stored or logged. The resulting image contains your data directly rather than a redirect through someone else’s server, which means nobody can count your scans, change the destination later, or take the code offline. That is also why it never expires.
Frequently asked questions
Do these QR codes expire?
No. The data is encoded directly in the black and white pattern, so the code works forever with no server involved. Codes that expire are "dynamic" codes that point at a short link owned by a company, which can shut it down or start charging.
Which error correction level should I choose?
M is the sensible default. Use Q or H for codes that will be printed on packaging, worn as a sticker, or covered with a logo, since those levels can recover from 25% and 30% damage. Use L only when the content is long and the code would otherwise be too dense.
How small can I print a QR code?
A common rule is that the printed width should be at least one tenth of the scanning distance, with roughly 2 cm as a practical floor for a phone held at arm's length. Denser content needs a bigger code, because each module gets smaller.
Why does my Wi-Fi QR code not connect?
Usually the SSID or password is slightly wrong — they are case-sensitive — or the security type does not match. Also check the hidden-network switch, and remember that iOS and Android both need the network to be in range when you scan.
Can I use my brand colours?
Yes, as long as the foreground stays clearly darker than the background. The tool shows the WCAG contrast ratio and warns below 7:1. Light-on-dark codes look striking but many scanners refuse to read them.
Is anything I type sent to a server?
No. The code is generated by JavaScript in this tab, so passwords, phone numbers and contact details never leave your device. There is no tracking pixel and no analytics on the content.
Related tools
- HEIC to JPG Converter (and Everything Else)Turn iPhone HEIC photos into JPG in seconds, or convert between PNG, WebP, AVIF and more. Files are decoded on your own device and never uploaded.
- Base64 Encoder & DecoderConvert text, files and data URIs to and from Base64 with correct UTF-8 handling, a URL-safe option and MIME line wrapping. Nothing is uploaded.
- Image CompressorDrop in photos, choose a quality level, and get noticeably smaller files. Everything runs inside this tab, so your images never touch a server.
- Merge and Split PDFJoin several PDFs into one, pull out the pages you need, or burst a document into separate files. Everything happens in this tab, so confidential documents stay on your machine.
- EXIF RemoverFind out what your photos are quietly telling people — camera, timestamp, even GPS coordinates — and strip it all out before you share them.
- Image ResizerDrop in photos and get them back at exactly the size you need — by pixels, by percentage, or fitted into a preset box. Everything runs in this tab, so your images never leave your device.
Last reviewed: