QOhMyQR

QR Code Generator

Turn any URL or text into a styled QR code. Live preview, instant download, no account.

Why I built this

I needed a QR code for my home WiFi guest network during a family gathering in February 2026 — a 가족 모임 where ten relatives showed up and immediately wanted the password. The first generator I tried put a watermark in the corner of the output ("Made with QRify.com"). The second required signup with email verification — I am not creating an account to generate a single QR code I will print once. The third had a clean UI and no watermark, but when I opened DevTools out of habit I watched the entire WiFi configuration upload to their server, including the password "Hello123!" sitting visibly in the request payload.

That last one was the breaking point. WiFi passwords are exactly the wrong thing to send to an unknown third party. Even if the site has good intentions, server logs persist, employees access them, and breaches happen. A QR code is a deterministic encoding of input bytes — it does not need a server to generate. The hosted sites upload your data because it lets them log it, not because they have to.

OhMyQR generates everything locally. Your WiFi password, business URL, vCard contact details, or sensitive payment URL never leaves your device. Built with qr-code-styling (open source) and rendered entirely in your browser. Three rules: (1) nothing uploads, ever, (2) no signup, no email, no watermark, (3) full styling controls — colors, dot styles, logos — without paywalls.

How it works under the hood

When you type content into the QR field, qr-code-styling computes the QR matrix in JavaScript: it chooses the smallest QR version that fits your data at your error- correction level, applies Reed-Solomon error correction codes, lays out the data modules around the timing patterns and finder squares, then applies one of eight mask patterns chosen to minimize same-color runs (which hurt scanning).

Rendering happens on an HTMLCanvasElement (for PNG output) or as an inline SVG element (for SVG output). Both are 100% client-side — the canvas pixel data and SVG DOM exist only in your browser memory. The "Download PNG" button calls canvas.toBlob() to produce a downloadable file; "Download SVG" serializes the SVG DOM to a string and offers it as a download. No fetch() calls at any stage.

Logo embedding works by drawing your logo image onto the center of the canvas after the QR is rendered. We automatically bump the error-correction level to H (~30% damage tolerance) so the central QR data can be visually obscured while the code remains scannable. The logo image itself is read via FileReader, never uploaded.

Verify yourself: open DevTools → Network tab, clear the log, type your URL or WiFi password, and click any download button. The list stays empty. The only network traffic is the initial page load, cached after first visit. Most competing generators cannot make this claim because their backend code generation runs on their server.

Real use cases

  • Home and 가족 모임 guest WiFi: Print one small QR on a card by the door. Family members and guests join with one tap on their phone camera. No more repeating the password 10 times.
  • Restaurant menu URLs: Korean cafes and restaurants increasingly print QR menus on tables. Static QR pointing to a Notion page or a simple menu site avoids the cost of dynamic-QR services.
  • Business cards (명함) with vCard: Print a QR that loads your full contact info into the scanner's phone book — name, phone, email, company, address — in one tap. Far better than typing a name into a search engine.
  • Event check-in URLs: Conferences, weddings, workshops — print QR on the invitation, scanner lands on the RSVP or schedule page.
  • Korean app-store deep links (네이버 톡톡, 카카오톡 채널): Print QR that opens the app directly to your business chat channel. Customers can ask questions without copying URLs.

vs other QR generators

How OhMyQR compares to popular QR generators as of May 2026:

FeatureOhMyQRQR Code GeneratorBitly QRqr-code-monkey
Free tierUnlimitedLimitedLimitedUnlimited
No upload to serverYesNoNoUnclear
No signupYesFor dynamic onlyFor analyticsYes
Logo embeddingYesPremiumPremiumYes
SVG exportYesPremiumPremiumYes
Dynamic QR (editable destination)NoYesYesNo
Analytics (scan tracking)NoYesYesNo
Source inspectableYesNoNoNo

