Make a QR code
The code is generated on this device. What you type is never transmitted.
If you leave off a scheme, https:// is added for you.
Style
Only the style choices above are stored, in this browser's localStorage. Content you type is never stored.
Your code appears here.
Start typing on the left — the preview updates as you go.
Exactly what this code contains
—
This raw string is the entire content of the code. There is no shortener, no redirect, and no hidden layer — scan it with any reader and you get exactly this.
Download
Decode any QR code
Check what a code really contains before you scan it with your phone — including codes made elsewhere. Decoding happens in this browser tab; the image is never uploaded.
Drop a QR image here, paste one from the clipboard, or press Enter to choose a file.
Decoded content
This link uses plain http:// — the connection to it is not encrypted.
The decoder tells you what the code contains, not whether the destination is safe.
Verify this yourself
Don't take this page's word for anything. Each claim here is mechanical and you can check it in about a minute:
- Nothing you type leaves the browser. Open your browser's DevTools, switch to the Network tab, then type a URL and generate a code. No request appears — there is no backend to send anything to.
- It works with the network off. Turn on airplane mode (or DevTools' offline mode) and generate another code. The whole tool keeps working, because everything runs locally.
- Third-party code is blocked at the HTTP layer. In the Network tab, click this page's document request and look at the response headers. The
Content-Security-Policyheader forbids the page from loading scripts from, or connecting to, any other origin — even if the code were later modified to try. - Read what actually runs. Every line of this site's application code is delivered to your browser unminified — use View Source or the DevTools Sources panel to read
app.jsexactly as it executes. There is no hidden code and no server-side code, because there is no server side. - The code is only what you see. The raw payload shown next to the preview is the entire content of the code. Decode it with any third-party reader to confirm.
Common questions
Do QR codes made here expire?
No. Every code made here is static: the content is stored in the pattern itself, not on a server. Once you download it, the code works for as long as it stays legible — there is no account, subscription, or service that could switch it off, including this site going away.
Is it really free? What's the catch?
There is no paid tier, no account, and no usage limit. The download buttons give you full-resolution PNG, JPEG, and SVG with no watermark. The site has no ads and no tracker to monetize you with either — you can verify that in the section above.
Can a QR code track whoever scans it?
A static code cannot. Scan tracking works by routing the scanner through a server someone controls — a shortened or "dynamic" link — which records the visit before redirecting. Codes made here contain exactly the text shown in the payload box, so a scan goes straight to your content without passing through this site or anyone else.
What is the difference between static and dynamic QR codes?
A static code stores your content directly in the pattern. A dynamic code stores a link to a redirect service, which lets the owner change the destination later — and lets the service log every scan, break the code if the subscription lapses, or shut down. This site only makes static codes. The trade-off is real: you cannot edit a static code after printing it, so double-check the content first.
Does the generator work offline?
Yes. After your first visit, the whole site is cached on your device by a service worker, so both the generator and the decoder keep working with no connection at all. That is also easy to check: turn on airplane mode and make a code.
Which download format should I use for print?
SVG. It is a vector format, so it stays sharp at any size, from a business card to a poster. Use PNG for screens and documents. If you add a logo, pick a higher error correction level so the code still scans with part of the pattern covered.