How Snapkit Generates QR Codes in Your Browser

What the Snapkit homepage actually does: client-side payloads, PNG export size, which fields exist per type, and what we store only if you use dynamic codes.

Andrei Haiducu
7 min read

Most QR sites upload whatever you type, render a code on a server, and keep a copy. Snapkit’s free generator on the homepage does not work that way. The page is a JavaScript app. It formats your input in the tab, draws a QR on a canvas, and lets you download a PNG. If you never create an account, the URL, Wi‑Fi password, or vCard you typed is not a record in our database.

I built it this way because the usual “paste a link, we email you a login” loop is why people bounce. It is also why AdSense reviewers treat QR tools as empty utilities: the product looks like a black box. This article is the missing product documentation—what the controls do, what the file is, and where the privacy line actually is.

Flow: type in the browser, JavaScript formats the payload, canvas draws a QR, PNG downloads locally

What leaves the browser, and what does not

You are doingData Snapkit receivesData that stays on your device
Static QR on / (no account)Normal page analytics (if you have not opted out of cookies)The payload: URL, text, Wi‑Fi PSK, vCard fields, SMS body, mailto draft, phone number
Custom colors / logo / dot style (paid customization)Account / entitlement check so we know you can download a styled fileThe logo file you pick is read locally for the canvas
Dynamic QR (signed in)Destination URL, name, short code, later scan metadataThe printed pattern still encodes only our short link
Scanning someone else’s codeNothing from their camera—we are not a scanner appn/a

The legal detail lives on the privacy policy. The practical version: do not treat a static download as “Snapkit has my Wi‑Fi password.” Treat the print as public. Anyone who photographs the code can decode it. We never needed a copy to make the PNG.

How a static code is built

  1. You pick a type tab: URL, Text, Wi‑Fi, Contact, SMS, Email, or Phone.
  2. The form builds a string. Empty required fields produce no downloadable code (the preview shows a placeholder).
  3. A 300 ms debounce updates the preview so we are not redrawing on every keystroke.
  4. Preview canvas is 256 px. Download renders closer to 1024 px PNG so you are not printing a screenshot of the widget.
  5. There is a practical length cap (warning near 1,000 characters, trouble past about 1,200). Denser payloads need a larger print.

After the JavaScript has loaded, you can lose the network and still generate static codes. You cannot create or edit dynamic codes offline; those need an account and our redirect service.

Fields the tool actually has

I am listing only what the form exposes. If a field is not here, Snapkit does not generate it—even if the underlying spec allows more.

TypeYou enterWhat gets encoded
URLAddressThe string as typed (add https:// yourself)
TextFree textExact text
Wi‑FiSSID, password, WPA/WEP/nopass, hidden checkboxWIFI:T:…;S:…;P:…; plus H:true; if hidden
ContactName, phone, email, optional company / website / addressvCard 3.0 (FN, N, TEL, EMAIL, ORG, URL, ADR)
SMSNumber, optional messageSMSTO:number:message
EmailAddress, optional subject and bodymailto: with encoded query params
PhoneNumbertel: plus the number

Not in the Contact form: job title, photo, second phone, birthday. The vCard guide explains the format; the homepage will not emit TITLE: unless you paste a full vCard into Text (phones then may or may not offer Save Contact).

Not a separate tab: calendar events, geo: pins, Bitcoin. Use URL mode with a maps or wallet link, or Text for a raw string. There is a dedicated article on Bitcoin wallet codes if that is the job.

Dynamic toggle appears for URL only. A Wi‑Fi password is not a redirect. You cannot remotely change a printed WIFI: or tel: string.

PNG export, not SVG

The download button saves PNG. That matches what most printers and Canva-class tools expect. We do not currently hand you an SVG from this button. If you need vectors for a billboard, that is a different workflow—see PNG vs SVG—but do not assume the homepage exports SVG.

For print DPI math and quiet zone, use the existing print and size guides. A 1024 px file at 300 ppi is roughly 3.4 inches on a side before you scale. Scaling down is fine. Scaling a 256 px screenshot up is how edges go mushy.

Customization (what is gated)

The homepage can change module color, background, corner/dot style, and a center logo. Those downloads are entitlement-gated (signed-in plan or trial). The default black-on-white static code is not. Contrast still matters more than branding; light gray on white will fail for the same reasons as in the color guide.

A logo spends error-correction budget. Keep it small and test on an iPhone and an Android after you apply the real print finish.

Dynamic codes are a different product

If you check “make this dynamic” on a URL, you are no longer in the fully local path. The printed QR encodes a short Snapkit link. We store the destination so you can edit it and, on paid plans, see scan counts. That is documented on /dynamic and in static vs dynamic.

Static PNGDynamic short link
AccountNot requiredRequired
Edit after printNoYes (destination)
Works if Snapkit is downYes (data is in the picture)Scan hits our redirect first
AnalyticsNoYes, per plan
Wi‑Fi / vCard / SMS / email / phoneYesURL destinations

Use static for Wi‑Fi signs, vCards, and anything that must work at a wedding with dead LTE. Use dynamic when the landing page will move and the print cannot.

A short “is this working?” list

  • Preview is not a download. Use the button; do not screenshot the 256 px box for a press run.
  • Scan the PNG on a second phone before you order 500 cards.
  • If the camera locks but the action is wrong, you used the wrong tab (text vs URL vs mailto:).
  • If the camera will not lock, it is size, contrast, or crop—not “the generator is broken.” Start at QR code won’t scan.
  • Wi‑Fi join failures after a good scan are usually SSID typos, encryption type, or a password you rotated. The Wi‑Fi guide covers the WIFI: string.

Who writes this

I am Andrei Haiducu. I operate Snapkit through Haiducu Development. If this description does not match what you see on the site, email hello@haiducu-development.com—that is a product bug, not a “contact form.” More on About and Contact.

The generator is the product. This page exists so a human (or a reviewer) can see how it works without inventing a server we do not have.

Ready to create your QR code?

Try Snapkit's free QR code generator - no signup required.

Generate QR Code