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.

toolkit.codes/qr-code-generator
Content_Type
Logo (optional)

No logo — the code is plain

Preview
Fill in the fields to generate your code
UTF-8
Ready
100% LOCAL
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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Form input
SSID: GuestNet
Password: s3cret!
Security: WPA/WPA2/WPA3
Encoded payload
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.

Form input
URL: example.com/menu
Encoded payload
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.

Form input
Name: Ada Lovelace
Phone: +1 555 0100
Email: ada@example.com
Organization: Analytical Engines
Encoded payload
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.

Form input
Number: +1 555 0199
Message: RSVP Ada
Encoded payload
sms:+15550199?body=RSVP%20Ada

Error-correction levels at a glance

LevelRecovers up toMax capacity*Choose it when
L~7% damage2,953 bytesThe code lives on a screen, or you need every byte of capacity.
M~15% damage2,331 bytesThe default. Right for menus, flyers, and most print.
Q~25% damage1,663 bytesThe code gets handled, wiped down, or lives outdoors.
H~30% damage1,273 bytesHarsh conditions. Densest grid, smallest capacity.

*Byte-mode maximum at version 40, the largest QR symbol (177×177 modules).

Payload formats cheat sheet

TypeFormatExample
URLhttps://… (scheme added if missing)https://toolkit.codes
Wi-FiWIFI:T:<sec>;S:<ssid>;P:<pass>;;WIFI:T:WPA;S:GuestNet;P:s3cret!;;
Contact (vCard 3.0)BEGIN:VCARD…END:VCARD — what this tool emitsFN:Ada Lovelace + phone, email, org lines
Contact (MECARD)MECARD:N:…;TEL:…;; — compact alternative; fewer fields, so we emit vCard insteadMECARD:N:Lovelace,Ada;TEL:+15550100;;
Emailmailto:<addr>?subject=…&body=…mailto:ada@example.com?subject=Hello
SMSsms:<number>?body=…sms:+15550199?body=RSVP
Phonetel:<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-generator 2.0.4 (MIT) for matrix encoding; all rendering local
Network
None from tool code. A test sweep calls every function this page uses with fetch and XMLHttpRequest replaced 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.