QR Code Generator
Turn any link or text into a permanent, static QR code — crisp SVG or high-resolution PNG, no signup, no expiry, entirely on this device.
Tip: include the scheme — https://example.com scans as a link; example.com scans as plain text.
Demo — this code encodes this page's address. Type your own content above to replace it.
41 of 2,331 bytes at level M
Version 3 · 29×29 modules
Press ? for shortcuts
Do it offline:$ qrencode -t SVG -o qr.svg 'https://example.com'
How to use it
- Type or paste the content — a web address, plain text, or a raw payload like a WIFI: network string from the preset buttons. A demo code for this page renders until you do, and every keystroke re-encodes immediately.
- Set error correction: L, M, Q or H. M is the default and suits screens; move up to Q or H for labels that might get scratched or dirty, and down to L only when every byte counts.
- Check the capacity meter and the chips under the preview — bytes used at the current level, plus contrast, inverted-color and quiet-zone warnings worth fixing before anything reaches paper.
- Download the SVG (⌘/Ctrl + S) for print and design work, or a PNG at 512 to 4,096 px for chats, slides and documents; Copy image puts a PNG straight on the clipboard.
- Print the code centered on its own sheet from the Print button, or share a permalink — the link fragment carries your exact content and settings, so mind what it contains.
Paste a link or any text and a scannable code appears as you type, ready to download as crisp SVG or high-resolution PNG. Your QR code contains your content itself. It never expires, never phones home, and keeps working even if this site disappears. Pick an error-correction level, adjust colors and quiet zone, and watch the byte meter fill — encoding runs entirely in this tab.
How it works
A QR code is a grid of black and white modules read in two-module-wide columns, snaking bottom-right to left. Forty symbol sizes — versions — run from 21×21 modules to 177×177, and the encoder here always picks the smallest version your bytes fit. Alongside the data ride Reed–Solomon recovery codewords: level L spares capacity for about 7 percent damage, M about 15, Q about 25 and H about 30 — which is why the byte meter shrinks as the level climbs.
This page only makes static codes: the pattern is your content, encoded module by module. Subscription services sell dynamic codes — the pattern holds a short link on the provider's domain that forwards to your real destination. That redirect is what lets them count scans and change the target after printing, and it is also the only reason a QR code can expire: stop paying, or the provider shuts down, and the short link dies while the printed pattern scans on — to nowhere. A static code has no middleman to lose, so there is nothing here to renew, and no scan statistics either.
The downloadable SVG is the source of truth: the engine walks the module matrix and writes each row's dark runs as rectangles in one vector path, so the file stays small and razor-sharp at any size. PNG downloads rasterize that same SVG onto a canvas in this tab at 512 to 4,096 px — transparency included when the backdrop is transparent — so print shops get vectors and chat apps get pixels from one artifact.
Scanners binarize the camera frame, so everything that helps is about contrast and breathing room: dark modules on a light background at 4:1 or better, and a quiet zone — the empty border, four modules on every side in the ISO layout — that lets the locator patterns stand out. The warning chips fire exactly when one of those rules bends, and Fix colors restores a safe pair without touching your content.
Examples
https://ithomia.exampleVersion 2 · 23 of 2,331 bytes at MA short address is the everyday payload: 23 bytes yield a version 2 symbol, 25 modules per side — scannable from a business card. URL-shaped content also sets the image's alt text to say what the code links to.
WIFI:T:WPA;S:CafeGuest;P:espresso123;;Version 3 · 38 of 2,331 bytes at MPhones that scan the WIFI: scheme offer to join CafeGuest with the printed key. The password never leaves this device; it exists only inside the code itself. Escape ; , : and \ inside real credentials with a backslash, and keep the two closing semicolons.
BEGIN:VCARD
VERSION:4.0
FN:Amelia Ito
N:Ito;Amelia;;;
ORG:Glasshouse Coffee Roasters
TITLE:Wholesale Manager
TEL;TYPE=work,voice:+1-503-555-0114
TEL;TYPE=cell:+1-503-555-0189
EMAIL:amelia.ito@glasshouse-coffee.example
ADR;TYPE=work:;;1200 SE Ankeny St;Portland;OR;97214;USA
URL:https://glasshouse-coffee.example
NOTE:Wholesale inquiries welcome Tuesday through Friday, 9 am to 3 pm Pacific. Ask for the seasonal price list and the roastery tour calendar before your first order.
END:VCARDVersion 17 · 85×85 modules · 500 of 2,331 bytes at M (21% of capacity)
Version 17 is dense — print at ≥3 cm for reliable scanning at this density.A 500-byte contact card uses a fifth of the meter at M yet already needs version 17 — module counts grow fast, and from version 10 the print-size chip appears with the sentence above. Trim optional vCard lines before printing small labels.
1,300 bytes — the letter x repeated (fixture)Too long for a QR code at error-correction H (max ≈1,273 bytes) — shorten the text or lower error correction (L allows ≈2,953 bytes).
Fits at L, M and Q — not at H.The edge case — the refusal arrives before any encoding starts: 1,300 bytes clears level H's ≈1,273-byte ceiling, so the message names the limit and the way out. In the tool the same state shows one-click chips for each level that still fits, and picking one re-encodes on the spot.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Emoji and non-ASCII text ride along as UTF-8
Café menus, Japanese addresses and emoji all encode, and the chip says exactly what happened: Content contains non-ASCII characters, encoded as UTF-8 — modern scanners handle this fine. Each such character costs two to four bytes on the meter, and for emoji inside a web address it is safer to percent-encode the path first — the URL encoder in the related tools does that.
Light-on-dark codes fail on many scanners
Readers expect dark modules on a light field; an inverted pair draws a warning even at perfect contrast, and a gray-on-white pair below 4:1 draws the low-contrast chip with the measured ratio. Fix colors resets to black on white — or swaps an inverted pair — in one undoable click.
The quiet zone is part of the symbol
The four-module empty border is how a scanner finds the code's edges against a busy page. The margin slider goes to zero for tight layouts, but anything under four raises a warning — flyers with artwork butting against the code are a classic scan failure.
Transparent PNGs inherit whatever sits behind them
With a transparent backdrop the PNG keeps real alpha, so the code floats over slides or product shots. Scannability then depends on the host surface: over anything dark or patterned the modules lose their contrast, which is why the transparent option always carries its own caveat chip.
Dense codes need physical size
From version 10 upward (57×57 modules and beyond) each module gets tiny on paper, so the tool pins a chip asking for at least 3 cm of print width. A version 2 sticker scans from a phone at arm's length; a version 30 label the same size will not.
Even version 40 stays razor-sharp
The biggest symbol is 177×177 modules holding 2,953 bytes, and the SVG download draws it as vectors — scale it to a poster and every module keeps hard edges. The PNG presets top out at 4,096 px, which covers a 34 cm print at 300 dpi.
Byte mode is exact, not always minimal
This tool encodes one byte-mode segment, so the meter counts real UTF-8 bytes and every scan returns your content byte-for-byte. A long digits-only payload could pack about 2.4 times tighter in numeric mode, so a specialist encoder may emit a smaller symbol for such input — a trade of density for predictability.
Common errors
Too long for a QR code at error-correction H (max ≈1,273 bytes) — shorten the text or lower error correction (L allows ≈2,953 bytes).- Recovery data crowds out content: at level H roughly two thirds of the symbol's codewords are Reed–Solomon recovery, so capacity falls to ≈1,273 bytes. When the text must stay, the one-click level chips re-encode at the nearest level that fits it.
Too long for a QR code at error-correction L (max ≈2,953 bytes) — shorten the text.- 2,953 bytes is the ceiling of the QR format itself — version 40 at the lowest error correction — not a limit of this page, which is why this variant offers no level to fall back to. Host long content at a URL and encode the URL.
Contrast ratio 3.5:1 is below 4:1 — scanners may struggle; darken the foreground or lighten the background.- This capture is #8a8a8a modules on white — stylish, and right under the threshold cameras binarize reliably. The ratio in the message is the measured WCAG value for your exact pair; nudge either color until the chip clears, or let Fix colors do it.
Light modules on a dark background — many scanners reject inverted codes; swap the colors for reliable scanning.- White-on-black looks striking and decodes fine in theory — the specification even permits reflectance reversal — but plenty of deployed reader apps only try the dark-on-light polarity. Fix colors swaps the pair while keeping both of your choices.
Quiet zone is 2 modules (standard is 4) — some scanners need the full light border.- This capture set the margin slider to 2. The code still renders — tight sticker layouts sometimes demand it — but the finder squares lose their guaranteed white surround, so test a real scan before committing to a production run.
Input is larger than the 16 KB limit for this tool. For scripted generation use the CLI: qrencode -t SVG -o qr.svg 'https://example.com'- Pasting a whole document is nearly always an accident, so input past 16 KB is refused up front rather than failing capacity at all four levels. Mind that no single QR code anywhere holds more than 2,953 bytes — the CLI shares that format ceiling — so for long content, host it at an address and encode the address.
FAQ
Do QR codes expire?
A static code cannot expire — the pattern encodes your content directly, so it works as long as the ink does, with no service behind it to shut down. Codes that die are dynamic: they encode a provider's short redirect link, which stops resolving when the subscription lapses. Everything this page generates is static, which also means the destination cannot be edited after printing — choose a URL you control if you may need to change content later.
Is my text uploaded when the code is generated?
No — the encoder is compiled into this page and runs in your browser tab. You can check rather than trust: keep the DevTools Network panel open while typing, generating and downloading, and no request carries your content anywhere.
Which error-correction level should I choose?
M, the default, suits screens and clean paper. Pick Q or H for stickers, packaging and outdoor use where scratches, dirt or glare will eat modules — H survives about 30 percent damage. Pick L only when content barely fits, and if you plan to place artwork over the center in an editor afterwards, use H and keep the covered area small.
Why won't my QR code scan?
Work through the usual suspects in order: contrast below 4:1, light modules on a dark background, a missing quiet zone, or a dense symbol printed too small — under 3 cm for version 10 and up. The chips under the preview flag the first three as you edit; the print-size chip covers the fourth. Glossy lamination and curved surfaces add glare no setting can fix.
Can I make a WiFi QR code?
Yes — the WiFi preset inserts the raw payload WIFI:T:WPA;S:NetworkName;P:password;; ready to edit. T is the security type (WPA, WEP, or nopass for open networks), S the network name, P the key; backslash-escape any ; , : or \ inside them and end with two semicolons. Phones offer to join the network when scanned.
How much data fits in a QR code?
At the largest size — version 40, 177×177 modules — capacity in byte mode is 2,953 bytes at level L, 2,331 at M, 1,663 at Q and 1,273 at H. Practical codes should stay far smaller: the fuller the symbol, the denser the grid and the fussier the scan, which is why short URLs remain the payload of choice.
Should I download the SVG or a PNG?
SVG for anything printed or designed — it is the exact module grid as vectors, weighs a few kilobytes and never blurs. PNG for tools that want pixels: chats, slides, CMS uploads; the 512 px preset covers screens and 2,048 px upward covers print at a pinch. Both come from the same encode, so they scan identically.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Re-encode the current content and options — useful after editing a pasted payload.
- ⌘/Ctrl + S
- Download qr-code.svg. On this page the shortcut saves the vector code, not the page itself.
- ⌘/Ctrl + C
- Copy the code as a PNG image while focus is in the tool and no text is selected; a real selection copies only itself.
- ⌘/Ctrl + Shift + C
- Copy the PNG even while a text selection exists.
- t
- Cycle the color theme (ignored while typing in the content or color fields).
- ? or ⌘/Ctrl + /
- Open the keyboard shortcut overlay.
- Esc
- Close the topmost dialog — your content and every option stay put.