◆ MONEY & SHARING

A QR code that can’t expire

Make a static QR for a URL, Wi-Fi, a contact card, email, phone or SMS. It points straight at your data — no redirect, no server — so nobody can turn it off later. Free, no signup, nothing uploaded.

This code is static. It points straight at your data with no redirect and no middle-man server. It cannot expire, and we couldn’t disable it if we wanted to. Print it once; it works forever.
What goes in the code
Appearance

The blank border scanners need. 4 is the standard. Don’t go below 2.

Picked from your device — never uploaded. A logo automatically bumps error-correction to High and is size-limited so the code still scans.

Your code ecc M
Fill in the fields and your QR appears here — live, crisp, and permanent.
Why we don’t do “dynamic” QR codes. A dynamic code points at someone else’s server that redirects to your data — which means that server can change the destination, meter your scans, or switch the code off unless you keep paying. That redirect is exactly the lever behind “your QR code has expired” emails. Refusing to build it is the whole point of this tool. Every code here is static: the data is baked into the pattern itself.
How this works & why it’s private

The QR pattern is generated right here in your browser using the open-source qrcode-generator library (Kazuhiko Arase, MIT). Your text, Wi-Fi password, or contact details are encoded directly into the black-and-white modules — there is no link to a server, no account, and nothing is uploaded. That is also why the code can’t expire: there’s no third party in the middle who could ever switch it off.

We draw the modules ourselves into a vector <svg> (for crisp print at any size) and a <canvas> (for PNG export), so colors, margin, dot style and an optional local logo stay fully under your control. When you add a logo we raise error-correction to High so the code still reads with the center partly covered.

Want proof nothing leaves your device? Open your browser’s dev-tools Network tab and watch it while you type — the uploads counter in the top bar stays at 0.