Skip to content
Koit Academy

Free tool · no signup

QR code generator

Static codes that never expire and need no account — the data lives in the square, not on somebody's server. Built in your browser and downloadable as SVG or PNG.

What the code does

Typed exactly as given. Nothing is capitalised or rewritten — the path of a link is case-sensitive, and a code that opens a different page than the one you typed is worse than a slightly bigger square.

What is actually encoded

This is the exact string inside the square. Every content type has its own format — this is what makes a scanned wifi code join a network instead of showing a line of text.

Your code

Affects the PNG file only. The preview above is scaled to fit, and the SVG has no size of its own — it is sharp at any of them.

Built by this browser with no network request, no account and nothing stored on this device. The code is static: what you typed is inside the square, so it works offline and never expires.

How to use it

How to use the QR Code Generator

  1. 01

    Pick what the code should do

    A link, a wifi network, a contact card, an email, a phone number or a text message. Each one has its own encoding, so a phone that scans it offers the right action rather than showing a line of text.

  2. 02

    Choose the size and how much damage it should survive

    Higher error correction rebuilds a code that has been scratched, smudged or partly covered, and costs capacity — the square grows. The page tells you what each level would cost for what you have typed.

  3. 03

    Download SVG for print, PNG for screens

    SVG stays sharp at any size, which is what you want for a menu, a sign or a sticker sheet. PNG is for a slide, an email or anywhere that will not take vector art.

Static and dynamic codes are not two features. They are two products

Search for a QR generator and most of the first page will hand you a dynamic code. It looks the same and it behaves differently in one crucial way: the square does not contain your link. It contains a short address on the generator's domain, and when somebody scans it their phone goes there first and is forwarded on. That indirection is what makes the marketed features possible — editing the destination after printing, counting scans, targeting by country — and it is also what makes the code a rented asset. The moment the account lapses, the trial ends or the company is acquired and the old domain quietly stops resolving, every printed copy of that code becomes a dead link. There are a great many dead menus and dead estate agent boards in the world for exactly this reason.

A static code has none of those features and none of that risk. Everything you typed is encoded in the pattern itself, so scanning it never touches anyone's server, and the code keeps working with no account, no subscription and no company behind it. If the destination needs to change later, the answer is to point the URL you encoded at something you control — a short path on your own domain — and change where that goes. That is the same benefit without handing anyone else the keys to your printed material.

Every content type has a real format behind it

A QR code is a way to carry a string of text, and what a phone does with that string depends entirely on the string being in a shape the phone recognises. This is the part most generators get approximately right and some get plainly wrong.

Wifi credentials use WIFI:T:WPA;S:network;P:password;;. The separators are significant, which means a network name containing a semicolon, a colon, a comma or a backslash has to be escaped or the parts run together and the phone reads nonsense. A contact card is vCard 3.0 with carriage-return line endings, because that is what address books parse. An email is a mailto: address with the subject and body percent-encoded as query parameters. A phone number is tel:, and a message is SMSTO: — not sms:, which is handled inconsistently across phones. Get any of these wrong and the code still scans perfectly; it just shows a line of text instead of doing the thing, which is a failure nobody notices until it is printed on five hundred flyers.

Why the square grows, and the three ways to shrink it

QR codes come in forty fixed sizes, called versions, from 21 modules across up to 177. The encoder picks the smallest one your content fits into, so adding a few characters can push you over a boundary and suddenly the pattern has noticeably more, smaller squares. Three things pull it back.

The first is shorter content — a link of forty characters instead of a hundred and forty. The second is a lower error correction level, which is a genuine trade rather than free space, and is covered below. The third is the least known: the format has three ways of packing data, and it chooses automatically based on what you typed. Digits alone are stored at about three and a third bits each. Capital letters, digits and a handful of punctuation marks — the setA–Z 0–9 space $ % * + - . / : — are stored at five and a half bits each. Anything else, including any lower-case letter, falls back to eight bits per byte, and accented or non-Latin characters take several bytes apiece. That is why a phone number produces a much simpler pattern than a web address of the same length, and why an all-capitals link is denser than a mixed-case one.

This tool will not capitalise a link to reach that denser mode, and it is worth saying why, because some generators do. The domain part of a URL is case-insensitive but the path is not:example.com/Menu and example.com/menu are different pages on most servers. Silently upper-casing to save a few modules would produce a smaller code that goes somewhere else, and a code that scans to the wrong page is a worse failure than a large one, because nothing about it looks wrong.

Error correction is insurance, and it is priced in capacity

Part of every QR code is redundant data that lets a scanner rebuild sections it cannot read. There are four levels: L recovers roughly 7% of the code, M about 15%, Q about 25%, and H about 30%. That redundancy occupies room that would otherwise hold your content, so raising the level either reduces what fits or grows the grid — the panel above tells you which, for what you have actually typed, rather than making you guess.

