QR Code Generator
Make a QR code, choose its colours, download it as PNG or SVG.
Runs entirely in your browser
Loading the tool…
| Version | — |
|---|---|
| Grid | — |
| Image | — |
| Caption | none |
Type anything at all: a link, a wifi password, a phone number, a block of text. The code updates as you type. Download it as a PNG for the web or an SVG for print, where it stays sharp at any size.
Error correction is the setting worth understanding. A QR code carries redundant data so it still reads when part of it is dirty, creased or covered. Level L survives about 7% damage and makes the smallest code; level H survives about 30% and is what you want for anything printed, or if you plan to drop a logo in the middle. More correction means more modules, so the code gets denser for the same content.
A caption can be printed above or below the code, which is what a poster or a table card usually needs: "Scan for the menu", an address, a stall number. It is drawn into the image itself, so it survives being downloaded and dropped into a layout, and it stays outside the quiet zone where it cannot stop the code scanning. Long captions wrap, and shrink if a single word has nowhere to break.
This generator is not a redirect service. The code contains exactly what you typed, so it works forever and nobody can track its scans or switch where it points later, which is not true of the free generators that hand you a shortened link.
How to use it
- Type or paste the text or URL you want to encode.
- Pick an error-correction level and colours, and add a caption if you want one.
- Download the PNG for screens, or the SVG for print.
Questions
Will this code expire or stop working?
No. The data is inside the code itself, not on a server. Many free generators encode a short link that points at their site, which lets them count scans, show ads or disable the code later, and breaks it entirely if they shut down. This one encodes your text directly.
Which error-correction level should I use?
M is a good default for screens. Use H for anything printed, placed outdoors, or with a logo over the middle. It can lose almost a third of the code and still read. L only if you need the smallest possible code and it will be scanned in good conditions.
Why does my code not scan?
Usually contrast or the quiet zone. Scanners expect dark on light, so an inverted or low-contrast code fails on many phones, and this page warns you. The blank margin around the code matters too: keep the quiet zone at 4 modules unless you have a reason not to.
What resolution do I get?
About 1024 pixels square, whatever the code contains. There is no size to choose, because a larger image is never worse and the file is only around 30 KB. Resize it afterwards if you need something smaller. For anything printed use the SVG instead: it is a vector, a tenth of the size, and stays sharp however large you place it.
PNG or SVG?
PNG for websites, chat and slides. SVG for anything printed: it is a vector, so it scales to a poster without going blocky, so it prints at whatever size you place it. When printing, aim for each module to land at 0.4 mm or more, or phone cameras struggle to resolve the grid.
Can I put text above or below the code?
Yes. Type it in the caption box and choose whether it sits above or below. It is drawn into the PNG and written as real text in the SVG, so it stays crisp in print and can still be selected or restyled in a vector editor. Keep it short: it wraps onto more lines as it grows, and shrinks when a single word is too wide to break.
Will a caption stop the code scanning?
No, as long as it stays outside the code, which is where this puts it. Captions become a problem when they are laid over the modules or crowd the quiet zone, the blank margin a scanner needs to find the code at all. The caption sits in its own band beyond that margin.
Can I make a wifi QR code?
Yes. Encode the text WIFI:S:NetworkName;T:WPA;P:password;; and phones will offer to join the network. Note that anyone who scans it gets the password in plain text.
Your data stays on your device
Everything above runs inside your browser as WebAssembly compiled from Rust. Nothing you type is uploaded, logged or stored on a server. There is no server. You can load this page once, go offline, and it still works.