QR Code Generator_
Point a phone camera at a QR code and it opens a link, joins a Wi-Fi network, or saves a contact — this generator makes those codes. Pick a content type, type your details, and watch the code build itself; then download it as a PNG for documents or an SVG for print.
Everything happens in your browser. The links, passwords, and contact details you enter are encoded on this page and never sent anywhere — which is rarer among QR tools than it should be.
No logo — the code is plain
- Input
- A URL, plain text, Wi-Fi credentials, a vCard contact, an email, an SMS or a phone number — plus an optional logo image (PNG, JPEG, SVG or WebP, up to 5 MB).
- Output
- A PNG between 256 and 2048 px, or a self-contained SVG that scales to any print size. The encoded payload is copyable as text.
- Processing
- Encoded in this tab and drawn to a canvas. The image is never uploaded, and neither is the logo you overlay.
- Limits
- Up to 2,953 bytes at error-correction level L. A logo covers at most 12% of the symbol. One code at a time — there is no bulk mode.
- Static only
- These codes point straight at your content, so they never expire and cannot be edited, tracked or switched off later. Dynamic codes are a different product and this is not one.
What a QR code generator actually encodes
Modules, versions, and why codes get denser
A QR code is a grid of black and white squares called modules. The smallest symbol, version 1, is 21×21 modules; every version adds four per side up to version 40 at 177×177. The generator picks the smallest version your content fits in — the “Version 3 · 29×29 · 42 bytes” line under the preview. Shorter content means a sparser grid, and sparser grids scan from farther away, which is why a trimmed URL beats a long one on a poster.
Reed–Solomon error correction
Alongside your data, every code carries Reed–Solomon parity blocks — the same math that let scratched CDs keep playing. That redundancy is what the L/M/Q/H levels tune: at H, roughly 30% of the codewords can be lost and the payload still reads. The price is density, because parity occupies modules that would otherwise hold data. The capacity table above is that trade-off in numbers.
Static codes, dynamic codes, and which one this makes
Every code from this page is static: the content is written into the pattern itself. There is no account, no redirect service, and no server between the scan and the destination — nothing that can lapse, be paywalled, or go dark after a trial. Plenty of tools advertise as a free QR code generator and then route your “free” code through their servers, where it stops working the day the trial does. The flip side: a printed code cannot be edited. If the URL or Wi-Fi password changes, you regenerate and reprint.
The code points at your content, not at us
Most online QR code generator websites render server-side, which means your input rides in a request — for a Wi-Fi code, that is your network password in someone’s access logs. Here the encoding runs as JavaScript on this page, including the logo compositing: nothing uploaded, nothing logged, and the page keeps working offline once loaded. That also makes this tab a fine batch workstation — change a field, download, repeat.
Encode your content, size it, and download
- 01Pick the content type. It decides the payload format from the cheat sheet above — a Wi-Fi code is not a URL in disguise, it is a structured string your phone’s camera knows how to act on.
- 02Fill in the fields. The preview regenerates as you type, and the line above it reports the version, module count, and encoded bytes — watch it climb as your content grows.
- 03Set error correction for where the code will live: M for most print, Q or H for codes that get handled or weathered, L only when capacity is tight. Adding a logo takes this decision away and locks it to H, which is the only level that survives an overlay.
- 04Leave the margin at 4 modules and the colors dark-on-light unless you have a reason — a pair too faint to decode is refused outright, not warned about.
- 05Read the encoded payload under the preview — that exact string is what a scanner acts on, and where a typo or an added https:// becomes visible.
- 06Download PNG (up to 2048 px) or SVG (vector, scales forever).
Four things people actually make with this
Guest Wi-Fi card
A café or rental prints one card; guests scan instead of typing a password with symbols in it.
SSID: GuestNet Password: s3cret! Security: WPA/WPA2/WPA3
WIFI:T:WPA;S:GuestNet;P:s3cret!;;
Table-sticker menu link
A short URL keeps the code sparse (version 2–3), which scans fast even as a 2 cm sticker. Error correction Q survives daily wipe-downs.
URL: example.com/menu
https://example.com/menu
A business-card QR code that adds a contact
One scan saves the whole contact — no typos, no “I’ll add you later”. vCard imports natively on iOS and Android.
Name: Ada Lovelace Phone: +1 555 0100 Email: ada@example.com Organization: Analytical Engines
BEGIN:VCARD VERSION:3.0 FN:Ada Lovelace N:Lovelace;Ada;;; ORG:Analytical Engines TEL;TYPE=CELL:+1 555 0100 EMAIL:ada@example.com END:VCARD
SMS opt-in poster
Scanning opens the messaging app with number and text prefilled — the person just hits send.
Number: +1 555 0199 Message: RSVP Ada
sms:+15550199?body=RSVP%20Ada
Error-correction levels at a glance
| Level | Recovers up to | Max capacity* | Choose it when |
|---|---|---|---|
| L | ~7% damage | 2,953 bytes | The code lives on a screen, or you need every byte of capacity. |
| M | ~15% damage | 2,331 bytes | The default. Right for menus, flyers, and most print. |
| Q | ~25% damage | 1,663 bytes | The code gets handled, wiped down, or lives outdoors. |
| H | ~30% damage | 1,273 bytes | Harsh conditions. Densest grid, smallest capacity. |
*Byte-mode maximum at version 40, the largest QR symbol (177×177 modules).
Payload formats cheat sheet
| Type | Format | Example |
|---|---|---|
| URL | https://… (scheme added if missing) | https://toolkit.codes |
| Wi-Fi | WIFI:T:<sec>;S:<ssid>;P:<pass>;; | WIFI:T:WPA;S:GuestNet;P:s3cret!;; |
| Contact (vCard 3.0) | BEGIN:VCARD…END:VCARD — what this tool emits | FN:Ada Lovelace + phone, email, org lines |
| Contact (MECARD) | MECARD:N:…;TEL:…;; — compact alternative; fewer fields, so we emit vCard instead | MECARD:N:Lovelace,Ada;TEL:+15550100;; |
mailto:<addr>?subject=…&body=… | mailto:ada@example.com?subject=Hello | |
| SMS | sms:<number>?body=… | sms:+15550199?body=RSVP |
| Phone | tel:<number> | tel:+15551234567 |
Special characters in Wi-Fi names and passwords (; , : \ ") are escaped automatically — paste them as-is.
Printing a code that still scans
- Size rule of thumb: scanning distance ÷ 10 = minimum width. A code read from 1 m away should be at least 10 cm wide.
- Test the printed code with more than one phone before a print run — camera apps differ, especially on colored or dense codes.
- Prefer SVG for anything going to a print shop; it scales without the soft edges a stretched PNG gets.
- Shorten URLs before encoding. Every byte you trim can drop the version, and sparser codes scan faster and farther.
- Adding tracking parameters? Percent-encode the values first with the URL encoder so ampersands and spaces survive.
- Printing posters for several locations? Put a distinct ID from the UUID generator in each URL and analytics will tell you which location gets scanned.
- Keep error correction at M unless the code will be abused — jumping to H on a long URL can push the code two versions denser.
- With a logo, start at Medium rather than Maximum: every size decodes, but a smaller overlay leaves more reserve for real-world damage on top.
- Re-download rather than screenshot: a screenshot resamples the modules and bakes in whatever background sat behind the preview.
- A dense code needs a big PNG: at 256 px a version-40 code gets one pixel per module. The warning names a size that clears it.
Where QR codes fail in the field
A shaved quiet zone kills scans
Scanners locate the code by the white border around it — the full 4-module margin. Designers love trimming it to fit a layout; phones respond by not seeing a code at all. If you lower the margin control, the warning stays up for a reason.
Low contrast and inverted colors
Brand-colored codes fail quietly. Decoding real output here puts the cliff between 3.54:1 and 3.61:1, so anything under 4:1 is refused, not warned about. A light code on a dark background still gets a warning.
Capacity overflow near the limit
A QR code holds at most 2,953 bytes, and only 1,273 at level H. Long vCards and query-string-heavy URLs hit the ceiling faster than you expect; the error names the exact byte counts so you know how much to trim, or you can drop the error-correction level.
Adding a logo without breaking the code — 30% is not an area
An overlay is deliberate damage: it spends the Reed–Solomon reserve that scratches and glare need. The quoted “a logo can cover 30%” is codeword capacity at level H, not a fraction of the picture. Decoding real output here put the ceiling at 12% of the area: version 3 fails at 13%, version 18 at 14%. Hence the size cap and the forced H.
Tiny prints and shiny surfaces
Below about 2×2 cm module edges blur together at normal scanning distance, and lamination or glossy stock adds glare that reads as damage. Print a test at final size on the final material before committing a run.
Encoder, capacity and output formats
- File handling
- Uploads are read inside the page with the browser File API and are never transmitted; Download writes out what is already in the tab.
- Standard
- ISO/IEC 18004 (QR Code model 2), symbol versions 1–40, auto-fit to smallest
- Text encoding
- Byte mode, UTF-8 — accents and emoji encode correctly
- Error correction
- Reed–Solomon, levels L / M / Q / H (~7 / 15 / 25 / 30% recovery)
- Capacity
- Up to 2,953 bytes (level L, version 40); per-level limits in the table above
- Output
- PNG 256–2048 px (canvas-rendered, pixel-snapped) · SVG (vector,
crispEdges, intrinsic width/height, self-contained) - Logo overlay
- PNG, JPEG, SVG or WebP up to 5 MB, EXIF honoured, rasterised in-page and embedded as a data URI so the SVG stays one file. Area capped at 12% (35% of width), error correction forced to H — both verified by decoding every combination
- Payloads
https:·WIFI:· vCard 3.0 ·mailto:·sms:·tel:- Engine
qrcode-generator2.0.4 (MIT) for matrix encoding; all rendering local- Network
- None from tool code. A test sweep calls every function this page uses with
fetchandXMLHttpRequestreplaced by stubs that throw, so a stray request fails the build instead of shipping. Disconnect from the network and the page still works.
Questions about making and printing QR codes
Do QR codes from this generator expire?
No — and they can’t. The content is encoded into the pattern itself, with no redirect server involved, so there is nothing to expire or deactivate. Codes that “expire” are dynamic codes: paid redirect services whose short URL dies with the subscription.
Is this QR code generator actually free?
Yes, with nothing behind it: no account, no watermark, no scan limit, no trial that converts your codes to a paid plan. The tool runs entirely in your browser, so serving it costs almost nothing — that’s the whole business model.
Is it safe to put a Wi-Fi password in a QR code?
Generating it here is safe: the password never leaves your browser. The printed code is the thing to think about — anyone who can scan it can join the network, so treat the card like the password written on paper.
Why won’t my QR code scan?
In practice: the quiet zone got cropped, contrast is too low or inverted, the print is too small for the scanning distance, or the code is dense. The warnings under the preview catch the first two before you print.
Can I use the codes commercially?
Yes. The codes you generate are yours, for any use including commercial print runs. “QR Code” is a registered trademark of DENSO WAVE, which applies to the term, not to your codes.
Should I download PNG or SVG?
SVG for print shops, logos, and anything that might be resized — it is vector and stays crisp at any size. PNG for documents, slides, and web use; pick 1024 or 2048 px if it might be blown up later.
Can I add a logo to the middle?
Yes. Choose an image and it is composited into the centre of both the PNG and the SVG, never uploaded. Error correction locks to H, the size choices stop at the largest area verified to decode, and an optional margin keeps the logo off the modules. Every offered combination is decoded in the test suite, so the tool cannot hand you a code it has not read back.
How much data fits in one code?
Up to 2,953 bytes at level L — several paragraphs. But usable is smaller than possible: past a few hundred bytes the grid gets dense enough that small prints struggle, so for long content encode a short URL instead.