DEV Community

Cover image for I Built a Free QR Code Generator from Scratch — 24 Types, No Sign-Up, No Expiry
QRKodu.online ⛶
QRKodu.online ⛶

Posted on

I Built a Free QR Code Generator from Scratch — 24 Types, No Sign-Up, No Expiry

Hey Dev.to! 👋
I just shipped a side project I've been working on and wanted to share it with this community: QRKodu.online — a completely free QR code generator with no account required.
Why I Built It
Most QR code tools online either require you to sign up, put generated codes behind a paywall, or make your QR codes expire after 30 days. That's frustrating when all you want to do is share your WiFi password or create a QR for your Instagram profile.
My goal was simple: Open, generate, download. Done.
What It Does
24 different QR code types: URL, WiFi, WhatsApp, TikTok, Instagram, LinkedIn, Telegram, vCard (digital business card), SMS, Email, Location, Boarding Pass, and more
PNG & SVG download — from 128px all the way to 1024px print quality
Transparent background PNG — great for print and design overlays
Custom logo — drop your own logo right in the center of the QR code
Full style customization — QR color, background color, module shape (square, rounded, circle), and corner style
Built-in QR scanner — scan QR codes via camera or by uploading an image
Browser-based history — your previously generated QR codes are saved locally
Bilingual UI — Turkish 🇹🇷 and English 🇬🇧
Tech Stack
Built entirely with vanilla JavaScript + HTML/CSS — no frameworks. QR generation uses the qr-code-styling library. Everything runs client-side, meaning no data is ever sent to a server. Privacy by design.

Tech Stack
Built entirely with vanilla JavaScript + HTML/CSS — no frameworks. QR generation uses the qr-code-styling library. Everything runs client-side, meaning no data is ever sent to a server. Privacy by design.

User data sent to server → Never ✅
QR generation → 100% client-side ✅
Account required → Nope ✅
Cost → Zero ✅
Expiry → None — QR codes work forever ✅
Enter fullscreen mode Exit fullscreen mode

What I Learned
Lazy-loading matters: Loading the QR library with requestIdleCallback significantly improved LCP (Largest Contentful Paint)
24 types → one clean UX: Each QR type needs different form fields — building a dynamic form renderer that stays intuitive was the real challenge
SVG vs PNG tradeoff: Users instinctively want PNG, but SVG is far superior for print. Offering both turned out to be the right call
i18n without a framework: Handling Turkish/English switching with a plain JS object map was surprisingly clean and lightweight

Try It Out
👉 qrkodu.online

I'd love your feedback — what QR type am I missing? What feature would you add? Drop a comment below! 🚀

Built with ❤️ — no ads, no tracking, no sign-up.

Top comments (0)