Google Analytics helps us understand which tools you use and which actions work. Your files and entered text stay out of analytics.

Free · no sign-upNever expiresNo watermark

QR code generator

Make a code for a link, a Wi-Fi network, a contact card or a phone number. It is drawn in this tab, so your password never leaves the machine you typed it on.

Static codes, so nothing expires and nobody counts your scansPNG up to 2048 px, and true vector SVG for printUp to 500 codes at once, from a pasted listTells you the smallest size it can safely be printed at

Say what it carries, watch it build, then take the file.

Signed in, typed text and settings save automatically to your private account. Text opened from files stays in this browser’s local storage. Files stay in your browser. Account saving

A bare domain gets https:// put in front of it, because a code carrying floi.dev with no scheme opens a search on most phones.

Colour, size and error correction

Error correction

Higher error correction means more of the code can be scratched, covered or printed badly before it stops reading. It costs capacity, so a long link may jump to a bigger grid. The Capacity used figure tells you whether you have room.

1Version
21 × 21Grid
0%Capacity used
20 mmPrint at least

Static codes, encoded in this tab. There is no redirect in the middle, so nothing expires, nothing counts your scans, and no watermark is added. A code is kept in this browser when you download or copy it, ten at a time, and your text and settings save automatically to your account when signed in.

Make a batch from a list

One line per code, up to 500. Put a name first with a comma after it to control the filename: Table 4, https://example.com/menu. They are encoded here and saved as a ZIP, at the colour, size and error correction set above.

How to make a QR code

  1. Pick what it carries

    Link, plain text, a Wi-Fi network, a contact card, an email, a phone number or an SMS. Each one gets the fields it actually needs.

  2. Fill it in and watch it build

    The code redraws on every keystroke. Under it sit the version, the grid size, how full it is and the smallest size it can be printed at.

  3. Save it as PNG or SVG

    PNG up to 2048 px for a screen, SVG for print at any size. Or paste a list and take the whole batch as a ZIP.

Static codes, and why that is the point

Every code this tool makes is static. The link is encoded in the pattern itself, so a scanner reads it straight off the paper and goes there. Nothing sits in between.

The alternative is a dynamic code, which encodes a short address on the generator's own domain and redirects from there. That buys two things: you can change the destination after printing, and the company in the middle can count every scan. It also means the code stops working the day that company withdraws it, and a great many free tiers are built to make that happen. "Do QR codes expire" is asked about a thousand times a month in the US, and this is the whole of the answer.

So the trade is honest and worth saying plainly. A static code cannot be edited and cannot be measured. In exchange it works forever, offline, with nobody in the middle. If you need editable links and scan analytics, this is not the tool, and no tool without a server can be. The guide covers how to tell which kind you were given and what to do when one has already stopped working.

What the seven types actually encode

A QR code holds text and nothing else. What makes a Wi-Fi code join a network is that phones recognise a particular spelling of that text. These are the ones this tool writes.

TypeWhat goes in the codeWhat a phone does
Linkhttps://example.comOffers to open it.
TextExactly what you typedShows it. Nothing opens.
Wi-FiWIFI:T:WPA;S:name;P:pass;;Offers to join the network.
ContactA vCard 3.0 recordOffers to save a contact.
Emailmailto: with subject and bodyOpens a draft.
Phonetel: and the numberOffers to dial.
SMSSMSTO: and the messageOpens a message, already written.

None of these are on a standards track anybody enforces. They are conventions that iOS Camera, Google Lens and the scanner apps all settled on, which is why the exact spelling matters and a missing semicolon quietly turns a Wi-Fi code into a plain-text one.

Choosing the error correction

A QR code carries spare data so it can be read when part of it is unreadable. That is why a code still scans with a coffee ring on it. You are choosing how much of that spare data to carry, and it is a real trade rather than a "higher is better" dial.

  • Low, 7%. The most content in the smallest grid. Right for a long link on a screen, where nothing is going to damage it.
  • Medium, 15%. The default, and the right answer nearly always. It is what most printed codes in the world carry.
  • High, 25%. For a code going somewhere it will be handled, scuffed or printed small. A menu, a parcel label, a business card.
  • Highest, 30%. For a code that will be partly covered, printed on something curved, or put on a surface that gets wet. Also what you need if you are going to place a logo over the middle.

Raising it spends capacity, so a long link can push the code onto a bigger grid. The Capacity used figure is there so you can see whether you have the room before you find out.

Printing one so it actually scans

