QR code tools

Three codes people actually need: a link, a Wi-Fi network, and a contact card. Each is encoded in the page you are on, so the pattern carries your data directly rather than a redirect through our domain — which is why nothing here expires, needs an account, or stops working if this site does.

3 tools

  • QR code generatorSomebody who needs a QR code for a link — a poster, a menu, a slide, a parcel label — and wants it now, without an account, and without it becoming a dead redirect through somebody else’s domain in six months.
  • Wi-Fi QR code generatorSomebody who is tired of reading a twenty-character password aloud — a café owner, an office manager, a host with guests — and wants a card on the wall that a phone can simply scan.
  • vCard QR code generatorSomebody laying out a business card, a conference badge or an email signature, who wants a scan to open a filled-in contact card rather than a website.

What never expiring actually means

Most free QR generators hand you a code pointing at their own domain, which redirects to yours. That buys them scan statistics and you an editable destination, and it is a real service — but it makes your printed poster depend on a third party staying solvent, staying paid, and not adding an interstitial.

The codes here contain your data in the modules themselves. There is no server in the path and nothing to lapse. The honest trade-off: no analytics, and no changing the destination after printing. If you need either, use a redirect service on purpose rather than acquiring one by accident.

Three pages because three different people arrive

Somebody putting a link on a poster, somebody taping a card to a café wall and somebody laying out a business card have almost nothing to say to each other. They search differently and they get stuck differently — on error-correction levels, on a password containing a semicolon, on which vCard version an Android phone will read.

So each gets a page with its own failure modes explained, rather than one page with a dropdown and three explanations fighting for room. They share the encoder underneath; what differs is the payload and the advice.

The encoder is not ours, and that is deliberate

Every other tool in this expansion is hand-written, because the algorithm was small enough to read and test. A QR encoder is not: Reed–Solomon correction over GF(256), eight candidate masks scored against four penalty rules, four encoding modes, forty version geometries. Getting any of it subtly wrong produces a picture that looks exactly like a QR code and that no scanner reads.

So these pages use Kazuhiko Arase’s implementation, published in 2009, MIT-licensed, with no dependencies of its own — the code most other JavaScript QR libraries are ports of. It is recorded in the licence register like everything else, and it loads only on the pages that draw a code.

Nothing you type into a QR page is uploaded

The encoding runs in your tab. A Wi-Fi password, a phone number, an unlaunched campaign URL — none of it is sent anywhere, and the network panel is how to check that rather than take our word.

It matters more in this family than in most. Two of these three pages take input that is a live credential or somebody’s personal data, and a generator that renders the image on a server has received all of it in plain text and holds it in a request log.

The white border is required, not styling

Every code here is drawn inside a four-module white margin, the quiet zone, because the specification requires it: a decoder locates the symbol by finding its three corner squares against clear background.

It is the most common reason a printed code fails while the same code worked on screen — a designer crops to the black edge or drops it onto a coloured panel. There is no option to remove it, because that would be an option to produce something broken.

PNG for screens, SVG for print

Every code downloads as either. The SVG is vector, a few kilobytes, and scales to any size without softening, which is what a print shop wants. The PNG is 1024 pixels, which is more than most uses need and compresses to almost nothing because the image is two colours and hard edges.

The reason both exist is that half the places a QR code goes will not accept an SVG — a slide, a chat message, a word processor. If it is going to a printer and you have the choice, take the SVG.

Reading codes is not here

These pages generate; none of them decodes. Reading a code needs a decoder and either camera access or an image upload, which is a different interface and belongs with the file-based half of this site rather than in a text widget.

Left out rather than half-built, and worth saying because it is the obvious next thing to look for. In the meantime the phone in your pocket is a better QR reader than anything a web page will give you.

The trademark, since it comes up

QR Code is a registered trademark of DENSO WAVE Incorporated, who invented the symbology in 1994 for tracking parts through car factories. Using the term to describe what a page generates is nominative use, which is what trademarks permit without permission.

DENSO holds patents on the format and has publicly chosen not to exercise them, which is the reason it became universal rather than remaining an industrial curiosity. There is nothing to license and no royalty to pay — a question that comes up often enough to answer here.

QR code tools: common questions

Do these codes expire?

No. Your data is in the pattern itself, so there is no service in the path and nothing to lapse. The trade-off is that you cannot change the destination after printing and there are no scan statistics.

Is there a limit on how many I can make?

No. The encoding happens on your machine, so there is no server cost for us to ration. Nothing is counted, queued or watermarked.

Can I read a QR code here?

Not yet — these pages generate only. Decoding needs a camera or an image upload, which is a different kind of tool. The camera app on your phone is currently the better answer.

Is my Wi-Fi password or contact data sent anywhere?

No. Everything is assembled and encoded in your browser, and the network panel will show that during use. It is worth checking on these pages specifically, because two of the three take a credential or personal data.

Why is there a white border around every code?

It is the quiet zone that the specification requires, four modules wide. Decoders find the symbol against clear background, so a code cropped to its black edge fails on paper even when it worked on screen.

Other kinds of tool