About QRForge

QRForge is a QR code studio that runs entirely in your browser. There is no account, no backend and no network call after the page loads — which means your links, contact details, WiFi passwords and logos never leave your device.

Most generators either give you a plain black-and-white code or put customisation behind a subscription that can expire and take your printed codes with it. Every code here is static: the content lives in the pattern itself, so nothing can ever be revoked.

The rendering engine

The QR pattern is generated by an encoder library, but drawn by our own SVG renderer. That split is deliberate. Encoding is a specification problem that is already solved well; rendering is where the design freedom lives, and the popular styling libraries only expose a fixed set of shapes.

Drawing it ourselves is what makes diamond dots, independent corner-frame and pupil shapes, per-region multi-colour fills and neighbour-aware corner rounding possible — and it means the preview, the SVG download and the rasterised PNG all come from one code path, so they cannot disagree.

Libraries, and why

qrcode
Used purely as the encoder. It handles mode selection, masking and Reed–Solomon correctly, and hands back the raw module matrix — which is what lets us draw the code ourselves instead of being limited to a library’s fixed shape enum.
React 19 + Vite
Fast dev loop, tiny production output, and a build that splits the QR engine and the PDF writer into chunks most sessions never load.
Zustand
The document is one serialisable object, so undo/redo, autosave, JSON export and duplication are all the same operation on the same state. A store with no provider tree and no context re-render cascade suits that exactly.
React Hook Form + Zod
Uncontrolled inputs keep typing cheap in long forms like vCard, while Zod describes what makes a payload scannable in one place shared by the form and the encoder.
Radix UI + Tailwind CSS
Radix supplies the accessible behaviour — focus traps, roving tabindex, dismissal — that is genuinely hard to hand-roll. Tailwind keeps the styling local to the markup it applies to.
Framer Motion
Layout and presence animations that respect prefers-reduced-motion, used sparingly: transitions confirm what changed, they do not decorate.
jsPDF
The only way to write a real PDF client-side. Loaded dynamically, because it is the heaviest dependency in the project and most people never export one.

Trademark

QR Code is a registered trademark of DENSO WAVE Incorporated. This project is independent and not affiliated with, endorsed by, or connected to DENSO WAVE.