For a code on a screen, in a slide or in an email, M is right; nothing is going to damage it. For anything printed on a surface that will be handled, weathered or partly covered — a table sticker, a delivery van, a piece of packaging, a poster at a bus stop — Q or H is worth the extra modules. The one place people overestimate what error correction buys them is logos. Covering the centre of a code works because the redundancy rebuilds what the logo hides, but that redundancy was the margin for a fingerprint, a crease or a scuff, and once it has been spent on branding it is not there for anything else.

Printing one so it actually scans

The rule of thumb worth remembering is that a code should be about one tenth of the distance it will be scanned from. Something read at arm's length, like a menu or a leaflet, wants around 3cm across. A poster read from three metres wants around 30cm. Below roughly 2cm, phone cameras begin to struggle regardless of distance, and a dense code — a long contact card at level H, say — needs more room than a short link because its individual squares are smaller.

Two details cause most printed failures. The first is the quiet zone: the blank margin around the pattern is part of the specification, four modules wide, and scanners use it to find the edges. Cropping it off or running artwork up to the pattern is a common way to break a code that worked on screen. The second is contrast and polarity. Dark pattern on a light background is what scanners expect; inverting it, or printing dark on dark, will fail on many phones even when a preview looks fine. If you take one precaution, it is to scan the printed proof with more than one phone before the run.

Questions

What people ask about the QR Code Generator

Will this code stop working, or expire?
No. Everything you type is encoded inside the square itself, so the code works with no server involved — offline, forever, and with nothing to renew. This matters more than it sounds. Most free generators produce a dynamic code, which really encodes a short link on their own domain that forwards to your content. That is how they offer editable codes and scan statistics, and it is also why so many printed codes are dead: the trial ended, the account lapsed, or the company shut down, and every menu and flyer carrying that code went with it.
Does anything about the code get uploaded?
No. The code is built by your own browser and never leaves the tab. There is no network request in this page after it loads, no account, no upload and no analytics event when you generate or download. You can check it: open your browser's developer tools, watch the Network tab, and make as many codes as you like. Nothing appears.
SVG or PNG — which one do I need?
SVG for anything that will be printed. It is vector art, so the same file is sharp on a business card and on a shopfront window, and a printer can scale it without asking. PNG is a fixed grid of pixels: fine for a slide, an email signature or a web page, and the usual reason a printed code fails to scan when someone enlarges a small one. If a designer or printer asks which you have, the answer they want is SVG.
How big should I print it?
The working rule is that the code should be about a tenth of the distance it will be scanned from. Read at 30cm — a menu or a leaflet in the hand — means roughly 3cm across. A poster read from three metres wants around 30cm. Below about 2cm, phone cameras start to struggle regardless of distance. Leave the white margin around the code intact as well; it is part of the specification, not padding, and scanners use it to find the edges.
What does the error correction level actually do?
A QR code carries redundant data so it can still be read when part of it is unreadable. Level L rebuilds about 7% of the code, M about 15%, Q about 25% and H about 30%. That redundancy takes up room, so raising the level either shrinks how much you can encode or grows the grid — the page shows you which, for what you have actually typed. Use M for anything on a screen, and Q or H for something that will be printed on a surface likely to get scuffed, wet or partly covered: a van, a table sticker, a piece of packaging.
Why does a wifi code need its own format?
Because a phone has to recognise it as network credentials rather than text. The wifi code encodes WIFI:T:WPA;S:network name;P:password;;, with semicolons, colons, commas and backslashes inside your network name or password escaped so the parts do not run together. A generator that simply writes the password out as plain text produces a code that scans and then shows a line of text nobody can do anything with. The same is true of contact cards, which use the vCard format, and of the email, phone and message types.
Can I put a logo in the middle?
Not with this tool, and it is worth knowing why it works elsewhere. Covering the centre relies on the error correction rebuilding what is hidden, which is fine until it is not: the margin for damage has already been spent on the logo, so a fingerprint or a crease that the code would have survived now breaks it. If you do it anyway, use level H, keep the covered area under about a fifth of the code, and test the printed result with more than one phone before it goes anywhere.
Why did the code get denser when I added a few characters?
QR codes come in fixed sizes — forty of them, from 21 modules across to 177 — and the encoder uses the smallest one your content fits into. Cross a boundary and it jumps to the next size, which has more, smaller squares. Three things pull it back down: shorter content, a lower error correction level, and content the format can encode more tightly. Digits pack about two and a half times denser than ordinary text, and capital letters with a few punctuation marks pack denser than mixed case, which is why a phone number makes a much simpler code than a link of the same length.

The long version

This tool is one page of a 189-page book