QR codes that never expire.
Free, no account, nothing leaves your browser — and every style stays inside limits proven against a deliberately bad scanner.
Styling stays inside limits proven against a deliberately weak scanner
This code doesn't need us. It keeps working even if this site disappears.
Other map providers:
Order stickers & labels onlineThat's an affiliate link — if you order, we get a small cut at no cost to you. It's how the site stays free.
Read a code
This code is a link to
No QR code found in that image.
Bulk codes from a spreadsheet
Upload a CSV. Get a ZIP of codes — generated in your browser, free.
Your QR code points exactly where you tell it. Nothing sits between the scan and your link, because there is no server involved at all. That is also why it is free: a static code costs us almost nothing to make, so we do not charge for it, do not watermark it, and do not put anything inside it. Your code stays yours.
We invite you to double-check our work.
Open your browser’s developer tools, switch to the Network tab, and make a code. Nothing leaves your device.
The whole source is on GitHub. Read it, fork it, run it offline.
Found a bug, or a claim that doesn’t hold up? Tell us — an example helps enormously, though we understand if yours is too sensitive to share: qr@geodeforge.com
That’s the difference between a privacy policy and a fact.
This slot pays for the page
One static, labeled sponsor link — an image we host and a plain link. No ad network, no tracking script, no third-party request. That is the entire business model, and it is why nothing above has a price.
Sponsor this slot →See what's actually inside a QR code
A QR code is text in a grid, not a picture of a link. Drop one into Read a code below — decoded on your machine, by our own decoder. The image never leaves your browser.
What you might find
Your own link. Then it's a static code: the address lives inside the image. Nothing can change it or switch it off. This is the good outcome and it's boring, which is the point.
Someone else's domain. Then it's a dynamic code. The image points at their server, which forwards each scan on to your link. Two things follow, and they're facts, not accusations:
- They can see the scans. Every person who scans your code touches their server first.
- They can stop forwarding. If the account lapses, the trial ends, the plan changes, or the company folds, the code doesn't break — it just stops arriving anywhere. If it's printed, that's permanent. See why QR codes stop working.
A shortener you didn't choose. Same shape, same two facts.
Sometimes a dynamic code is exactly what you wanted
If you chose a dynamic code — because you want to change the destination after printing, or you want scan counts — that's a legitimate product and the redirect is the thing you're paying for. Plenty of people need it. We don't offer it, and we're upfront about why: it needs a server running forever and someone moderating what gets redirected.
The reason this page exists is narrower. A lot of people are handed a dynamic code without being told what it is, and find out when the printed one dies. They deserve to be able to look.
Scanning something you didn't make
The same tool works, and here it's a safety check rather than a curiosity. A QR code on a parking meter, a restaurant table, or a letter can point anywhere, and a sticker can be placed over a real one. Reading a code is not the same as scanning it — this shows you the destination without going there.
If the text looks nothing like the business it's attached to, you've learned what you needed to know — walk away and pay another way.
How it works, since you shouldn't take our word for it
The decoder is ours — written from the specification, no libraries, no dependencies, and no BarcodeDetector API (that only exists on some platforms, so a reader built on it is invisible on most desktops). It refuses to guess: a Reed–Solomon correction that doesn't re-verify is reported as a failure, not as a result.
Validated at 56/56 against codes from independent generators, 500/500 on corruption round-trips. The record is in the repo, including the four real bugs that only an independent decoder could find.
Read the source. Clone it, disconnect your Wi-Fi, open index.html. It still works.
More from GeodeForge
GeodeForge is a one-person studio that crafts open-source tools that do what they say, and let you check — in your browser.
Check at geodeforge.com →