Create QR Codes for URL, Wi-Fi, and Contacts
Make a QR code for a link, Wi-Fi network, or vCard and download it instantly. Choose size and error-correction level — all locally in your browser.
A QR code is just text, arranged as a grid of black and white squares that any phone camera can read. That is the whole trick: there is no account, no server, and no “registration” behind a QR code — encode a string, print the pattern, and every scanner reads the same text back. The QR Code Generator builds that pattern in your browser from whatever you type, and the privacy note under it says so directly: “Runs locally in your browser. QR data is not uploaded.” You enter a URL, a Wi-Fi login, or a contact card; the tool draws the code; you download it as PNG or SVG.
TL;DR
A QR code is a 2D barcode that stores text. Whatever you put in, that is what comes out when someone scans it.
- It encodes plain text — a URL is just text that happens to start with
https://; a Wi-Fi code is text in the formWIFI:T:WPA;...; a contact card is text in vCard format. The scanner decides what to do with the text. - Two settings decide how robust it is — the size (how many pixels, which sets the physical module density) and the error-correction level (L/M/Q/H, how much damage the code can take and still scan).
- Nothing is uploaded — encoding runs locally. A Wi-Fi password you type never leaves your device to generate the code.
Pick a type, enter the data, choose size and error correction, and download.
What you can encode
The QR Code Generator has seven type tabs — URL, Text, Email, Phone, SMS, Wi-Fi, and vCard — and each one shapes the text payload into the format scanners expect:
- URL — a link. If you type
example.com, the tool prependshttps://and normalizes it, so the scanner opens a real page rather than searching for the literal string. Verify a link’s structure first with the URL Parser. - Text — arbitrary plain text. Scanned text shows on screen; nothing is opened. Use it for short notes, IDs, or anything that is not a link.
- Email — builds a
mailto:payload. A scanner opens a compose window pre-filled with the address, an optional subject, and an optional body. - Phone — a
tel:payload. Scanning dials the number. - SMS — an
SMSTO:<number>:<message>payload. Scanning opens a text message to that number with the body pre-typed. - Wi-Fi — the
WIFI:T:...;S:...;P:...;;credentials string (covered in the deep-dive below). Scanning joins the network. - vCard — a contact card in
BEGIN:VCARD ... END:VCARDformat. Scanning offers to add the name, phone, email, and website to the contact list.
The common thread: every one of these is just a string, and the QR code carries that string verbatim. The “type” tab only controls how the string is assembled and which app the phone routes it to.
The two settings that matter
Once the payload is set, two controls decide whether the code scans reliably:
- Size — the pixel dimensions of the rendered image. The tool offers three presets, S (256px), M (512px), and L (1024px), plus a free number field (160–1024). Larger images are easier to scan at a distance or when displayed small, because each module — one black or white square — occupies more physical space. A 256px code printed at 3cm wide is harder to read than a 1024px code printed at the same size.
- Error-correction level — labeled Error correction, with four buttons L, M, Q, H. This is Reed–Solomon redundancy: how much of the code can be obscured or damaged and still decode. The levels recover roughly 7% (L), 15% (M), 25% (Q), and 30% (H) of the data. Higher levels make a denser, harder-to-scan code, so they are a tradeoff, not a free upgrade.
Raise the level when the code will be printed (logos overlaid on top, ink that may smudge, outdoor placement) or when part of it might be covered. Leave it at M for clean on-screen codes. A logo placed over the center of an H-level code is the classic reason to go high — the redundancy absorbs the occlusion.
Step-by-step: generate a QR code
The QR Code Generator does everything locally. The workflow:
- Pick a type. Click one of the seven tabs across the top — URL, Text, Email, Phone, SMS, Wi-Fi, or vCard. The input fields below change to match.
- Enter the data. Fill the fields for the chosen type. For Wi-Fi that is Network name, Security (WPA/WPA2, WEP, or No password), Password, and a Hidden network checkbox; for vCard it is Display name, Organization, Phone number, Email address, and Website. The QR preview updates live as you type.
- Set size and error correction. In the options toolbar, choose a Size preset (S/M/L) or type a pixel value, pick an Error correction level (L/M/Q/H), and adjust the Margin (0–8 quiet-zone modules around the code). A wider margin helps scanners lock on.
- Tune colors if you need to. The Foreground and Background color fields default to near-black on white. Dark-on-light contrast is required — if you pick a low-contrast pair, the tool warns “Low contrast can make QR codes hard to scan.” Use the Color Converter to sanity-check a hex value.
- Download. Use Download PNG for a raster image (photos, documents, screens) or Download SVG for a scalable vector (printing at any size with no blur). Copy payload copies the encoded text string itself, useful to verify exactly what was encoded. Reset clears everything.
The whole flow is a render operation: input in, image out, no network call. Refresh the page and all fields reset.
Wi-Fi QR format deep-dive
The Wi-Fi type builds a string in a de-facto format most phone cameras understand:
WIFI:T:WPA;S:HomeNet;P:supersecret;H:false;;
The fields are T: (security — WPA, WEP, or nopass), S: (the network name / SSID), P: (the password, omitted when security is nopass), and H: (whether the network is hidden, true or false). The string ends with a double semicolon. The tool always emits the H: field, so a normal visible network shows H:false.
You can read this format off the generated code with Copy payload — useful to verify the credentials before you print the sticker. Two things to know:
- Special characters are escaped. If the SSID or password contains
\,;,,, or:, the tool backslash-escapes them so the scanner doesn’t misread the field boundaries. That is whyS:My\;Cafein the payload corresponds to an SSID ofMy;Cafe. - A Wi-Fi code shares the password with anyone who scans it. That is the point — but it means the printed code is as sensitive as writing the password on the wall. Treat Wi-Fi QR codes like credentials: don’t post them publicly, and rotate the password if a sticker goes missing.
Because the format is plain text, you can also hand-build a WIFI: string in a plain Text QR if you ever need to — the structured Wi-Fi tab just spares you the escaping.
Limits
A few honest constraints so the codes you ship actually scan:
- Very long input gets dense, then unreadable. A QR code has a hard capacity ceiling that shrinks fast as error correction rises; the tool caps payloads at 2,048 bytes and warns “Payload is too large for reliable QR generation.” Beyond that, more characters means finer modules, and fine modules stop scanning on older phone cameras. Keep URLs short, trim vCards to the fields you need, and prefer L or M for long payloads.
- Dark-on-light contrast is required. Scanners look for the dark/light edge. Light-gray-on-white or brand-color-on-brand-color looks great and scans terribly — the tool’s low-contrast warning exists for this reason. When in doubt, near-black on white.
- Test on a real device. A code that renders fine on your monitor may fail on a smudged print or a low-end camera. Scan the downloaded PNG or SVG with an actual phone before you print a hundred of them. Size, contrast, and error correction all interact — the only reliable check is a real scan.
- Logos and overlays eat redundancy. Placing a logo on a QR code works only because error correction can absorb the covered area, and only at H. Cover too much and it stops scanning. Keep the overlay small and centered.
FAQ
Do QR codes expire?
No — a QR code is a static image. It encodes text and nothing more, so it works for as long as the text it points to is valid. A code linking to https://example.com/sale “expires” only when that page comes down, not because the code itself aged. (So-called “dynamic” QR codes that expire or redirect are a paid service that points a short link at a real code; the code you generate here is the direct, permanent kind.)
What size should I pick?
For screen display and casual use, M (512px) is a safe default. For anything printed, go L (1024px) and export as SVG so it stays sharp at any size — a raster PNG scaled up gets blurry, and blurry modules don’t scan. The pixel value is the rendered image size, not the physical size; what matters for scanning is how large each module ends up on the final surface, so a bigger source image lets you print larger without losing density.
Can it scan a QR?
No — this tool only generates QR codes, it does not read them. To scan one you use your phone’s built-in camera or a dedicated scanner app. (Reading a camera feed requires camera permissions and media handling that a generator doesn’t need; the two jobs are separate tools.) If you have a code’s text and want to generate a fresh one, paste it into the Text tab.
Is my Wi-Fi password stored?
No. The Wi-Fi password is typed into the Password field and folded into the WIFI: string entirely in your browser — the privacy note states “Runs locally in your browser. QR data is not uploaded.” Nothing is sent to a server, logged, or persisted; refresh the page and the field is empty. The password exists only long enough to draw the code, then it lives only in the image you download.

Start with this tool
Get started