A QR code generator that runs entirely offline, with a QR encoder written from scratch — no libraries, no CDN, no tracking redirect in the middle of your codes.
Most free QR generators quietly wrap your URL in their redirect domain. If they go out of business or start charging, every code you already printed stops working. QRForge encodes your content directly into the QR symbol, so the code keeps working forever.
- Five content types, each producing a correctly formatted payload:
- URL / plain text
- Wi-Fi network (
WIFI:— WPA / WEP / open, hidden networks, correct\escaping) - Contact card (vCard 3.0)
- Email (
mailto:with URL-encoded subject and body) - SMS (
SMSTO:)
- All four error-correction levels (L / M / Q / H)
- Custom foreground and background colours, with a WCAG contrast warning when the combination is likely to defeat scanners
- Adjustable quiet zone (0–10 modules) and export size up to 2048 px
- Download as PNG or SVG, or copy the SVG to the clipboard
- Live readout of the chosen QR version, module count, mask pattern and payload size
- Full UTF-8 support (accents, CJK, emoji)
qr.js is a dependency-free QR Code encoder implementing:
- Byte-mode encoding with UTF-8, versions 1–10, all four EC levels
- GF(256) arithmetic and Reed–Solomon error correction
- Correct block splitting and data/ECC interleaving for every version and level
- Finder, separator, timing and alignment patterns; dark module; format and version information (BCH-encoded)
- All 8 mask patterns, scored with the four standard penalty rules, with the best one chosen
It exposes QR.encode(), QR.toSvg() and QR.toCanvas(), and works in both the browser
(window.QR) and Node (module.exports).
The encoder was validated by generating codes and decoding them back with
jsQR, an independent decoder. All 17 cases pass — every EC
level, versions 1 through 10, UTF-8 content, Wi-Fi/vCard/mailto payloads, the capacity ceiling,
and a check that over-long input throws a clear error rather than emitting a corrupt symbol.
Open index.html. That's the whole install.
npx serve . # optional, if you prefer a serverTarget customer: restaurants and cafés (menus), event organisers, real-estate agents, retail packaging, and marketing teams who print codes onto physical things.
- Free — everything above. Static codes, unlimited, offline, no account.
- Pro (~$7/month) — the parts that genuinely need a backend:
- Dynamic codes — print once, change the destination forever. This is the real product; a reprint costs far more than the subscription, which makes the value obvious.
- Scan analytics — count, time, city, device
- Logo and frame branding at EC level H
- Bulk generation from a CSV, exported as a ZIP (table tents, seat numbers, asset tags)
- REST API for generating codes from your own backend
The free static generator is the funnel: it is genuinely the best free option because it is offline and never expires, and the moment a customer needs to change a printed destination they need Pro.
Vanilla JavaScript. Zero dependencies, zero build step, zero network calls.
MIT — see LICENSE.