About
A QR code generator that gets out of the way
No account wall, no watermark on the free tier, no expiry timer quietly attached to codes you already printed.
Why we built this
There is no shortage of QR code generators. Most of them work fine. What frustrated us was a narrower problem: almost none of them tell you when the code you just designed is not going to scan.
You pick a nice colour, add your logo, download a PNG, send it to a printer, and find out weeks later — from a customer, or from nobody at all, because people who cannot scan a code simply walk away. The tool that produced it never mentioned that the gradient was too pale or that the corner shapes you chose break the pattern a scanner uses to find the code in the first place.
We wanted a generator that says so at the moment you make the choice. That turned out to require actually measuring which designs survive, which is where most of the work on this project has gone.
What this is
A study rebuild of a classic QR code generator, written with React Router, Tailwind CSS and shadcn/ui components on Radix primitives. The codes themselves are rendered by qr-code-styling, which handles module shapes, gradients, corner styling and logo placement.
How it works
Pick a content type and the form fields change to match it. Whatever you type is encoded into the exact string format that content type requires — a mailto: URI, a WIFI: string, a vCard, an iCalendar event — and that string is what gets drawn into the pattern.
Everything happens in your browser. The generator page makes no network request while you work, and the logo you upload is read locally and embedded into the SVG on your machine.
What it deliberately does not do
- It does not create dynamic codes, because doing so honestly requires running a redirect service forever. Read the comparison for the trade-off.
- It does not track scans. A static code never touches our servers when scanned.
- It does not store your codes. Nothing to leak, nothing to delete.
What you can do here
- Generate 19 different kinds of QR code — links, Wi-Fi, contact cards, calendar events, payments and more — with the correct payload format for each.
- Style them properly: module shapes, corner shapes, colours, gradients and a centre logo, with live warnings when a choice will break the code.
- Export as vector SVG or PDF for print, or PNG, JPG and WEBP for screens.
- Generate programmatically through a free HTTP API with no key and no account.
- Read 25 guides covering why codes fail, how far the design can be pushed, and which type to use for a given job.
How the generator works
Everything happens in your browser. When you pick a content type, the form changes to match it, and whatever you type is encoded into the exact string that type requires — a mailto: URI, a WIFI: string, a vCard, an iCalendar event. That string is what gets drawn into the pattern.
The drawing itself is handled by qr-code-styling, which gives us module shapes, corner styling, gradients and logo placement. We wrap it with the parts that stop you shipping a broken code: a live contrast meter, a corner-shape compatibility check based on our own decode testing, and automatic error-correction escalation when you add a logo.
How we check our own work
We decode what we generate. Every design preset is rendered, rasterised at six different resolutions and decoded with an independent decoder. Every one of the 19 content types is encoded, rendered, decoded back to text and compared byte-for-byte against what it should be.
This is not decoration. Three of our presets failed that test the first time we ran it, and five corner shape combinations turned out to be completely unreadable. Both findings changed the product. You can read the full method on the editorial page.
How it stays free
The generator costs us almost nothing to run, because it does almost nothing on a server. Your browser does the work. What we pay for is hosting the pages themselves, which display advertising may cover.
There is no paid tier, no feature held back, and no plan to introduce one. If that ever changes, it will not retroactively affect codes you have already made — they are static files that do not depend on us continuing to exist.
Who we are
Upgfrog is an independent project. We are not a marketing platform with a QR feature bolted on, and we are not funded by anyone whose interests would conflict with telling you that a paid dynamic-code service is sometimes the right answer.
Articles are attributed to the team that builds and maintains the generator rather than to an invented author with a stock photograph. There is a fuller account of who writes what, and how each claim was tested, on our editorial page — including a section on what our testing cannot tell you, which is the part most sites leave out.
Our promises
- Always free. Every content type, every design option and every export format. No paid tier, no feature held back, no watermark.
- Your content stays yours. It is encoded in your browser and never reaches us. We could not sell it, leak it or analyse it if we wanted to.
- No expiry. Static codes do not depend on us continuing to exist.
- We show our working. Where we claim a design scans, we say how we tested it and how many attempts succeeded.
- We correct things in public. Three of our own presets failed our own tests during development. We fixed them and wrote about it.
Get in touch
Corrections are genuinely welcome, particularly if you have a code that behaves differently on your hardware than our published testing predicts — that is exactly the data we cannot generate ourselves. Reach us through the contact page.
Attribution
QR Code is a registered trademark of DENSO WAVE INCORPORATED. This project is an independent implementation and is not affiliated with DENSO WAVE, nor with the qrcode-monkey.com service whose page structure inspired this build.