Where competitors win: QR Code Generator and Bitly QR offer dynamic QR codes, where you can change the destination URL after the QR is printed. This is genuinely valuable for billboards, packaging, and marketing campaigns where you might want to redirect traffic later. They also offer scan analytics. Both features require server infrastructure (a URL shortener-like redirect) so we cannot match them as a pure client-side tool. For static QRs — most of what individuals and small businesses need — our tool is free, unlimited, and private.

What this can't do

  • Dynamic QR codes. You cannot change the destination URL after generation. For dynamic redirect QR, use Bitly QR or QR Code Generator's paid plans.
  • Scan analytics. No tracking of how many times your QR was scanned. Routing the QR through a URL shortener with analytics (bit.ly, your own short domain) is the standard workaround.
  • Bulk generation from CSV. One code at a time. For 100+ codes, use the qrcode npm package in a Node script or Python's qrcode library.
  • Audio QR or other niche encodings. Standard QR Model 2 only — no Micro QR, no rectangular QR, no Aztec, no Data Matrix.
  • QR codes that auto-fill forms. QR can contain URLs and text only. Auto-fill workflows require deep-link URLs that your destination site supports.

For dynamic QR with analytics, the established paid services (Bitly, QR Code Generator Pro) are worth their price for serious marketing campaigns. For bulk generation, scripting your own with Python or Node is faster than any web UI.

Customization options explained

Dot style changes the shape of every QR module: classic squares, rounded squares, dots, or the more decorative classy variants. Some scanner apps are a bit slower with very stylized codes, so always test on at least one phone before printing in volume.

Corner style targets the three big positioning squares in the corners. Rounded or dotted corners look more modern but, again, do a real scan test before you print 500 stickers. Old Android camera apps occasionally fail on heavily-stylized corners.

Error correction determines how much of the QR code can be obscured (by a logo, dirt, glare, or print smudge) before it stops scanning. Level L tolerates ~7% damage and produces a cleaner, denser code. Level H tolerates ~30% — required when you embed a logo in the center.

Tips for best results

Use dark dots on a light background. Inverted (light on dark) codes scan slower on most phones, and some camera apps refuse them entirely. If brand colors demand inversion, test with at least three phones first.

Leave at least a 4-module quiet zone. That is the empty margin every QR needs around its perimeter for the scanner's edge detection to work. Cropping too tight is the single most common QR failure mode in printed materials.

Print at minimum 2×2 cm for short URLs. Longer payloads need more area. Rule of thumb: every 50 characters of URL adds about 1cm to the minimum scan size. Test by printing a sample and scanning from typical viewing distance.

Use SVG for any printed material. PNG works at the rendered size but scales poorly. SVG renders sharp at any size, which matters if you reuse the same QR on a business card and a billboard.

Always scan with two different apps before mass production. Native iPhone camera, native Android camera, and at least one third-party scanner (Google Lens). Any QR that fails one of those is a QR that will frustrate users.

FAQ

Is the QR code free to use commercially? Yes — the QR Code specification is in the public domain. Denso Wave originally developed QR codes and explicitly granted free use of the encoding standard. Codes you generate here are yours to use on packaging, business cards, posters, ads, vehicle wraps, or anywhere else. No attribution required, no royalties, no licensing complications. The only legally protected element is the "QR Code" trademark itself, which means you cannot call your product "QR Code" without permission, but you can freely use codes that conform to the standard.

Does OhMyQR ever see my URL or content? No. The encoding happens entirely in your browser using the qr-code-styling JavaScript library. You can verify with DevTools → Network — no request is made to our server with the content of your QR. The matrix generation, dot positioning, error-correction encoding, and rendering all happen in browser JavaScript on your machine. This matters most for WiFi QR codes where the content includes your network password — uploading that to a stranger's server, even briefly, is exactly the wrong move.

