📱 QR Code Generator
Generates QR codes entirely in your browser — nothing is uploaded. Static and permanent, so they never expire, need no account, and carry no tracking redirect.
Recovers ~15%. The usual default.
Version 2 · 25 × 25 modules · level M · 26 of 26 bytes used
Static and permanent. It encodes your content directly, so it works offline, never expires, and there is nothing to keep paying for.
What QR Code Generator Does
A QR code is not a link to your data — it is your data, drawn as squares. That single fact decides most of what matters about a generator, because it means a code built from your actual content will keep working forever, with no account, no service and no internet connection in the middle.
The catch is that most generators do not do that. The top result for this search ships with scan tracking switched on by default, which quietly makes the code point at the provider's own domain instead of yours. That buys you editable destinations and scan counts, and it costs you permanence: when the subscription lapses or the company sunsets the product, every printed code becomes a dead link. It is why "static QR code generator" and "free static QR code generator" both appear in Google's own related searches for this term.
The other thing worth caring about is where the encoding happens. People put Wi-Fi passwords and personal contact details into QR codes. Every other generator builds the image on a server, which means that content is uploaded. This one does not — the encoder runs in your browser, and you can prove it by turning off your internet connection and generating a code anyway.
What follows explains what the pattern actually contains, why codes get bigger as you add text, and how to pick an error-correction level, because those three questions cover almost every real problem people have with QR codes.
How to Use QR Code Generator
- Pick what the code should contain — a URL, plain text, Wi-Fi details, a contact card, email, SMS or a location
- Fill in the fields; the code redraws as you type, with nothing leaving your browser
- Choose an error correction level, and set the colors and size if you need them
- Download as PNG for screens or SVG for print, where it scales to any size without blurring
Formula Used by QR Code Generator
What the pattern is made of
finder patterns + timing + format info + data + Reed-Solomon error correction
- Finder patterns
- The three big squares. They let a scanner locate and orient the code from any angle
- Timing patterns
- The dashed lines between them, which tell the scanner the module grid size
- Format info
- 15 bits stating the error-correction level and which mask was applied
Worked example
A short URL at error correction M
- Content is encoded to bytes
- Reed-Solomon parity bytes are appended
- Everything is laid out in a zig-zag around the fixed patterns
Result: A version 2 code — 25 × 25 modules
Versions — the 40 fixed sizes
modules per side = version × 4 + 17
- Version 1
- 21 × 21 modules, the smallest
- Version 40
- 177 × 177 modules, the largest
Worked example
Working out three sizes
- Version 1: 1 × 4 + 17 = 21
- Version 10: 10 × 4 + 17 = 57
- Version 40: 40 × 4 + 17 = 177
Result: The generator picks the smallest version your content fits, which is why adding text steps the size up
Error correction is Reed-Solomon
Parity bytes are computed over GF(256), so a lost byte can be reconstructed
- Level L
- About 7% of the code can be lost and still read
- Level H
- About 30% — which is what makes center logos possible
Worked example
The same 50-byte URL at each level
- L: version 3, 29 × 29
- M: version 4, 33 × 33
- Q: version 5, 37 × 37
- H: version 6, 41 × 41
Result: Higher recovery means a bigger, denser code for identical content
Masking — why two codes for the same text look different
Eight mask patterns are tried; the one with the lowest penalty score wins
- Why
- Large blank areas or accidental finder-like patterns confuse scanners
- Penalty rules
- Long same-color runs, 2×2 blocks, false finder patterns, and straying from a 50/50 dark ratio
Worked example
Encoding the same string twice with different settings
- Each of the 8 masks is XOR-ed over the data modules
- Each result is scored
- The lowest score is kept and recorded in the format bits
Result: Two generators can produce visually different but equally valid codes for identical text
Maximum capacity by error correction level
Bytes of UTF-8 content at version 40, the largest code. Note the cost of recovery: level H holds roughly half what level L does. These figures are computed by the encoder on this page and match the ISO/IEC 18004 tables.
| Level | Recovers about | Max bytes | Typical use |
|---|---|---|---|
| L | 7% | 2,953 | Screens, clean conditions, smallest possible code |
| M | 15% | 2,331 | The general-purpose default |
| Q | 25% | 1,663 | Print, packaging, outdoor |
| H | 30% | 1,543 | Harsh conditions, or a logo over the center |
How content length drives the size
At error correction M. The generator always picks the smallest version that fits, so the code grows in steps rather than smoothly.
| Content | Version | Modules |
|---|---|---|
| 25 bytes — a short URL | 2 | 25 × 25 |
| 50 bytes — a full URL with a path | 4 | 33 × 33 |
| 100 bytes — a URL with parameters | 6 | 41 × 41 |
| 200 bytes — a short vCard | 10 | 57 × 57 |
| 2,331 bytes — the maximum at this level | 40 | 177 × 177 |
Static against dynamic
The distinction the top results do not lead with, and the reason four of Google's eight related searches for this term contain the word "static" or "offline".
| Static — what this tool makes | Dynamic | |
|---|---|---|
| What the pattern holds | Your actual content | A short link on the provider's domain |
| Editable later | No | Yes |
| Scan analytics | None | Yes |
| Needs an account | No | Almost always |
| Works if the provider disappears | Yes | No — the code dies |
| Works with no internet at scan time | Yes, for offline content like Wi-Fi | No |
| Ongoing cost | None | Usually a subscription |
What each content type encodes
These are plain-text conventions that phone cameras recognize. You can read any of them by scanning the code with a generic reader.
| Type | Encoded as | What the phone does |
|---|---|---|
| URL | https://example.com | Offers to open it |
| Wi-Fi | WIFI:T:WPA;S:name;P:password;; | Offers to join the network |
| Contact | A vCard block | Offers to save a contact |
| mailto: with subject and body | Opens a pre-filled draft | |
| SMS | SMSTO:number:message | Opens a pre-filled message |
| Location | geo:latitude,longitude | Opens the map app |
| Text | The text itself | Displays it |
How to Read Your Result
The tracking toggle is the business model
A dynamic QR code is genuinely useful when you need to change a destination after printing, or want to know how many people scanned a poster. But it is worth understanding the trade you are making: the printed pattern no longer contains your URL, it contains theirs. The code is only as durable as the company, the domain and your subscription. For a business card, a restaurant menu, a Wi-Fi sticker or a product label — anything you would rather not have to reprint — a static code is the safer default, and it is free forever because there is nothing to host.
A Wi-Fi QR code is a password in plain sight
The Wi-Fi format is not encrypted or obfuscated in any way; the password sits in the pattern as readable text, and any generic QR reader will show it. That is fine for a guest network on a café wall and a bad idea for your main network. Encode a guest SSID rather than the one your devices use, and remember that a photograph of the sticker is as good as the password. The upside of generating it here is that the password is never transmitted while you make the code.
Choosing an error-correction level is a size trade
Higher levels do not make a code more reliable in the abstract — they make it more tolerant of damage, at the cost of being physically denser for the same content. A dense code printed small is harder to scan, which can leave you worse off. For a screen or a clean print, M is almost always right. Reach for Q or H when the code will be on packaging that creases, a surface that gets dirty, or when a logo will sit over the middle, which is only possible because level H can lose 30% of the pattern and still decode.
Print size, quiet zone and contrast
Three practical rules cover most scanning failures. Keep the quiet zone — the blank margin, four modules wide, included in the downloads here — because a code butted against artwork often will not read. Keep good contrast and, crucially, keep the dark modules darker than the light ones; inverted codes fail on many readers. And scale for distance: a common rule of thumb is that the code should be at least a tenth of the scanning distance across, so a code read from two meters wants to be around 20 cm.
Why SVG is the better download for print
A QR code is a grid of hard-edged squares, which is exactly what vector formats are good at and exactly what bitmap scaling ruins. A PNG enlarged for a poster develops soft, gray module edges that reduce the contrast a scanner depends on. The SVG here is generated from the same module matrix as the on-screen code and scales to any size with perfectly sharp edges. Use PNG for screens and messaging apps, SVG for anything going to a printer.
Verifying that nothing is uploaded
Any page can claim it works locally. You can check this one: open your browser's developer tools, watch the network tab while you type into the fields, and see that no request is made. Or simply disconnect from the internet and generate a code — it still works, because the encoder is JavaScript already running on the page. That test is the reason this tool stopped calling an external image API, and the reason it is worth the code to do the encoding here.
Limitations & Accuracy Notes
- Logos, gradients and custom module shapes are not supported. QRCode Monkey and the commercial generators do all three; if branding matters more than local encoding, they are the better choice.
- Downloads are PNG and SVG only. PDF and EPS, which some print workflows want, are not produced here.
- Content is encoded in byte mode, which handles any UTF-8 text. Generators that also use numeric and alphanumeric modes can fit slightly more digits or uppercase characters into the same size code.
- These are static codes by design, so the destination cannot be changed after the code is printed, and there are no scan analytics. That is the trade being made deliberately.
- The maximum is 2,953 bytes, and codes near that limit are extremely dense. Long content is usually better handled by encoding a short URL that points to it.
- Nothing here validates that a URL works or that a Wi-Fi password is correct — it encodes exactly what you type, mistakes included. Always scan the finished code with a phone before printing it.
Frequently Asked Questions
Is my data sent anywhere?
What is the difference between a static and a dynamic QR code?
Do these QR codes expire?
Which error correction level should I choose?
Why did my QR code get bigger when I added more text?
How much can a QR code hold?
References & Further Reading
- ISO/IEC 18004:2024 — QR code bar code symbology specification — The international standard this encoder implements, 4th edition published August 2024: versions, error-correction levels, Reed-Solomon parameters and the masking rules
- NIST Computer Security Resource Center — glossary: Reed-Solomon — US reference for the error-correcting code family that lets a damaged QR code still be read
- QRCode Monkey — FAQ on static codes — The strongest free competitor, and the clearest competing statement that its codes are static and do not expire; its 14-plus content types are the coverage benchmark
- Federal Trade Commission — consumer alert on malicious QR codes — US government guidance on QR code scams, and the reason to check where a scanned code actually leads before acting on it