QR Code Generator
Generate a QR code from any text or URL and download it as SVG or PNG. Encoded entirely in your browser — the data never reaches a server, unlike most QR sites.
Text or URL
21 bytesQR code
version 2 · 25×25How it encoded
Version
2 of 40
25×25 modules
Mode
byte
UTF-8, 8 bits per byte
Capacity used
100%
28 of 28 codewords
Mask
1
chosen by penalty score
Byte — UTF-8, 8 bits per byte. At level M the maximum is 2,331 bytes; a lower level holds more, and survives less damage.
Encoded entirely in your browser — the text never reaches a server, which is not true of most QR sites, and matters if you are encoding a Wi-Fi password, a payment link or anything internal. See also the URL Encoder and the Base64 Encoder.
About the QR Code Generator
This QR code generator encodes text or a URL entirely in your browser and gives you the result as SVG or PNG. Nothing is transmitted — and that is the difference worth caring about, because almost every other free QR site POSTs your payload to a server, and QR codes routinely carry Wi-Fi passwords, payment links, internal URLs and one-time credentials.
It is a real implementation of ISO/IEC 18004 rather than a wrapper around a hosted image API: mode selection, version selection, Reed–Solomon error correction over GF(256), block interleaving, all eight mask patterns scored by the standard's penalty rules, and BCH-encoded format and version information. All 40 versions and all four error correction levels are supported.
The encoder picks the narrowest mode your text fits into. Twenty digits cost 70 bits in numeric mode and 160 in byte mode, which is the difference between a version 1 and a version 2 symbol — a visibly smaller, more scannable code for the same data.
SVG is the default output because a QR code is a grid of squares and should be a vector: it stays sharp at any size, prints correctly, and is a fraction of the file size of a PNG. The PNG export exists for the places that will not take an SVG.
Beware of one thing no generator can help with: a QR code is not a link you can revoke. Once it is printed on something, the URL inside it is fixed. Point it at a redirect you control if there is any chance the destination will change.
- Fully client-side — the payload never leaves your browser
- All 40 versions and all four error correction levels
- Automatic mode selection: numeric, alphanumeric or UTF-8 byte
- SVG and PNG download, plus copy the SVG markup directly
- Adjustable module size, quiet zone and colours
- Mask chosen automatically by the standard's penalty scoring, and reported
- Reports version, mode, mask and how much of the symbol's capacity you used
How to use it
- Type or paste the text or URL. The code updates as you type.
- Leave error correction at M unless you have a reason to change it. L holds more data; H survives more damage.
- Raise the module size for print. For a code that will be scanned from a distance, bigger modules matter more than a bigger image.
- Keep the quiet zone at 4. It is not decoration — scanners use it to find the symbol, and codes fail without it more often than for any other reason.
- If you change the colours, keep the dark colour genuinely dark and the light one genuinely light. Scanners threshold on contrast, not hue.
- Download as SVG for anything you control the rendering of, PNG for anything that will not accept a vector.
Real-world use cases
Backend & platform engineers
Generate the QR code for a TOTP enrollment step — an otpauth:// URI — while building or testing a 2FA onboarding flow, without pasting a real secret into a third-party site that logs what it's shown.
Mobile app developers & QA
Turn a deep link, an Expo or dev-build URL, or a staging build's install link into a code you scan straight onto a physical test device — faster and less error-prone than typing a long URL on a phone keyboard.
Internal tooling & IT
Generate a Wi-Fi credential code (the WIFI:T:WPA;S:...;P:...;; format) for an onboarding doc or office setup guide — and do it on a page that doesn't send the network password anywhere.
Technical writers & solutions engineers
Embed a QR code in a generated PDF or report by pulling in the SVG output directly — it stays crisp at whatever size the document places it, unlike a PNG pasted in at the wrong resolution.
Security engineers
Build QR payloads for testing how an app or scanner handles unusual input — oversized strings, unexpected schemes, non-Latin text — entirely offline, without a hosted generator retaining a copy of what was generated.
Examples
A URL
https://genkitlab.com
Version 2, byte mode, 21 bytes used of 34
URLs are byte mode because they contain lowercase letters, which the alphanumeric set does not include.
The same URL in uppercase
HTTPS://GENKITLAB.COM
Alphanumeric mode — the same 21 characters in fewer bits
The alphanumeric set is uppercase only. Hostnames are case-insensitive, so uppercasing a URL makes the code smaller and still works.
Digits only
01234567890123456789
Numeric mode, 70 bits rather than 160
Numeric mode packs three digits into ten bits. For long numeric payloads it roughly halves the symbol size.
Wi-Fi credentials
WIFI:T:WPA;S:MyNetwork;P:hunter2;;
A code that joins the network when scanned
This is the standard Wi-Fi format. It is also a good reason to use a generator that does not upload the payload — the password is in the string.
Common errors
| Message | Cause | Fix |
|---|---|---|
| Too long for a QR code at error correction H | Even version 40 has a limit, and it falls sharply as error correction rises — 1,273 bytes at H against 2,953 at L. | Lower the correction level, or shorten the payload. A long URL behind a short redirect is almost always the better answer. |
| The code will not scan | Most often no quiet zone, or too little contrast. Scanners locate the symbol by its surrounding blank margin. | Keep the quiet zone at 4 modules and the colours near-black on near-white. Inverted codes — light on dark — fail on many scanners. |
| It scans on a phone but not from a printed sheet | The printed modules are too small, or the printer has blurred the edges. | Use the SVG and size it so each module is at least 0.4 mm. A rasterised PNG scaled up is the usual cause of blurred edges. |
| A logo in the middle broke it | Covering modules relies on error correction absorbing the loss, and there is a limit. | Use level H, and cover no more than about 25% of the area, centred. Test the printed result with more than one scanner app — they differ. |
| Non-Latin text does not scan correctly | Byte mode is nominally ISO-8859-1 in the standard; this encoder emits UTF-8, which every modern scanner reads. | It works in practice on current scanners. Very old hardware scanners may not decode it, and there is no encoding that satisfies both. |
Frequently asked questions
›Is my data uploaded to generate the code?
No. The entire encoder — mode selection, Reed–Solomon, masking, rendering — runs in your browser, and no network request is made. This is the main reason to use this page rather than a general-purpose QR site: those almost all POST your payload to a server, and QR codes frequently carry Wi-Fi passwords, payment links and internal URLs.
›Which error correction level should I use?
M for most things — it recovers about 15% damage at a modest cost in size. L if the payload is long and the code will be on a screen. Q or H if it will be printed on something that gets handled, or if you are placing a logo over the middle.
›Does a higher error correction level make the code bigger?
For the same data, yes — the parity codewords take space, so the encoder may need a higher version. That is the trade: H holds roughly 43% of what L holds at the same version, and survives roughly twice the damage.
›Why does the quiet zone matter so much?
Scanners find the symbol by looking for the finder patterns surrounded by blank space. Without the margin, a busy background can be read as part of the code. Four modules is the standard's requirement and the single most common reason a code that looks correct will not scan.
›Can I put a logo in the middle?
Yes, within limits, and the tool does not do it for you. Use level H, keep the covered area under about 25%, and keep it centred — the finder patterns in the corners and the timing rows must stay clear. Always test the printed result.
›SVG or PNG?
SVG, for anything you control. A QR code is a grid of squares, so it vectorises perfectly, scales without blurring, prints at the printer's own resolution, and is far smaller as a file. PNG is there for tools that will not accept a vector.
›Can I track scans, or change where the code points later?
Not with a plain QR code — the URL is encoded in the modules, so a printed code is permanent. Encode a short redirect URL you control and change the destination behind it. That also gives you scan counts, which the code itself cannot provide.
›Can I generate a Wi-Fi or 2FA/TOTP QR code with this?
Yes — the encoder just encodes whatever text you give it, so anything that follows a standard's own string format works: WIFI:T:WPA;S:MyNetwork;P:hunter2;; for a network, or an otpauth://totp/... URI for a 2FA secret. Neither is a special mode; they're both ordinary text payloads, which is also why this page never sees or stores the secret you're encoding.
Last updated