Generate QR codes that never expire
This generator encodes your content directly into the QR image — no redirect server, no tracking, and no expiry — so the code keeps working as long as QR codes exist. It’s for anyone putting a link, WiFi password, or contact card on a poster, menu, label, or slide who wants a permanent, downloadable code.
From text to scannable image
The tool runs the open-source qrcode library
locally. Your text is rendered onto a <canvas> and exported to a PNG via
canvas.toDataURL("image/png"), and separately rendered as an SVG string for a
vector download. You control the pixel size (80–1024), the foreground and
background colors, and the error-correction level, which sets how much
redundancy is built in so the code still scans when partly obscured.
Under the hood, every QR code follows the same published standard — ISO/IEC 18004, the symbology specification originally developed by Denso Wave in 1994. The standard defines 40 versions (sizes) from 21×21 modules up to 177×177 modules, four error-correction levels based on Reed–Solomon codes, and the alternating mask patterns that keep the black/white balance scannable. The library picks the smallest version that fits your content at the chosen error-correction level, so short URLs produce compact, fast-scanning codes automatically.
Example
Encoding https://gera.tools at 320 px with level M produces a code with ~15%
error correction — enough to survive a small smudge or a tight crop. Bumping to
level H raises that to ~30%, the right choice if you place a logo in the centre.
The trade-off is density: the same URL at level H needs more modules than at
level L, so each module is smaller at the same pixel size and slightly harder to
scan from a distance. Pick the lowest level that survives your real-world
conditions.
Error-correction levels
| Level | Recovery | Best for |
|---|---|---|
| L | 7% | Clean digital displays |
| M | 15% | General use (default) |
| Q | 25% | Printed labels that may scuff |
| H | 30% | Codes with a logo overlay |
Capacity: how much fits in one code
Capacity depends on the version (size) and error-correction level. At the largest size (version 40) with the lowest error correction (L), a single QR code holds up to 7,089 numeric digits, 4,296 alphanumeric characters, or 2,953 bytes of arbitrary data, per the ISO/IEC 18004 capacity tables (also published by the format’s inventor at qrcode.com). In practice you should stay far below the maximum: dense codes need larger prints and better cameras. A short URL of 30–50 characters produces a version 2–3 code that scans instantly; a 500-character vCard produces a dense grid that struggles on older phones. If your URL is long, shorten the path — not with a third-party redirect, but by serving a shorter permanent URL on your own domain.
Quiet zone, module size and print quality
Two physical details decide whether a printed code scans reliably:
- Quiet zone. The standard requires a blank margin of at least 4 modules on every side. Cropping the margin away — a common design mistake — is the single most frequent cause of codes that refuse to scan. The downloads from this tool include the margin; keep it when placing the code in a layout.
- Module size. Each individual black/white square should print at roughly 0.5 mm or larger for phone scanning at arm’s length. Combined with the distance rule of thumb (code width ≥ 1/10 of scanning distance), a code meant to be scanned from 3 metres — say, on a conference banner — should be at least 30 cm wide.
Choosing the right format: PNG or SVG
PNG is the right choice for most everyday uses — website embeds, presentations, PDFs, and social media. Set the pixel size large enough for the intended use: for a slide viewed on a screen, 400–600 px is comfortable; for an email signature, 200 px is usually enough.
SVG is the right choice whenever the code will be printed, enlarged, or placed in a document that may scale. An SVG QR code remains sharp at any size because it is made of vector paths rather than pixels. Print designers, signage companies, and anyone creating physical labels should always request the SVG and resize it in their layout software.
Static versus “dynamic” QR codes
This generator produces static QR codes — the URL or text is encoded permanently into the image. Scanning it always returns exactly the text you entered, with no server involved. The code never expires and never stops working, even if this website goes offline.
“Dynamic” QR code services route through a redirect: the QR code encodes a short URL on the provider’s server, which redirects to the real destination. This allows editing the destination after printing, but it also means the code breaks if the service is discontinued, if your account lapses, or if the company changes its pricing model. For permanent uses — business cards, packaging, permanent signage — a static code is safer.
What can be encoded
- Plain URLs:
https://example.com/page - Phone numbers:
tel:+441234567890 - Email with subject and body:
mailto:[email protected]?subject=Hello&body=From+the+QR+code - SMS:
smsto:+441234567890:Message text - Wi-Fi credentials:
WIFI:T:WPA;S:NetworkName;P:passphrase;; - vCard contact data (structured format — see the dedicated vCard QR tool)
Everything is generated locally in your browser — your content is never uploaded.