Skip to content
English
The WorkbenchTools that upload nothing
A workshop by the ODERSA associationNothing leaves, nothing is kept, nothing reaches us.

The workshop · Make a QR code

How it works : Make a QR code

Almost every free QR code generator builds a redirect link that goes through THEIR server: they count every scan, and the code dies if the service shuts down. This one writes your data INTO the code, here, sending nothing, and shows you the codewords it computed.

Open the tool

The trap in free QR code generators is the same everywhere, and it is rarely explained: many of them do not put your address in the code. They put in a redirect link to THEIR server, which then forwards to you. Every scan is therefore counted at their end, with the time and the country, and the day the service closes or starts charging, every code you printed stops working. A sticker in a shop window becomes a dead square.

Here, the content is written INTO the code. There is no redirect, no counter, no account to create, and nothing leaves your device: the whole encoder is written by hand in the page, error correction included. A code made here will still work in ten years, because it depends on nobody.

The tool shows its work. It tells you the version chosen, the error correction level, the encoding mode, the mask it kept, and it prints the codewords it computed. That is what lets you check it: our encoder reproduces two published test vectors exactly, byte for byte. We did not have access to the text of the standard, which is paid for, and we say so rather than let you assume otherwise.

How it works

  1. Paste what the code has to contain: a web address, some text, a wifi configuration line (the most frequent question, at the foot of this page, gives the exact format).
  2. Set the correction level and the size. The higher the correction, the better the code survives a smudge or a fold, and the denser it gets.
  3. Click, watch the code appear, and download it as PNG for a screen or SVG for printing. Then SCAN IT with your own phone before printing a thousand copies.

Formats accepted

The tool starts from text: a web address, a message, contact details, a configuration line. It returns a PNG image or an SVG file. Reading a QR code is NOT offered: see the limits just below.

PNG image

Crisp squares, at whatever module size you ask for. This is the format to use on a screen, in an email or in a document.

SVG drawing

A drawing file, so crisp at any print size: this is the right format for a poster, a shop window or a business card. It contains one path and one colour, and it opens in any drawing program.

See the compatibility matrix

Its limits

This tool MAKES a QR code, it cannot READ one

The browsers' native reading function leans on the operating system: it exists on Chromium under macOS, ChromeOS and Android, it is ABSENT from Windows and Linux, Firefox never implemented it, and Safari's experimental version has been broken since iOS 18. Carrying a full decoder would be a second tool, with its own verification campaign. So the slot is “make”, and it is written on the “Our method” page. Your phone's camera, meanwhile, reads QR codes perfectly well.

The tool runs from version 1 to version 10, meaning 271 characters at most

Two reasons, and both are honest. First, density: a version 10 is already 57 modules across, and beyond that an ordinary phone starts to miss the scan on a code printed small. Second, the tables: the error correction block sizes past version 10 come from no source we could read ourselves, and we do not copy figures on trust. The maximum depends on the correction level and on the content: 271 characters in byte mode at the lowest level, 106 at the highest.

We have not read the text of the standard, and we say so

ISO/IEC 18004 is a paid standard. Our capacity and correction tables come from two concordant sources independent of one another (a widely used reference tutorial, and the source code of a recognised implementation), never from the normative text. What we verified OURSELVES is sturdier than a transcription: the encoder reproduces two published test vectors exactly, data codewords AND correction codewords, and it lands on the same mask; the thirty-two format strings we recompute from the correcting code are identical to the published table; and the capacity of every version, recomputed from the symbol's geometry by our own placement code, lands on the totals the table announces. Only the four module quiet zone could be read in the normative text itself.

The four module white margin is not decoration

The standard requires it on all four sides, and it is the one point we could read directly in its text. Without it, a reader cannot find the symbol's edges: the code looks right, and it will not scan. So the tool never goes below four modules, even if you ask it to, and it tells you.

No logo in the middle of the code