Three things break a printed code, and none of them are visible on a screen. The tool works around all three, which is what the numbers under the code are for.

Modules landing on half a pixel. A code drawn at 7.3 pixels per module has modules of three different widths and grey edges on some of them. This tool floors the scale to a whole number and tells you the pixel count it actually produced, which is why asking for 512 sometimes gives you 492. That is the correct answer, not a rounding bug.

Too little contrast, or contrast the wrong way round. A scanner assumes the modules are darker than the background. A light code on a dark one has plenty of contrast and still fails on many readers. Both are checked here, and you are told before you print rather than after.

Printed too small. The Print at least figure is computed from the grid, not from a fixed 2 cm rule of thumb, because a version 2 code and a version 20 code are not the same problem. Give it the quiet zone too: that is the blank border, and cropping it off is the other common way a perfectly good code stops reading.

The QR image is generated in your tab. Signed-in text and settings save privately, excluding Wi-Fi passwords. Completed activity records only numeric counts and dates, never the code's contents.

Frequently asked questions

Is it really free, with no sign-up?

Yes, and there is no account to make and no limit to hit. Signing in is optional. The code is drawn on your own machine. Signed in, supported text and settings save privately; Wi-Fi passwords do not. Text opened from files and its later edits stay in this browser’s local storage. They do not sync to your account. Nothing is watermarked, nothing is held back for a paid tier, and no code you make here can be switched off later. The site has no way to reach a code once it is on your screen.

Do the codes made here expire?

They cannot. Every code this tool makes is static, which means the content is encoded in the black and white squares themselves rather than stored on a server that the code points at. A scanner reads the link straight off the paper. There is no redirect in the middle to be switched off, no subscription behind it, and no way for anyone including us to change where it goes. Codes that expire are dynamic codes, and the guide explains why so many free generators hand those out.

Is it safe to put my Wi-Fi password in?

Safer here than on any generator that sends it somewhere. The password is read from the field by JavaScript in your own tab, turned into a grid of squares, and drawn onto a canvas. The Wi-Fi password is excluded from saved drafts and analytics. Open the network panel and check request payloads: none contains that password. Google Analytics and signed-in settings can make requests. Turn Google Analytics off through Analytics settings in the footer. Then turn your Wi-Fi off and make another one. Most hosted generators cannot do either, because they post your content to their own API and send a picture back.

Should I download the PNG or the SVG?

PNG for a screen, SVG for anything printed. A PNG is a fixed grid of pixels, so it is right for a website, a slide or a social post, and the size menu covers up to 2048 px. An SVG is the geometry rather than a picture of it, so it prints sharp at any size from a business card to a shop window. The SVG here is one merged path rather than a rectangle per module, which is the difference between a file Illustrator opens as a single object and one it opens as three thousand.

Can I put a logo in the middle?

Not in this tool, and the honest reason is that doing it properly needs judgement a form cannot make. A logo works by covering modules and letting the error correction rebuild them, so it only holds if the logo is small enough, opaque, and the correction is set high. Generators that offer a logo slot let you cover a third of the code at Low correction and hand back something that scans on the designer's phone and fails on a customer's. If you want one, export the SVG, set the correction to Highest, place your logo over no more than the middle fifth, and test it on two real phones before you print anything.

How many codes can I make at once?

Up to 500 in one go. Open "Make a batch from a list", paste one entry per line, and they come back as a ZIP at whatever colour, size and error correction you set above. Put a name and a comma in front of a line to control its filename, so Table 4, https://example.com/menu saves as table-4.png. Every one is encoded in your tab, which is why there is no per-code charge: nothing is being run on anyone's behalf.

Why did the code get bigger when I raised the error correction?

Because parity takes room that the content was using. A QR code of a given size holds a fixed number of bytes, and raising the correction from Medium to Highest spends about a quarter of them on recovery data instead. If your content no longer fits, the tool steps up to the next version, which is a wider grid. The Capacity used figure is there to tell you in advance: at 40% you have room to raise it for free, and at 95% you do not.

How small can I print it?

The tool tells you, under "Print at least". It is worked out from the grid: a module below about 0.4 mm is smaller than the blur circle of a phone camera at arm's length, so a 25-module code can be a stamp and a 77-module one cannot. The figure is rounded up to the next millimetre on purpose, because it is a floor you are about to send to a printer. As a rule a code reads from about ten times its own width away, so a 30 mm code scans from roughly 30 cm.

Something missing? Request a feature

↑↓ move↵ openesc close