ReadoutKit

QR code generator

Make a QR code for a link, Wi-Fi network, email or phone number. No tracking redirect, no expiry.

Runs entirely in your browser. Nothing you enter is uploaded.

Written and maintained by ReadoutKit / Takashi Yamazaki

How this works

What a QR code actually is

A QR code is not a link. It is a container for a short string of text, and everything a phone does when it scans one is a response to the format of that string. The tool shows you the exact string it encoded, under the code, so nothing about the result is a mystery.

What you wantWhat goes in the code
Open a web pagehttps://example.com
Join a Wi-Fi networkWIFI:T:WPA;S:name;P:password;;
Start an emailmailto:a@example.com?subject=…
Dial a numbertel:+81312345678

A URL without its scheme is the most common mistake. example.com is plain text as far as the code is concerned; some scanners guess it is a link and some just show it as words. This tool adds https:// when you leave it off.

Error correction, and what it costs

QR codes carry redundant data so they survive damage. Four levels are defined, and every step up buys resilience with capacity. Measured with the same encoder this tool uses, on a version 10 code:

LevelRecovers up toCharacters that fit(v10)
L7%271
M15%213
Q25%151
H30%119

Going from L to H more than halves what the same size of code can hold — 271 characters down to 119. As a rule: L for screens and long content, M as the sensible default, Q for packaging and anything handled, H for outdoor use or when a logo covers the centre.

The redundancy is what makes a logo in the middle possible: you are deliberately damaging the code and the error correction repairs the read. Level H tolerates roughly a third being obscured, but the damage must be spread out or central — covering one of the three corner squares breaks it at any level, because those are the position markers a scanner uses to find the code at all.

What your content does to the grid

The other half of the trade is the one people notice too late, at the printer. Longer content and higher error correction both add modules, and modules are what make the grid finer. Each cell below is the side length of the resulting code in modules.

ContentCharactersLMQH
A bare domain2225²25²29²29²
A URL with UTM parameters10437²41²49²57²
Wi-Fi credentials5329²33²37²41²
300 characters of text30061²69²81²89²

A bare domain at level M is a 25 × 25 grid. Add campaign tracking parameters to that same URL and it becomes 41 × 41, and at level H it reaches 57 × 57 — more than five times as many cells as the short URL at level L. Printed at the same physical width, each cell is a fifth of the size, and the code that scanned from across the room now needs to be held at arm's length.

This is why shortening the link is the single most effective thing you can do for a printed code. Dropping utm_* parameters, or using a short path on your own domain, often buys back more scanning distance than any amount of care with size and contrast.

How much fits at all

Version is the QR standard's word for size: version 1 is a 21 × 21 grid, and each step adds four modules per side, up to version 40 at 177 × 177. The encoder picks the smallest version your content fits into.

VersionModulesLMQH
121 × 211714117
433 × 3378624634
1057 × 57271213151119
2097 × 97858666482382
40177 × 1772,9532,3311,6631,273

The theoretical ceiling — 2,953 characters at version 40, level L — is not a practical target. A 177 × 177 grid printed on a business card gives cells of about a third of a millimetre, below what most phone cameras resolve. If your content approaches even the version 20 row, encode a link to it rather than the content itself.

Making one that actually scans

  • Keep the quiet zone. The blank margin around the code is part of the specification, not decoration. Scanners need it to find the edges. Four modules is the standard; two is usually survivable; zero often fails.
  • Keep the contrast high and the polarity right. Dark code on a light background. Inverted codes fail on many scanners, and a pale code on white fails on all of them.
  • Shorten the content, for the reason the table above makes concrete.
  • Test before you print. Scan it with more than one phone, at the distance and lighting people will actually use.

A note on tracking redirects

Many free generators encode a link to their own domain, which redirects to yours. That gives them scan analytics and gives you a dependency: your printed material now relies on a third party staying in business and not putting the feature behind a subscription. Codes generated this way have stopped working for entire print runs.

This tool encodes your content directly. There is no redirect, no account, and nothing to expire. The trade-off is that you get no scan statistics — if you need those, use a link you control and add your own analytics to the destination page.

Common questions

Which error correction level should I choose?
M unless you have a reason. L is for screens and long content, Q for packaging and anything handled, H for outdoors or when a logo covers the middle. The reason not to default to H is capacity: on a version 10 code, L holds 271 characters and H holds 119, and the same content encoded at H produces a denser grid — a tracked URL goes from 37 × 37 modules at L to 57 × 57 at H, which means much smaller cells at the same printed width.
How much text can a QR code hold?
Up to 2,953 characters in byte mode, at the largest version and the lowest error correction. That ceiling is not useful in practice: version 40 is a 177 × 177 grid, so on a business card each cell is about a third of a millimetre and most phone cameras cannot resolve it. Anything past a few hundred characters should be a link to the content rather than the content itself.
Why does my QR code look so dense?
Almost always the URL. Measured with this tool: a bare domain is a 25 × 25 grid, while the same URL with utm_source, utm_medium and utm_campaign appended is 41 × 41 at the same error correction level. Printed at the same size, that is a much finer grid and a much shorter scanning distance. Dropping the tracking parameters, or using a short path on your own domain, usually helps more than making the code bigger.
Will this code stop working after a while?
No. The code contains your content directly, so there is nothing that can expire, be rate-limited, or be switched off. Many free generators produce a code pointing at their own short link, which lets them count scans — and means your printed poster stops working the day that service shuts down or starts charging.
Which error correction level should I pick?
M for anything on a screen or a clean printed page. Q or H when the code will be on packaging, outdoors, or somewhere it may get scuffed, or when you plan to place a logo in the middle. Higher levels make the code denser, so they need more physical space.
How small can I print it?
A common rule is that the code should be at least a tenth of the scanning distance: readable from one metre means at least 10 cm across. For a business card at close range, 2 cm is usually workable. Always test with an actual phone before printing a thousand of them.
Why does the Wi-Fi code need a specific format?
Phones recognise a structured string beginning with WIFI: and offer to join the network. If the SSID or password contains a semicolon, colon, comma, backslash or quotation mark, those characters must be escaped or the phone will parse the string wrongly. This tool escapes them for you — a detail many generators get wrong.
Should I use SVG or PNG?
SVG for anything going to print. It is vector, so it stays perfectly sharp at any size, which matters because a blurry QR code fails to scan. PNG when you need a bitmap for a system that will not take SVG — pick the largest size offered and let it be scaled down.

Sources

The formulas and rates used by this tool come from the documents below. Rules change; when a figure here disagrees with the source, the source is right.

Figures checked against the sources below on September 1, 2026.

Other tools