devtools

QR Code Generator

Generate QR codes from any URL or text in your browser, free and private. Tune error correction and download a crisp, scalable SVG — nothing is uploaded.

Runs entirely in your browser — your data never leaves your device.

How to use QR Code Generator

What it does & when you need it

A QR code is a two-dimensional barcode that stores a short blob of text — most often a URL — as a grid of black and white modules a phone camera can read in a fraction of a second. This tool turns any string you type into a scannable code and renders it as a crisp, resolution-independent SVG you can drop into a slide, a poster, a business card, or a print run without it ever going blurry. It is the fastest path from "I have a link" to "people can scan it," and because the whole thing runs in your browser, the URL or Wi-Fi password you encode never leaves your machine.

Reach for it when you need a QR for a landing page, an app-store link, a conference badge, a restaurant menu, a "connect to guest Wi-Fi" card, or a mailto: on a flyer. If your link is long or full of tracking parameters, tidy it up with the URL Encoder first so the code stays as small and readable as possible.

How to use

  1. Type or paste your content into the text or url buffer, or press Sample to load an example link. The preview redraws live as you type.
  2. Pick an Error correction level from the dropdown. M is a sensible default; raise it to Q or H if the code will be printed small, placed on a curved surface, or overlaid with a logo.
  3. When the code looks right, click Download SVG to save a vector file, or press Copy SVG (or Ctrl/Cmd + Enter) to copy the raw markup straight into your own page or component.

Things worth knowing

Error correction is a trade-off between resilience and density. The four levels — L, M, Q, and H — let a scanner reconstruct roughly 7%, 15%, 25%, and 30% of a damaged code respectively. That redundancy is why a QR with a logo punched through the middle still scans: the missing modules fall inside the recoverable budget. The catch is that higher levels store the same payload in a denser grid of smaller modules, so an aggressive H code printed tiny can actually be harder to read than a clean M code. Match the level to the abuse the code will take, not to a vague sense that "more is better."

Capacity depends on what you encode. A QR does not hold a fixed number of characters; it holds the most when the data is purely numeric, fewer when it is alphanumeric (uppercase letters, digits, and a handful of symbols), and fewer still for arbitrary bytes such as a mixed-case URL or UTF-8 text. As you add content the encoder steps up to a larger "version" — a bigger matrix with more rows and columns — which is why a long, parameter-heavy link produces a busier, denser image than a short one. Shorter input keeps the code sparse and easy to scan.

The quiet zone is not optional. Every QR needs an empty margin of at least a few modules around its edge; the specification calls this the quiet zone, and many scanners simply fail to lock onto a code that butts right up against other ink. That is why the preview here always sits inside white padding — do not crop it away when you place the image, or you will get a code that looks fine to you but refuses to scan in the wild.

"Wi-Fi codes" and "contact codes" are just text conventions. The QR itself only ever stores a string. What makes a phone offer to join a network or save a contact is an agreed-upon prefix that the camera app recognizes — for example WIFI:S:MyNetwork;T:WPA;P:secretpass;; for Wi-Fi, or a BEGIN:VCARD block for a contact card. Type the payload in the exact format and this tool will encode it verbatim; there is no separate "Wi-Fi mode," just the right text. If you need a random value to embed, the UUID Generator pairs well, and once you have a code you can hash the underlying URL with the Hash Generator to fingerprint a batch.

Examples

Link to a website

https://tools.p1902.in

The most common use — scan the code to open a URL on a phone. Keep links short so the matrix stays sparse.

Join a Wi-Fi network

WIFI:S:GuestWiFi;T:WPA;P:coffee-time;;

A Wi-Fi payload: modern phones prompt to connect on scan. Raise error correction to Q or H if you print it small.

Plain text note

Table 12 — scan to view today's menu

Any text works; scanners that don't recognize a URL just show the string as-is.

Frequently asked questions

What do the L, M, Q, and H error-correction levels mean?

They set how much of a damaged code a scanner can still recover: roughly 7% for L, 15% for M, 25% for Q, and 30% for H. Higher levels add redundant data, so the same payload is packed into a denser grid of smaller modules. Use L or M for clean digital display, and Q or H when the code will be printed small, curved, or overlaid with a logo.

Why does my QR code get denser when I add more text?

Capacity is not fixed. Numeric content packs tightest, alphanumeric less so, and arbitrary bytes such as a mixed-case URL least of all. As the payload grows the encoder steps up to a higher QR 'version' with a larger matrix, which is why a long link with tracking parameters produces a busier image than a short one.

Can I put a logo in the middle of the QR code?

Yes, within limits. A logo covers some modules, so it eats into the error-correction budget. At level H a scanner tolerates about 30% loss, which is usually enough to cover a small central logo. Keep the logo modest and test the result before printing, since capacity varies with payload length.

Do I really need the white margin around the code?

Yes. The empty border, called the quiet zone, is part of the QR specification, and many scanners fail to detect a code that sits flush against other content. This tool keeps padding around the preview for that reason — do not crop it away when you place the image.

How do I make a Wi-Fi or contact QR code?

A QR only stores text; special behaviour comes from a payload format the camera recognizes. For Wi-Fi, encode WIFI:S:NetworkName;T:WPA;P:password;; and phones will offer to join. For a contact, encode a BEGIN:VCARD block. Type the payload exactly and the tool encodes it verbatim.