QR code generator

Create QR codes entirely in your browser. Choose templates, customise colours, and export as PNG or SVG.

Appearance

Output

Preview (PNG)

How QR codes work

QR codes encode data into black and white modules. Position markers and timing patterns help scanners orient themselves, while error correction recovers information if the code gets scratched or smudged.

Data capacity

  • Version 1 (21×21 modules) stores up to 25 alphanumeric characters.
  • Version 40 (177×177 modules) stores up to 4,296 alphanumeric characters.
  • Auto-sizing chooses the smallest version that fits your content.
  • Binary mode stores arbitrary bytes such as URLs or JSON payloads.

Error correction levels

Level Recovery When to use
L (7%) Recovers ~7% of damaged modules. Large posters or indoor signage.
M (15%) Recovers moderate damage. General purpose marketing material.
Q (25%) Handles heavy wear. Outdoor displays, packaging.
H (30%) Maximum redundancy. Codes with logos or high-risk environments.

Design and deployment checklist

These tips keep your QR codes scannable across devices, printing methods, and lighting conditions.

Preserve contrast

Dark foreground on a light background gives scanners the highest success rate. Avoid gradients that reduce contrast.

Keep the quiet zone

Leave at least four modules of whitespace around the code. Cropping or adding graphics too close breaks detection.

Test before print

Scan the final size on multiple phones. If the code links to a URL, include HTTPS and ensure the destination is mobile friendly.

Quick question

Do you typically encode short URLs or larger vCard/contact payloads into QR codes?

JavaScript (qrcode)

import QRCode from 'qrcode';

async function createQr(text) {
  const svg = await QRCode.toString(text, {
    type: 'svg',
    errorCorrectionLevel: 'M',
    margin: 4,
    color: { dark: '#000000', light: '#FFFFFF' }
  });
  return svg;
}

createQr('https://www.hashytools.com').then(console.log);

Python (qrcode)

import qrcode

def create_qr(data: str, path: str = 'qr.png') -> None:
    qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=10, border=4)
    qr.add_data(data)
    qr.make(fit=True)
    img = qr.make_image(fill_color='black', back_color='white')
    img.save(path)

create_qr('WIFI:S:MyNetwork;T:WPA;P:SuperSecret;;')

QR code FAQ

What information can I encode in a QR code?

You can encode plain text, URLs, Wi-Fi credentials, vCards, email drafts, and SMS messages. The HashyTools templates guide you through each format.

How does error correction affect QR codes?

Higher error correction levels (Q or H) let scanners recover data if the code is damaged, but they reduce available capacity. Choose a level based on your deployment environment.

Can I customize colors and size safely?

Yes. Maintain strong contrast, keep the quiet zone, and export at a resolution suitable for your print size or choose SVG for crisp scaling.

Does the generator upload my content?

No. QR codes render entirely in your browser—your text, credentials, or contact details never leave the page.

How can I verify that the QR code works?

Scan the code with multiple devices under the same lighting you expect in production. Validate the destination content and confirm the print layout preserves clarity.