What is the maximum data length? A QR code can hold up to ~4,296 alphanumeric characters or ~2,953 bytes (Version 40, error level L). But very long codes become extremely dense and hard to scan with a phone camera — modern smartphones can scan up to ~Version 25 (~1,200 chars) reliably; older phones struggle past Version 15 (~300 chars). For URLs longer than ~100 chars, use a URL shortener first (bit.ly, TinyURL, your own short-domain). The resulting QR is denser-readable AND lets you track scans, which a raw URL QR cannot.

Why does my colored QR not scan? Some scanner apps require strong luminance contrast. Try darker foreground (#000000 or close to it) and lighter background (#FFFFFF). Inverted codes (light dots on dark background) scan slowly on most phones — iPhone's built-in camera does it but reluctantly, while many Android camera apps fail outright. Pastel colors on cream backgrounds look elegant but are scanner-hostile. The reliable formula: foreground luminance under 30%, background luminance over 70%. Test with at least three different phones before printing.

Can I add my logo without breaking the code? Yes. Use the qr-with-logo tool — it automatically forces error-correction level H (~30% damage tolerance), which lets you cover the center with a small logo while the code remains scannable. Keep the logo under 25% of the code area for safety, ideally 15-20%. Logos with strong outlines (not gradients) scan more reliably because the QR scanner's edge detection is not confused by logo edges. White margin around the logo (clear space) improves scan rates noticeably.

PNG or SVG — which format should I use? SVG for any printed material (posters, business cards, packaging, vehicle wraps) — it scales infinitely without pixelation. A QR code at 8cm and at 80cm should look identical, and SVG guarantees that. PNG for screens, email signatures, social media graphics. SVG is also typically smaller in file size for simple QRs (a few KB vs 30-50 KB PNG). Print shops sometimes prefer SVG because their RIP software can re-rasterize at exact print DPI. The only downside of SVG: ancient platforms (some legacy CRM systems) only accept raster images.

Why would I use this instead of QR Code Generator or Bitly QR? Privacy and unlimited use. QR Code Generator (the well-known site) and Bitly require account creation for any code that uses dynamic redirection or analytics. Their "free" tier produces codes with no styling options and inserts limits. Our generator is fully featured (logos, colors, dot styles, vCard, WiFi) without signup. The trade-off: their dynamic QR feature lets you change the destination URL after the QR is printed, which is genuinely useful for billboards and packaging. We only do static QRs because dynamic requires server infrastructure. For printed marketing where redirect flexibility matters, their paid product is the right pick.

Can I create a WiFi QR code that auto-connects? Yes — use the WiFi QR mode (different tool on this site). Modern iPhones (iOS 11+) and Android phones (Android 10+) recognize WiFi QR codes and prompt to join the network with one tap. The encoding standard is "WIFI:T:WPA;S:NETWORKNAME;P:PASSWORD;;" — anyone can scan it and copy the password as plain text out of the QR, so do not put your QR on social media or in any public posting. For guest WiFi at events or rentals, post the QR somewhere only authorized people see.

What error-correction level should I choose? Level M is the safe default — ~15% damage tolerance, balances density and resilience. Choose L (~7%) for the cleanest, sparest-looking code when you control the display surface and know no damage will occur (a digital screen, fresh print). Choose Q (~25%) for printed materials that might get wear (business cards in wallets, stickers in transit). Choose H (~30%) when embedding a logo or printing on rough material (fabric, cardboard with texture). Higher correction makes the QR denser, which means more pixels per area — for very small prints, this can actually hurt scannability.

My QR scans but the URL it opens is wrong — what happened? Almost certainly a copy-paste artifact. Common issues: hidden Unicode characters in the URL (zero-width spaces, smart quotes), missing protocol (use https:// not just www.), or trailing whitespace. Open the QR text field, manually retype the URL, and regenerate. For tracking parameters, double-check there is no extra "?" before the query string. Also confirm the URL works in a browser before encoding it — a QR is just a pixelated URL, so if the URL is broken, the QR is broken.

You might also like

Part of the OhMy* tools family