QR code generator for URLs, Wi-Fi, contacts and more

Create a QR code for a URL, text, Wi-Fi, email, phone, SMS or contact card (vCard), choose colors and module shape, and save it as PNG, SVG or PDF. The codes are static: no expiry, no tracking.

Content

These are static QR codes: the content is stored in the code itself. No short links, redirects or scan tracking.

"https://" is added if you leave it out.

Design

The position patterns (the three corner squares, timing and alignment patterns) are always drawn as squares so the code stays easy to scan.

How to use

  1. Choose URL, Text, Wi-Fi, Email, Phone, SMS or Contact and enter the content.
  2. Optionally choose colors, module shape, error correction level, PNG size and quiet zone, then press "Create QR code".
  3. Check the preview and download PNG, SVG or PDF. If you change the content or settings afterwards, the code updates automatically.
  4. Before printing or publishing, check that the code scans with your own phone.

Notes and limits

  • How much fits depends on the error correction level: up to 2,953 bytes (L), 2,331 (M), 1,663 (Q) or 1,273 (H) of UTF-8 text. Characters outside basic Latin take 2 to 4 bytes each.
  • URLs must use http:// or https://. There is no link shortening, no redirect and no scan counting: only static codes.
  • A Wi-Fi QR code contains the password as plain text. Think about who can see the code before you print or share it.
  • Some older phones and apps cannot read Wi-Fi, SMS or contact codes. "SMSTO:" is a widely used convention rather than a formal standard; "sms:" is the RFC 5724 URI form.
  • Color pairs with less than 3:1 contrast are refused. Contrast below 4.5:1 and light modules on a dark background (inverted) show a warning. Dots and rounded modules can be harder to scan than squares.

How it works

The QR encoding itself (error correction, masking and version selection) is done by the MIT-licensed library qrcode-generator, which is loaded on this page only. Text is stored as UTF-8 bytes, so accented letters, Korean, Japanese and emoji work.

Wi-Fi uses "WIFI:T:WPA;S:network;P:password;;" with \ ; , : and " escaped by a backslash. Email uses "mailto:address?subject=…&body=…" with percent-encoding, and phone uses "tel:" with only + and digits.

SMS uses "SMSTO:number:message" or "sms:number?body=message". Contacts are vCard 3.0 (CRLF line endings) with \ , ; and line breaks escaped; names written in Han, kana or Hangul are shown family name first.

The three corner squares, timing patterns and alignment patterns are always drawn as squares whatever the module shape. Automated tests decode generated codes of every content type and shape with a QR reader library (jsQR).

The PNG uses a whole number of pixels per module, so it can be slightly smaller than the chosen size. SVG and PDF are vector drawings built from module coordinates and stay sharp at any size. The PDF page has the PNG size (1 px = 1 pt); pdf-lib is loaded only when you save a PDF.

The contrast ratio uses the WCAG relative luminance formula.

FAQ

Do these QR codes expire?

No. The content is encoded directly in the code, so it keeps working even without this site (for a URL, as long as the page it points to is online).

Which error correction level should I choose?

M, the default, is fine for most uses. Choose Q or H if the code may get dirty or damaged, or if you use dots or other styling. Higher levels make the pattern denser.

Can colored QR codes be scanned?

Yes, with dark modules on a light background and enough contrast. The tool refuses color pairs with too little contrast and warns about inverted colors.

Is my URL or Wi-Fi password sent anywhere?

No. The code is created in your browser. What you enter is not sent, stored or included in analytics.

Which format is best for printing?

SVG or PDF, because they are vector formats that scale without losing quality. PNG is convenient for email and web pages.

Last updated: