Private QR generator
QR codes in the browser — private, custom, no signup
URL, WiFi, vCard, colors and logo. Drawn on this device. No watermark, no daily limit, nothing uploaded.
Error correction
Size (px)
Quiet zone
Logo (optional)
Preview
Enter a payload to mark it
0 bytes
How it works
01
Choose a type
Link, WiFi, card, or plain text. The payload never leaves this tab.
02
Mark it
Colors, size, optional logo. Preview updates in the browser.
03
Download
PNG for logos and share sheets. SVG for clean print. Nothing was uploaded.
A QR generator that does not take your payload
Most “free QR” pages send the URL, the WiFi password or the vCard to a server, stamp a logo on the result, and ask for an account if you want the watermark gone. Mark does the opposite job: it draws a static QR code in this tab. The string you type is encoded with the qrcode library and Canvas. Nothing in that string is posted to a QR API.
Use it when the payload itself is the thing you do not want to hand to a stranger’s backend — a guest network password on a café counter, a personal phone number on a conference badge, a private link that should not sit in someone else’s log. The code you download is a PNG or an SVG file on your device. It does not phone home when someone scans it. There is no scan counter, because that would require a redirect we do not run.
What you can encode
The switcher at the top of the page covers seven payload types. URL is the default: if you omit the scheme and the text looks like a host, Mark prefixes https://. Plain text is encoded as-is. WiFi follows the common WIFI:T:S:P:: convention, with escapes for semicolon, comma, colon and backslash so an SSID like “Cafe;Main” does not break the parser. vCard 3.0 carries name, organisation, title, phone, email and a site. Email, phone and SMS use mailto:, tel: and SMSTO: so the camera can open the right app.
You pick error correction (L, M, Q, H), pixel size 256 / 512 / 1024, and a quiet zone of 2, 4 or 8 modules. Foreground and background colors default to near-black on white. If the contrast drops below roughly 4.5:1, a warning appears. A logo is optional; when you add one, error correction is forced to H and the mark stays in the centre so the three finder patterns remain readable. SVG download is disabled while a logo is on — a logo is not a vector of modules.
Scan before you print, and do not encode traps
A QR code is just a pointer. If the pointer is a phishing URL, a network you do not control, or someone else’s vCard, the scanner will still open it. Mark does not inspect destination pages and does not refuse a URL because it looks hostile. That is your responsibility. Test every code with the same kind of phone you expect visitors to use, in the lighting you expect, at the size you will print. A 256-pixel PNG on a glossy poster across a room is a different problem from a 1024-pixel SVG on a table tent.
Dynamic QR products replace the payload with a short URL they own, then count scans. That is a useful product for campaigns. It is also an upload plus a dependency: if that vendor disappears, the printed sticker dies. Mark’s codes are static. Reprint if the link changes. There is no dashboard.
What happens to the data
Payload strings and logo bytes live in memory for the session. Closing the tab drops them. We do not keep an account, a history or a cloud folder of your codes. Google AdSense may collect ordinary anonymised usage after you interact with the site; that is not the WiFi password and not the vCard. Hosting access logs can see IP and path. They cannot see the Canvas.
iOS Safari, current Chrome and Firefox are the browsers we care about. HEIC logos are rejected with a pointer to convert first. There is no daily quota. If a payload is too long for any QR version, you get a sentence, not a white screen. Guides: how to generate a code, guest WiFi, print and packaging, events, troubleshooting scans. Delivery of the PNG: iPhone Files vs Photos, WhatsApp recode of the modules, Android Camera vs Lens.
Questions
Does my URL, WiFi password or vCard leave this device?
No. Mark encodes the payload in this browser tab with a JavaScript library and Canvas. We do not POST the text, the WiFi password, the vCard fields or the logo file to a QR API. Closing the tab drops the in-memory strings. Hosting logs may record that you requested a page, not what you typed into the generator.
Do I need an account?
No. There is no signup, no email gate and no login wall before download. The generator is the homepage.
Is there a watermark or a daily limit?
No watermark is drawn on the PNG or SVG. There is no credit counter. The only ceiling is what the device can render: very long payloads hit QR capacity, and a huge logo may be rejected.
Does it work on iPhone Safari?
Yes. iOS Safari is a critical path. Download uses a file link; if iOS ignores the download attribute, use Share. Clipboard copy is extra and may be blocked — Download still works. HEIC logos are not read here; convert the logo first.
Should I download PNG or SVG?
SVG is a vector of the modules. Use it for print when there is no logo. A logo is a raster overlay, so that path is PNG only — the SVG button stays off so we do not pretend a flattened bitmap is lossless vector.
Can I put a logo in the code?
Yes, a PNG, JPEG, WebP or SVG logo, centered, about 18% of the square, with a pad so finder patterns at the three corners stay clear. Mark forces error correction H when a logo is present. Always scan the result with your own phone before you print a run of stickers.
Will a colored QR still scan?
Dark modules on a light background scan most reliably. If the contrast between foreground and background falls below about 4.5:1 we show a warning. You can still download; some cameras will fail. Yellow on white is a typical miss. Keep a quiet zone (the margin) around the modules.
Can I make a guest WiFi QR?
Yes. Switch to WiFi, enter the SSID, choose WPA/WPA2, WEP or open, and the password. Mark builds the WIFI:T:…;S:…;P:…;; string, including escapes for ; , : and \. A phone camera can join without typing the password. Do not encode a network you are not allowed to share.
Why is this on a vercel.app URL — is that safe?
qr-local.vercel.app is the public HTTPS host for this app. HTTPS is valid and there is no password on the site. The subdomain is not a custom brand domain. Safety of the code you generate depends on the URL or WiFi you type, not on the host name. We do not sell a short-link redirect in front of your payload.
When do ads appear, and do you ask people to click them?
AdSense code is in the document head for site review. Visible ad units stay off until the site is Ready in AdSense. We never ask you to click ads. Primary actions — generate, download PNG, download SVG — stay clear of ad slots.
Who runs Mark and how do I get in touch?
Mark is operated by Ultimatum. Email ultaultimatum@gmail.com with the page URL, browser, and what you expected. Do not send WiFi passwords or personal vCards to that inbox — we will not encode them for you, and you should not put secrets in email.
What is Mark not?
It is not a dynamic QR platform, not a click tracker, not a URL shortener, and not a phishing filter. It does not store a history in the cloud. If you need scan counts or a code you can edit after printing, you need a different product with a server.
Why did a long text fail?
QR versions have a byte ceiling. A paragraph, a huge vCard or a data URL can exceed it. Mark shows “Shorten this text — QR capacity exceeded” instead of crashing. Split the content or link to a page that holds it.
Does the code keep working if I go offline?
After the page and script have loaded, encoding does not need a network call. The first visit still loads the app over HTTPS. We do not ship a service-worker cache of your payloads. Refreshing without a network may fail if the browser dropped the document.
I saved the QR from Safari. Why does the print shop say it is a photo, not a PNG?
Share → Save Image lands in Photos. Photos is a camera stack; iOS may recode. Download or Share into Files if the print shop must keep the bytes Mark wrote. The short Safari note lives on troubleshooting; the Files vs Photos split is the iPhone page.
I sent the QR as a WhatsApp photo and it will not scan. Did Mark encode it wrong?
Usually not. Photo send recodes the square into their JPEG and often rounds the bubble. Module edges die. Send the PNG as a document, or have them scan your screen. Mark does not sit inside WhatsApp.
Android Camera reads it, Lens does not — or the other way around. Which is the bug?
Neither is Mark. Camera, Lens and a gallery share-sheet are three pipelines. Gallery recompress is a fourth. Save from Chrome into Files/Downloads and scan that file, not a screenshot of the chat.
Is Email in the type switcher a page about mailing the PNG?
No. Email is a mailto: payload. There is no /email article. Attach the PNG from Files if you must mail it. Do not confuse that with the Email type on the generator.
Can Mark read a photo of a printed QR?
On the print page, drop a PNG, JPG or WebP of the paper. jsQR runs in this tab and shows the payload. There is no camera and no /scan URL. We do not open the decoded URL for you.