A logo dropped in the centre covers modules over, and the code only still works thanks to its error correction. Checking that would mean READING the code produced, which this tool cannot do. So we do not offer a feature whose result we cannot verify: that would be selling a sticker.

Characters outside the basic Latin alphabet go through as UTF-8, with no header declaring the encoding

In byte mode the standard assumes the ISO-8859-1 character set by default, while everyone writes UTF-8. Modern readers guess it, and that is what most generators do. We do not add the interpretation header that would declare it, because some older readers refuse it: the most compatible choice today is this one. The consequence: on an old reader, text in Russian or Chinese may come out as gibberish. Test before printing, as with any QR code.

Always scan the code before printing a batch

This is not a reservation about this tool, it is a rule of the trade. A QR code that is too small, printed on a shiny surface, at low contrast or too close to a fold becomes unreadable whatever tool made it. One minute of checking with your own phone is worth a thousand useless stickers.

“QR Code” is a registered trademark of DENSO WAVE INCORPORATED

Using the code itself is free and royalty free as long as it follows the standard, and its inventor says so in plain words on its own site. The words “QR Code”, however, are a registered trademark, and using them means saying so. That is done on our credits page, and here.

Questions about this tool

Are the contents of my code sent anywhere?

No, and that is the whole point of this tool. Check it in thirty seconds: open the inspector with the F12 key, the “Network” tab, clear the list, then paste your text and make the code. Not one line appears. Cut your connection and do it again: the encoder is written in the page, it works the same. That matters here because a QR code often contains a private address, a wifi password or contact details.

How is this different from an ordinary free generator?

Many free generators do not write your address into the code: they put in a link to their own server, which then redirects. The result looks like the same square, but every scan is counted at their end, with the time and often the country, and the code stops working the day the service closes or starts charging. That is the classic disaster of stickers printed a thousand at a time. Here your content is IN the code: it depends on nobody, and it will still work in ten years.

How do I make a QR code that connects to wifi?

By pasting a line in the format phones recognise: WIFI:T:WPA;S:TheNetworkName;P:ThePassword;; replacing the name and the password, and not forgetting the two semicolons at the end. If the network is open, write T:nopass and leave P empty. One thing to watch: this code contains your wifi password in plain text, and anyone who can photograph it has it. That is handy for guests in a holiday let, and to be avoided in a shop window.

Should I raise the correction level?

It depends where the code is going to live. On a screen or in a document, the medium level is more than enough. On a sticker that will take rain, fingers and glare, go up: at the highest level, about thirty per cent of the code can be damaged without the read failing. The price is density: the same content needs more modules, so a finer code at the same size. On a small printed format, an over dense code sometimes scans worse than a less corrected but more legible one.

PNG or SVG?

PNG for a screen, an email, a slide or an office document: it is an image, it drops in anywhere. SVG for anything printed: it is a drawing, so crisp at any size from a stamp to a poster, and it weighs a few kilobytes. The SVG we produce contains one path and one colour, without a single superfluous line, and it opens in every drawing and layout program.

Why not read a QR code here too?

Because the browsers' reading function does not exist everywhere, far from it. It leans on the system: present on Chromium under macOS, ChromeOS and Android, absent from Windows and Linux, never implemented by Firefox, and broken on Safari since iOS 18. We did not want a tool that works for some visitors and shows an apology to the rest. And your phone's camera already reads QR codes very well, without going through a website.

Can I put my logo in the middle?

Not here. A logo dropped in the centre covers modules over, and the code only still works thanks to its error correction: checking that it still scans would mean READING the code produced, which this tool cannot do. We would rather not offer a feature whose result we cannot verify. If you really want one, download the SVG at the highest correction level and place the logo in a drawing program, over an area no larger than a tenth of the code, then scan it before using it.

How do I know the code is right?

Two things, and the second is the real one. First, the tool prints the data codewords and the correction codewords it computed: we compared them against two published test vectors, and they land exactly on them, which checks the whole chain of the calculation. Second, and this is what counts for you: scan the code with your phone. No internal check replaces the reader that is actually going to use it.