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 →Your QR code from another site stopped working? Here's what likely happened.
It was almost certainly a dynamic code — the redirect behind it got switched off. If you printed it, it's dead and nobody can bring it back. Here's one that can't be:
What happened, in full
A dynamic code doesn't contain your link. It contains a link to the generator's server, which then forwards the scan to your link. That redirect is a service, and it can be switched off — by a trial ending, a plan lapsing, an account closing, or a company shutting down.
When it's switched off, the code doesn't change. It's ink on paper. It just stops going anywhere.
If you printed it
That code is dead, and we can't bring it back. Neither can anyone else. The paper points at a redirect that no longer redirects, and the only party who could turn it back on is the one who turned it off.
There is no fix. There is only a next code.
How to check, in seconds
You can check which kind you have yourself. Read the code — drop the image in, and see the actual text inside it, decoded on your own machine.
- It shows your link → it was static, and something else is wrong (a typo, a dead page, a broken domain). Fixable.
- It shows someone else's domain → it was dynamic. Your scans were being routed through them.
Why dynamic codes exist
A dynamic code needs a server running for as long as the code lives, so it is sold as a subscription — and it produces scan analytics, which is a product too. A static code — the data sitting inside the matrix, pointing straight at your link — needs no server and cannot be switched off. It is not a worse product. It is an unsellable one.
Dynamic codes do serve a purpose
They are a real product with a real use. If you want to change a code's destination after it's printed, or count scans, you need a server, and someone has to be paid to run it. If you knowingly bought that, you bought something honest.
The problem isn't dynamic codes. It's a dynamic code handed to someone who thought they were getting a permanent one — and who then went to a print shop.
GeodeQR codes never expire
GeodeQR makes static codes. Your link is inside the code itself. There is no redirect, no server, no account, and no expiry — because there is no mechanism by which one could exist.
GeodeForge can't revoke your code
If this project disappears tomorrow, every code ever made with it keeps working. Nobody can switch them off. Not us, either. That isn't a promise we're making. It's a thing we can't do.
Before you reprint
- Point it at a URL you control, not a URL someone gave you. A code is only as permanent as the address inside it.
- Test the printed one, not the screen. Print at 100%, scan it with a cheap phone in bad light.
- Check what's inside it before it goes to the printer. Ten seconds now, or a reprint later.
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 →