How to make a QR code here
Most codes take under a minute, and the preview updates as you type.
- Choose what the code should do: open a website, join Wi-Fi, save a contact (vCard or the shorter MeCard), start an email, a text message or a phone call, open a map at a point, add a calendar event, show plain text, or hold raw content you have written yourself.
- Fill in the fields. The page writes the content in the format phones expect, escapes the characters that would break it, and shows you the exact text that goes into the code with its length, the QR version it needs and how much of the maximum it uses.
- Style it. Pick an error-correction level, square, rounded or dotted modules, square or rounded corner patterns, your colours, and optionally a logo for the centre and a caption underneath.
- Set the printed width. The page shows how wide each module will be and roughly how far away the code can be scanned from, and warns when it is too small.
- Press Check it scans, or let it run by itself when a logo or a style is used, then download an SVG, PNG or PDF, a sheet of labels, or a ZIP of codes from a list.
Downloads are named after the content, for example qr-wifi-Cafe-Guest.png, so a folder of codes stays readable.
What happens to what you type: it never leaves your device
People put Wi-Fi passwords, phone numbers, home addresses and private links into QR codes, so this page keeps all of it on your device. The content builder, the QR encoder, the styling, the logo processing, the scan check and the file writers all run inside this browser tab. What you type and the logo you add are never sent to a server, and the code you download works without this site.
You can confirm it in a minute. Open the developer tools (F12, or Cmd+Option+I on a Mac), go to the Network tab and make a code with a logo. You will see this site’s own scripts, including a WebAssembly decoder the first time you run the scan check, and the site’s analytics request, which carries the page address and title only. Nothing you typed and no image appears in any request. Are online PDF converters safe? walks through the same check for any tool that handles your files.
Static versus dynamic QR codes, and why these never expire
A static QR code contains its content directly: the web address, the Wi-Fi password, the contact card. A phone reads it and acts on it with no server in between. That is what this page makes, which is why the codes cannot expire, cannot be switched off, keep working if this site disappears, and cannot track who scans them.
A “dynamic” QR code, sold by many subscription services, contains something else: a short web address on the service’s own server. When someone scans it, the phone visits that address and the service redirects them to the real destination. Because the service sits in the middle, it can let you change the destination later and count the scans. It also means the code depends on the service. Providers’ own help pages describe what happens when a plan or trial ends: the redirect stops and the printed code leads to an error or a notice until you pay again.
You can have the useful part of a dynamic code without the subscription. Point a static code at a page you control, such as yourdomain.com/menu, and change what that page shows or where it redirects whenever you like; the printed code never changes. If you want to count scans, use a distinct address for each placement (/menu-poster, /menu-table) and read the visits in your own website analytics. Nothing then sits between your customers and your content except your own site.
What you can put in a QR code
A QR code only holds text. What a phone does with it depends on how that text begins, so each content type here writes a particular, widely supported format:
- Website link: a web address starting https://. Phones show the address and open it in the browser. If you type example.com, the page adds https:// so phones treat it as a link.
- Plain text: shown on screen; useful for short instructions or serial numbers.
- Wi-Fi: WIFI:T:WPA;S:network;P:password;; which phones offer to join (details below).
- Contact: a vCard 3.0 (BEGIN:VCARD…END:VCARD, defined in RFC 2426) or the shorter MeCard format, which phones offer to save to contacts.
- Email: mailto:address?subject=…&body=…, as RFC 6068 defines, which opens a new message with the subject and text filled in.
- Text message: SMSTO:number:message, the form the ZXing scanner library documents and the iPhone camera reads, which opens a new SMS.
- Phone call: tel:+number (RFC 3966), which offers to call. Include the country code so it works abroad.
- Location: geo:latitude,longitude (RFC 5870), which map apps that support it open at that point; support varies, so a map link is the safer choice for a public notice.
- Calendar event: an iCalendar VEVENT (RFC 5545) with a title, start, end, location and description, which phones offer to add to a calendar.
- Advanced (raw): exactly what you type, for formats this page does not build, such as an app link or a payment address your bank gives you.
A QR code can hold up to 2,953 bytes at the lowest error-correction level, 7,089 if the content is only digits (Denso Wave, the QR code’s inventor). In practice, short is better: every extra character makes the modules smaller at the same printed size. A link to a page with the details nearly always beats putting the details in the code. The QR code data capacity calculator shows exactly what fits at each version and level.
Wi-Fi QR codes
A Wi-Fi code saves guests typing a long password. The format, documented by the ZXing project and read by Android and iPhone cameras, is WIFI:T:security;S:network name;P:password;; with an optional H:true for a hidden network. Backslashes go in front of any semicolon, comma, colon, backslash or quotation mark in the name or password, which the page does for you. For a network called Cafe Guest with the password green-tea-2026 the content is WIFI:T:WPA;S:Cafe Guest;P:green-tea-2026;; which is 42 bytes and makes a small version 3 code.
Choose “WPA / WPA2 / WPA3” for almost every network. The Wi-Fi Alliance’s WPA3 specification uses the same T:WPA value, and phones then negotiate the strongest security the router offers. “WPA3 only” writes T:SAE, which Android reads; use it only for a network that accepts nothing else, and test it with an iPhone too. WEP is obsolete and easily broken; if your router still uses it, change the router setting rather than printing the code.
Hidden networks are the weak spot: Apple said when it introduced Wi-Fi scanning in the iOS 11 Camera that hidden networks were not supported, and phones still differ. Test with the phones your guests use. For a café, office or holiday let, print the code with a caption such as “Scan to join Wi-Fi” and the network name and password in small text underneath, so people whose phones cannot scan it can still connect. If you change the password, the printed code stops working, so print it where it can be replaced.
Contact cards: vCard or MeCard
A vCard is the standard electronic business card, the same format phones and email programs use to share contacts. The page writes vCard 3.0 with the required name fields (N and FN), and adds organisation, job title, mobile and work phone, email, website, address and a note when you fill them in, escaping commas, semicolons and line breaks as RFC 2426 requires and folding long lines. When Apple added QR scanning to the iOS 11 Camera, it described showing a contact preview with an option to save it; on Android, what happens depends on the camera or scanner app.
A MeCard, a format NTT Docomo created for phones in Japan, holds a name, phones, email, address, website and a note in a much shorter form, but has no fields for an organisation or a job title. For the same person the difference is large: a full example card here is 233 bytes as a vCard (a version 11 code at level M) and 117 bytes as a MeCard (version 7). Use MeCard when the code must be small, such as on a name badge, and vCard when the company and title matter, such as on a business card.
Contact codes get dense quickly. If you need a photo, social profiles or many numbers, put a short link to an online contact page in the code instead.
Error correction, versions and how big to print
Every QR code has three large squares in its corners, the finder patterns, which let a camera find it and work out which way up it is; a timing pattern of alternating modules between them; smaller alignment squares in larger codes that correct for an angled view; and format information near the corners. The rest of the grid holds the data plus Reed-Solomon error-correction data, from which a damaged code can be rebuilt.
There are four error-correction levels. According to Denso Wave they restore about 7% (L), 15% (M), 25% (Q) and 30% (H) of the code. More correction needs more modules for the same content: the 24-byte link https://example.com/menu fits a version 2 code (25 × 25 modules) at L or M, and version 3 (29 × 29) at Q or H. Versions run from 1 (21 × 21 modules) to 40 (177 × 177), adding four modules per side each step. M suits most printed codes; Q or H suits codes that will be handled, rained on or covered by a logo.
What decides whether a code scans is the size of each module, not the version. Divide the printed width by the number of modules: a version 3 code printed 25 mm wide has modules of 0.86 mm, while a version 10 code (57 modules) at the same width has modules of 0.44 mm. QR vendors publish a rule of thumb that a code can be scanned from about ten times its width; it is not a standard, and poor light or a dense code shortens it. GS1 guidance for QR codes on product packaging asks for modules of at least 0.396 mm. The tool shows both figures for your settings.
| Where it is scanned from | Typical use | Code width at least |
|---|---|---|
| 25 cm (10 in) | Business card, label, packaging | 2.5 cm (1 in) |
| 50 cm (20 in) | Menu, flyer, table card | 5 cm (2 in) |
| 1 m (3 ft) | Shop window, counter display | 10 cm (4 in) |
| 2 m (6.5 ft) | Poster on a wall | 20 cm (8 in) |
| 5 m (16 ft) | Banner, notice board across a room | 50 cm (20 in) |
The clear margin around the code, the quiet zone, should be at least 4 modules wide on every side, as Denso Wave specifies. The page includes it in every download by default; do not let a border, text or a fold of the packaging into it.
Logos, colours and shapes without breaking the code
A logo in the middle works because error correction rebuilds the modules it hides. That is borrowing from the same reserve that copes with scratches, dirt and glare, so the page is careful with it. When you add a logo, it sets error correction to H, clears the modules behind the logo so the logo sits on clean background instead of on top of the pattern, trims plain or transparent borders off your image so it fills its space, and caps its size so it covers no more than about an eighth of the code, well inside what level H can restore. The scan check then runs by itself after every change.
Colours need contrast. Phones read codes by brightness, so a dark code on a light background is what they expect. Light modules on a dark background (an inverted code) are not read by many scanner apps; the page warns about it and about weak contrast. Gradients look good but make one end of the code paler, so they are off by default, and both ends should stay dark. A transparent background is useful on coloured packaging, as long as what it is printed on is light.
Module shapes are safe within limits. Rounded and dotted modules read on current phones because cameras look at the centre of each module, but they leave less dark area, so give them a little more size and contrast. The three corner squares keep their standard proportions in every style, with only their corners rounded, because they are what phones search for first. Whatever you change, run the scan check and then try a real print with two or three different phones.
Printing QR codes: menus, posters, packaging and labels
Use the SVG for anything a designer or print shop handles: it is vector, sized in millimetres, and stays sharp at any scale, including posters and vinyl banners. The logo is embedded inside the file, so it travels with it. Use the PDF to print at home or the office at the exact size, either on its own page or on Avery label sheets, and print it at 100% (“Actual size”). Use the PNG for documents, slides, websites and label printers; choose 300 or 600 DPI for print, and every module is drawn as a whole number of pixels so its edges stay crisp.
- Menus and table cards: a short link to a menu page you control, at least 5 cm wide, with “Scan for the menu” as the caption and the web address printed underneath for people who cannot scan.
- Posters and windows: size by distance using the table above, keep the quiet zone clear of other artwork, and avoid glossy lamination over the code where possible, since reflections are the most common reason a poster code fails.
- Packaging: print in a dark ink on a light, flat area, at least 2 cm wide for a short link, and test on the final material. For codes that also identify the product at a till, the GS1 Digital Link standard is the way to combine a GTIN and a web link in one QR code.
- Business cards and badges: a MeCard or a short link keeps the code small enough to scan at 2 to 2.5 cm.
- Labels: Avery 5160, 5163, 5167, L7160 and L7163 sheets and custom grids are built in, with up to two lines of text under each code.
Batch QR codes from a list or CSV
Batch makes many codes at once with the same look. Paste one value per line, add a CSV file with columns for the content, a label, a second line and a quantity, or generate a numbered sequence. A template turns short values into full content: with the template https://example.com/table/{value} and a list of table numbers 1 to 40, you get 40 codes, each linking to its own table page. Values are URL-encoded where they go into a web address.
The result is a ZIP of PNG or SVG files named after their values, or one label-sheet PDF where each row prints as many times as its quantity. That covers table cards, room signs, asset tags, product labels, event tickets with numbered codes, and per-seat or per-machine links.
Be clear about what this does not do. These codes are made on your device and contain their content directly, so there is no server checking a ticket in, preventing a code from being used twice, or recording who scanned what. For tickets that must be validated at the door, use a ticketing system with its own scanner app; for counting visits, give each code its own address on your website and read your analytics.
Testing your QR code
The scan check draws your code at two sizes, 3 and 8 pixels per module, on white and reads it back on this device: with the browser’s built-in barcode reader where there is one for QR codes, otherwise with a ZXing decoder compiled to WebAssembly that loads from this site. It then compares what it read with what you entered and reports whether they match. It catches a logo that is too large, a style or gradient that has gone too far, and content that came out differently from what you meant.
It cannot judge your printer, paper, lighting or a phone held at an angle across a room. Before printing a batch or a poster, print one copy at the real size, scan it with an iPhone and an Android phone from the distance people will actually stand, and check that the action is right: the right page opens, the Wi-Fi joins, the contact shows the right name and number, the event lands on the right day and hour.
What this page remembers
Your style and output settings are remembered in this browser so they are ready next time: the content type, error correction, quiet zone, module and corner styles, colours, size, units, PNG resolution, PDF page and label sheet. They are stored under the name dtc.codes.v1 in your browser’s local storage, alongside the barcode generator’s settings.
The content of your codes, the Wi-Fi passwords, contact details and lists you type or load, and your logo are never stored. Close the tab and they are gone. Clearing this site’s data in your browser removes the remembered settings as well.
How phones handle Wi-Fi, contact, SMS and calendar codes depends on the phone, its operating system version and the scanner app; test the code with the phones your audience uses. Size guidance here is a rule of thumb, not a standard. The scan check reads the code on your device and does not test print quality.