Build a scan-safe QR with gradients, organic modules, a transparent logo and custom captions. Export the exact result as PNG or standalone SVG — all processing stays in your browser.
Link to a document that's already hosted somewhere, or embed a small file's actual bytes into the QR itself — no hosting needed, but only files small enough to fit will encode.
Embedding {{documentFileName}} ({{documentFileSizeLabel}}) directly — if it's too large to fit, the error below will say so.
When scanned, prompts the device to join a Wi-Fi network.
When scanned, offers to save a contact card.
When scanned, opens the location in Maps.
When scanned, starts a phone call.
When scanned, opens a pre-filled email.
When scanned, opens a pre-filled text message.
When scanned, offers to add this event to the calendar.
When scanned, opens your social profile. Enter just your handle — the link is built for you.
Links to {{socialFullUrl}}
A colored ribbon with a speech-bubble tail, attached under the QR.
Paste CSV rows for the content type selected above — one QR per row, styled the same as the preview, exported together. A header row is optional; columns: {{batchColumns.join(', ')}} (filename is optional on every type).
Rendering {{batchProgress.index}} of {{batchProgress.total}}…
The QR is generated at full resolution then styled — gradients, rounded or dotted modules, a logo — while the underlying data and error-correction level stay untouched, which is why the "scan check" re-decodes the rendered image to confirm it still reads back the original text.
Higher error correction (Q/H) tolerates more visual styling and a bigger logo before scanning breaks, at the cost of a denser code.
Batch generation reuses the exact style set above and the same scan check as the live preview — each row is rendered, re-decoded from its own styled pixels, and only then added to the ZIP, so a row marked "scan check passed" is verified the same way the single QR above is, not just assumed to work because the data fit.
Rendering, styling, batch export and decoding all happen locally on a canvas in your browser. Nothing — including the content you encode, a batch CSV, or any image you decode — is uploaded.