LogoTools
Runs entirely in your browser - nothing is uploaded

A QR code is a string of text drawn as a grid of modules a camera can read back. What the phone does next depends on the shape of that string: a web address opens in the browser, a WIFI: string joins a network, a vCard saves a contact, a wa.me link opens a WhatsApp chat. This generator writes 26 of those shapes for you, renders the code with your colours, module style and logo, and exports it as a PNG at a chosen resolution or as an SVG for print.

Everything happens in your browser. Whatever you type, and any logo you upload, goes into the image you download and nowhere else. Nothing is sent to a server, and the page keeps no record of it.

The type strip

The row of tabs across the top picks what the code will do. On this page the tabs switch in place, and opening the page with ?type=whatsapp or any other type name in the address lands on that tab directly. Many types also have a page of their own with fuller notes; on those pages the same strip links across to every other type.

Each type validates its own input and shows a plain message when something is missing or malformed, such as a Zoom meeting ID that is not 9 to 11 digits or an X username longer than 15 characters. Download stays disabled until the fields encode cleanly.

The 26 types

Link and text: URL opens a web page, with https:// added if you leave it off, and Text shows plain text for a serial number, a code or a note. Contact and messaging: Phone opens the dialler with a tel: number; SMS opens a text message with the number and words filled in; Email starts a mailto: draft with address, subject and body; WhatsApp opens a wa.me chat with a message pre-typed; FaceTime starts a video or audio-only call to a number or Apple ID; Telegram, Messenger, Viber and Skype open a chat, or for Skype a chat or call, from a username or number.

Place, time and identity: Location drops a map pin at exact coordinates via a geo: URI; Wi-Fi joins a network from a WIFI: string; Event adds an iCalendar entry with title, times, location and description; vCard saves a contact card in vCard 3.0. Payments: UPI takes a payment to a UPI ID with an optional amount; Crypto encodes a Bitcoin or Litecoin BIP-21 URI with optional amount and label, or an ethereum: URI carrying the address alone; PayPal opens a PayPal.me link with an optional amount and currency. Meetings, apps and reviews: Zoom joins a meeting by ID with the passcode included; App Download opens a Google Play or App Store listing; Google Review opens your write-a-review form from a Place ID. Social profiles: Instagram, Facebook, YouTube, LinkedIn and X each take a bare username, an @handle or a pasted profile link and encode the canonical profile URL.

Options, colours, styles and branding

Options holds the settings that affect whether the code scans. Resolution runs from 128 to 2048 pixels and sets the PNG's size. Error correction is L, M, Q or H, recovering roughly 7, 15, 25 or 30 percent of damaged modules at the cost of a denser code; M is the default. Quiet zone is the blank border in modules, 0 to 8, and two or more is the safe setting for print.

Colours sets the foreground and background, each as a swatch, a typed hex value or, in browsers that support it, an eyedropper. Dark modules on a light background scan most reliably; inverted or low-contrast pairs often fail on older phones. Styles chooses the module shape from square, rounded, dots, classy, classy rounded and extra rounded, the three corner frames from square, rounded and circle, and the corner centres from square and circle. The corner marks are what a camera finds first, so keep them high-contrast whatever style you pick.

Branding adds a logo, as PNG, JPEG, SVG or WebP, centred over the code and covering roughly a third of its width, with the modules beneath it hidden. Adding a logo raises error correction to H so the covered modules can be recovered, unless you had already chosen a level yourself. Remove the logo with the button beside its name.

Export, the readout and printing

The preview updates as you type. Choose PNG or SVG beside the Download button. A PNG is a raster at the resolution you set, right for screens, documents and anything that needs a bitmap; an SVG is vector and scales to a table card or a wall banner without blurring, so it is the one to send to a printer. The filename carries the type and resolution, such as qr-link-512px.png.

Under the preview, What the code contains shows the exact string encoded, with a Copy button. It is there so you can see nothing has been added: no redirect, no tracking parameter, no shortener. Any scanner app will show the same string.

For print, keep the quiet zone at two modules or more; a code printed edge to edge on a coloured card is the most common reason one refuses to scan. Keep the string short where you can, since every character adds modules. Print the destination in plain text beside the code, a phone number, an address or a short URL, for anyone who cannot or would prefer not to scan, and scan the printed proof with a phone from a metre away before ordering the run.

What this tool does not do

Every code made here is static: the data is in the pixels. Two features sold by QR services need a server sitting between the code and the destination, and this tool has no server, so it does not offer them. The first is a dynamic or editable code, where the code holds a short redirect link that the service re-points later. The second is scan tracking, counting scans by time and place, which works only because that redirect sees every scan on its way through. Both are the paid tier of those services, and both stop working if the subscription lapses, since the redirect domain is theirs.

If you want to change a destination after printing, point the code at a page on your own domain and change what that page does; the code stays valid for as long as you keep the domain. If you want to know which placement a scan came from, give each placement a different pre-filled message, subject line or URL parameter, and read the difference in your inbox or analytics.

There is also no bulk generation from a spreadsheet, no frame with a Scan me caption, and no account, saved history or sharing link. What you download is the whole output.

Frequently asked questions

Is what I type sent anywhere?

No. The string is built and the image rendered inside your browser. The fields, and any logo you upload, are only placed into the file you download. There is no upload, no account and no history kept on this page.

Can I edit the code after printing it?

No. The data is in the code itself, so a new destination means a new code. Editable codes need a redirect server, which this tool does not have. To keep the option open, point the code at a page on a domain you control and change that page instead.

Can I see how many people scanned it?

Not from the code. Scan counting needs a server in the middle of every scan, which is what QR subscription services charge for. A workable substitute is a different pre-filled message, subject or URL parameter per placement, so the scans tell themselves apart when they reach you.

Should I download PNG or SVG?

SVG for print, PNG for screens. An SVG is vector and scales to any size without blurring. A PNG is a bitmap at the resolution you set, and enlarging it afterwards only blurs it, so if you need a PNG for print set the resolution high before downloading.

Why does the code get denser when I add a logo or more text?

A logo raises error correction to H, which stores more redundancy so the covered modules can be recovered. More text needs more modules outright. Both make the grid finer for the same print size, so give a dense code more room on the page.

Can I use my brand colours?

Yes, as long as the contrast stays high. Dark modules on a pale background scan reliably. Light modules on a dark background often fail, and two mid-tones close in brightness are the usual reason a styled code will not read.

Is there a limit to how much a code can hold?

Yes. A QR code has a fixed maximum, and long strings become dense long before they reach it. A short link, a phone number or a WiFi string scans easily at small sizes; a full vCard or a long event description needs a bigger print. Keep the string as short as the job allows.