Most "best QR code generator" lists never say what to optimize for, and the right tool depends entirely on the job. A code on a café menu, a code on a printed campaign flyer and a code generated by a script at checkout are three different problems.
One disclosure first: Plexto makes one of the tools below. We tested it end to end and we say plainly where it isn't the right pick. What we say about other products comes from their own websites, checked in October 2026. Free plans change, so look again before you commit to a print run.
Decide this first: static or dynamic
A static QR code stores your link or text directly in the pattern. It never expires, needs no account or server, and works for as long as the thing it points to does. The trade-off is that you can't edit it after printing, and nobody counts the scans for you.
A dynamic code stores a short redirect link owned by the service that made it. That lets you change the destination after printing and see scan statistics, but it usually sits behind a paid plan or a trial, and the code only works while that service keeps redirecting it. Before you print dynamic codes, find out what happens to them if you stop paying.
A simple rule: if you must be able to change where a printed code points, or you want scan counts inside the generator's own dashboard, you need dynamic. If you only want to know whether a campaign worked, a static code plus a tracked link does the job for free (see the marketers section below).
What to check in any generator
- Sign-up and limits. Static codes should be free with no account. Be wary of a "free" tool that wants an account before you can download.
- File format. For print, a vector format (SVG, PDF or EPS) stays sharp at any size. A small PNG goes soft when it's enlarged.
- Error correction. A QR code carries spare data so a smudged or partly covered code still scans. The four levels recover roughly 7% (L), 15% (M), 25% (Q) and 30% (H) of damage. Higher levels make the pattern denser, so use H when you'll put a logo in the middle or print on a rough surface.
- Contrast and white space. Dark on light scans best. Keep a clear white border around the code; the standard asks for four "modules" of it, and a module is one of the small squares.
- Privacy. Does the text you type get sent to a server? For anything private, such as an unlisted launch page or a Wi-Fi password, prefer a tool that builds the code in your browser.
The picks
Plexto QR Code Generator: the quickest private static code
We tested the live QR Code Generator by generating codes, saving them and scanning the files back. Here is what it does and doesn't do.
- It's free, with no account.
- The code is built in your browser. We watched the network traffic while generating one, and nothing containing the text we typed was sent anywhere. (The page loads ads like the rest of Plexto, but what you type stays on your device.)
- You pick a size from 128 to 2048 pixels and download a square PNG at exactly that size, or an SVG file that stays sharp at any size.
- You can choose the code color and the background color (it warns you when the contrast is too low to scan reliably) and one of four error-correction levels: Low (about 7%), Medium (15%, the default), Quartile (25%) or High (30%). There is no logo, gradient or custom-shape option.
- It takes any text, up to about 2,300 characters of a typical link at the default error-correction level, and fewer at higher levels. Keep yours far shorter: a shorter link makes a simpler code that scans faster.
- Because it accepts any text, Wi-Fi, email, phone and single-line MECARD contact codes work if you type the standard format, for example
WIFI:T:WPA;S:NetworkName;P:Password;;ortel:+919800000000. We generated each kind and scanned it back to confirm the text survived. - The saved PNG has only a thin white border (about two modules), so place it on white with extra room around it.
Best for: menus, posters, quick links, simple brand-colored codes and SVG files for a print shop. Not for: logos, gradients or custom shapes, or scan tracking. Use one of the options below for those.
QRCode Monkey: best free customization
According to its site, QRCode Monkey makes static codes for free with no sign-up. You can use single colors or gradients, upload a logo (PNG, JPG, GIF or SVG, up to 2 MB), choose the shapes of the code's squares and corner markers, and download PNG, SVG, PDF or EPS with a quality slider. Dynamic codes, scan statistics and bulk creation live on its paid platform.
Best for: branded codes for print, when you want vector files without paying.
QR Code Generator (qr-code-generator.com): editable, tracked codes
Its site says static codes are free and never expire, in several types (URL, contact card, plain text, email, SMS, Wi-Fi and more). On the free side they are black and white only. Logos, custom colors, frames and bulk creation are paid or trial features. Dynamic codes, with an editable destination and scan analytics showing where, when and how often people scan, need an account and come with a 14-day free trial.
Best for: when you must change a printed code's destination later or report scans from the tool itself, and a paid plan is acceptable.
Chrome's built-in QR code: a code for the page you're on
In desktop Chrome, click Share to the right of the address bar, choose QR code, then Download. Android and iPhone have the same option in Chrome's share menu, according to Google's Chrome Help. There's nothing to sign up for, but it only encodes the address of the current page.
Best for: getting a page onto someone's phone right now.
For developers: the qrcode library
Plexto's own generator is built on the open-source qrcode package, which runs in Node and in the browser. Reach for it when codes should come out of a script, such as order confirmations, tickets or labels, with settings no web form offers:
import QRCode from "qrcode";
const svg = await QRCode.toString(url, {
type: "svg",
errorCorrectionLevel: "H",
margin: 4,
});
That returns SVG markup you can inline in a page or save as a file. QRCode.toFile writes a PNG and QRCode.toDataURL returns an image string for a web page. We ran the SVG and PNG options while preparing this article.
For marketers: measure a campaign without paying for dynamic codes
Build the link first, then turn it into a code. Use the UTM Parameter Builder to add a source, medium and campaign name to your address, plus the optional "content" tag. For example:
yoursite.com/offer?utm_source=flyer&utm_medium=qr&utm_campaign=diwali-sale&utm_content=counter-a
Scans then show up in Google Analytics under that campaign. Make one code per placement (poster, flyer, table card, counter A and counter B) by changing only the content tag, and you can see which placement people actually scan. A static code is enough for all of it.
Test before you print
- Generate the code, then open the image in the QR Code Reader. It decodes the picture and shows exactly what's inside, which catches the most common failure: a typo in the link.
- Scan it with two phones, one of them older, from the distance it will really be read.
- Print one proof at the final size and scan that too. Screens and paper behave differently.
A size rule of thumb: at least about 2 × 2 cm for close range, and roughly one tenth of the viewing distance for anything further away. A code read from 2 metres should be around 20 cm wide.
Checklist before you print
- The link opens the right page on a phone, not just on your computer.
- Dark code, light background, with a clear white border all round.
- Not stretched, skewed, cropped or printed on a curved, glossy or textured surface.
- Error correction raised (Q or H) if there's a logo or the surface is rough.
- A proof scanned from the real distance, on more than one phone.
Quick answers
Do free QR codes expire? A static code doesn't, because the data is in the pattern itself. A dynamic code works only as long as the service keeps redirecting it.
Can I put a logo in the middle? Yes, in generators that support it, such as QRCode Monkey. Raise error correction to Q or H and scan-test the result. Plexto's generator doesn't add logos.
How much can a code hold? More than you should use. Plexto's generator accepts about 2,300 characters at its default error-correction level (fewer at higher levels), but the shorter the content, the simpler the code and the more reliably it scans.
More from Plexto for QR workflows
- QR Code Generator and QR Code Reader
- UTM Parameter Builder for tracked campaign links
- Color Contrast Checker to check the contrast between your code and background colors
- Barcode Generator for product barcodes, which are a different thing from QR codes
- Background reading: how QR codes work