Free QR Code Generator with No Expiration

A free QR code generator with no expiration: static codes made in your browser with no sign-up, trial or watermark. URL, Wi-Fi, contact, email, SMS, location, event and bulk. Download SVG or PNG, and see exactly what was encoded, the version, the error correction level and the mask it chose.

Live v1.0 · October 2026 Free · No signupStatic, never expiresNothing uploaded
QR code generator encoded in this page
What the code holds
A web address. Phones open it in the browser after the scan.
https:// is added if you leave it out.
Campaign tags (UTM), so your analytics can count scans

Tagged visits show up in your own analytics as their own source.

This string is the whole code: no redirect, no server in between.
Design
4 modules
Read in this page only; level H rebuilds the modules it covers.
Advanced encoding
1 means automatic.
Made in your browser · static · nothing uploaded
What was built

The code is rebuilt as you type.

Capacity used

    A free QR code generator with no expiration

    A QR code made here is static: the text under “Exactly what goes into the code” is the whole code. A phone reads it directly: no server of ours in between, nothing to switch off, no account to keep paying for.

    The code itself cannot expire, but what it points to can. If it holds a web address and that page moves or the domain lapses, the code still scans and leads nowhere, so encode an address you will keep.

    Some generators make dynamic codes: a short link on the vendor’s domain that redirects each scan to your page. That allows editing and scan counts, and is also why the code can stop. QR Code Generator’s own help page says that when the free trial ends, dynamic codes “are deactivated and point to a service page rather than the original destination”, while static codes keep working.

    qr-code-generator.comQR Code MonkeyAdobe ExpressgoQR.meThis tool
    After a trial or plan endsDynamic codes deactivated; static keep workingStatic; “do not expire”“Stay active for as long as you need them”Static; says codes do not expireStatic; nothing to deactivate
    Content typesFree static: URL, vCard, text, SMS, email, Wi-FiURL, text, email, phone, SMS, vCard, MeCard, location, Wi-Fi, event, Bitcoin, social linksURLs onlyURL, text, phone, SMS, vCard, email, location, event, Wi-FiURL, text, Wi-Fi, vCard, MeCard, email, SMS, phone, location, event; UTM tags; bulk
    Where the code is madeNot confirmedImage files cached on its server for 24 hoursNot confirmedData sent to its server over TLS, “not stored”In your browser; nothing is sent
    Vector downloadSVG, EPSSVG, EPS, PDF (EPS and PDF without logo or design)PNG, JPEG, PDF; no SVG listedSVG, EPSSVG, plus PNG at 64 to 4,096 px
    LogoYesYes, up to 2 MBYesA paid service, quoted per orderYes, at level H, within the tested size

    Reviewed October 2026 from each vendor’s own pages: qr-code-generator.com’s help page, download formats and static code guide; QR Code Monkey; Adobe Express; and goQR.me’s generator and logo service. “Not confirmed” means no primary source confirmed it, not that it is missing.

    How to make a QR code that never expires

    1. Choose what the code holdsPick URL, Wi-Fi, contact, email, SMS, phone, location, event, text or bulk, and fill in the fields.
    2. Check the encoded textThe read-only box shows exactly what the code will contain; there is no redirect.
    3. Set the designPick an error correction level, colours, module shape and quiet zone; adding a logo switches to level H.
    4. Read the warningsFix any contrast, quiet zone or density warning before you export.
    5. Download and testDownload SVG for print or PNG at the size you need, then scan a proof with two phones.

    How this generator builds a QR code

    The encoder was written for this page in plain JavaScript, following ISO/IEC 18004 as explained in Thonky’s QR code tutorial and Wikipedia. The “What was built” panel shows each choice it made.

    1. Modes. Digits pack three to every 10 bits, the 45-character uppercase set two to every 11 bits, and everything else goes in byte mode as UTF-8. Dynamic programming splits the text between modes, so a long order number inside a sentence is not spent at 8 bits a digit.
    2. Version. The smallest of 40 sizes that fits, from 21 × 21 modules to 177 × 177, as listed by Denso Wave, the company where the format was invented in 1994.
    3. Error correction. Reed-Solomon codewords, split into blocks and interleaved, so a smudge damages several blocks a little rather than one fatally.
    4. Mask. All eight masks are scored with the four penalty rules (long runs, 2 × 2 blocks, finder-like patterns, dark-light balance); the lowest wins, and all eight scores are printed.
    5. Format and version information. Level and mask in a 15-bit BCH word written twice; from version 7, the version in an 18-bit word, also twice.

    If the text fits the same size at a higher level, the level is raised for free; switch that off under Advanced encoding.

    Which error correction level to choose

    Denso Wave describes the four levels as restoring about 7%, 15%, 25% and 30% of the codewords. More correction leaves less room for data, so the same text needs a larger code:

    LevelRestores aboutMost bytes (version 40)This URL needsUse it for
    L7%2,953version 4 (33 x 33)Screens and clean, large prints
    M15%2,331version 4 (33 x 33)The default: menus, posters, packaging
    Q25%1,663version 6 (41 x 41)Codes that get scuffed, wet or creased
    H30%1,273version 7 (45 x 45)A centre logo, or harsh conditions

    “This URL” is the 61-character https://fullstackdigitalmarketer.com/tools/qr-code-generator/, encoded by this page.

    Choose the lowest level that survives where the code will live: a smaller code scans from further away, and a higher level is no substitute for printing large enough.

    Wi-Fi, contact cards and the other formats

    A QR code only holds text; what a phone does with it follows conventions documented by the ZXing project and the RFCs below. This is exactly what each option writes:

    TypeEncoded asNotes
    Wi-FiWIFI:T:WPA;S:name;P:pass;;Backslash before \ ; , : "; H:true; for a hidden network
    ContactvCard 3.0 (RFC 2426) or MeCardvCard keeps organisation, title and address fields; MeCard is shorter
    Emailmailto: (RFC 6068)Subject and body percent-encoded as UTF-8, line breaks as %0D%0A
    SMSSMSTO: or sms: (RFC 5724)ZXing notes SMSTO is common but has no official specification
    Phonetel: (RFC 3966)Keep the + and country code
    Locationgeo: (RFC 5870) or a Google Maps linkThe link opens in any browser
    EventiCalendar VEVENT (RFC 5545)A bare VEVENT, as ZXing shows; floating local times

    Camera apps differ on the rarer types, so scan a proof with an iPhone and an Android phone first.

    Size, quiet zone, colour and logos

    Size. What matters is the size of one module; enter a printed width to see it, and the pixels a 300 dpi print needs. Adobe suggests at least 2 × 2 cm for print; a dense code needs more. The SVG is vector, so it is the better file for print.

    Quiet zone. Denso Wave asks for a light margin four modules wide on every side; the tool defaults to 4 and warns below it. In its tests, a code with no margin still decoded in two of three decoders; OpenCV missed it.

    Colour. Scanners look for dark modules on a light background, and the tool reports the contrast between your colours. In this page’s tests greys on white at 2.8:1 and below failed one of three decoders on some codes even as perfect screen images, and light-on-dark codes failed two or all three, so the tool flags anything under 4.5:1 and any inverted pair.

    Logo. A logo hides modules that error correction must rebuild, so the tool forces level H, clears the modules underneath, and caps the logo at 25% of the width. At 20% or less, all 112 test codes, at every version from 1 to 40 and with two logos, decoded in all three decoders; from 22% to 25%, zbar missed 4 of 272. So the slider stops at 25% and warns above 20%.

    What a static QR code cannot do

    A static code cannot count its own scans or be changed once printed, whichever site made it.

    You can have both without renting them. To change the destination later, encode a short address on a domain you control, such as yoursite.com/menu, and redirect it wherever you like; no vendor can switch it off. To count scans, add campaign tags in the URL option (for example utm_medium=qr), and visits from the code appear in your own analytics as their own source. That counts visits that load the page rather than raw scans, which is usually the number you wanted.

    How this generator was tested

    A decoder’s error correction can hide an encoder’s mistakes, so the tests checked both that decoders read every symbol and that none needed repairing.

    • 523 symbols from the shipped code: every content type at all four levels; accents, emoji, Devanagari and Japanese; every version from 1 to 40 at every level, filled to exact capacity; every mask; and 160 random mixed-script strings. zxing-cpp and zbar each read all 523 exactly; OpenCV read 464, missing only codes with the UTF-8 ECI marker, which it warns it does not fully support.
    • A separate Python implementation read every codeword back and recomputed the Reed-Solomon blocks, format and version information, payload and all eight mask penalties: no errors, and the lowest-penalty mask chosen in all 491 automatic cases.
    • The page’s own downloads: 247 PNG and SVG files from the page’s own buttons, covering every content type, shape, level, mask, ECI setting, logo size and the bulk ZIP. zxing-cpp read all 247; the only misses by the other two were zbar on a deliberately unmarked café and OpenCV on a version 40 dot code rendered at 800 px.

    One finding set a default. Without the ECI marker, zbar read short accented text such as café as Japanese (caf矷); with it, zbar was right and OpenCV missed some codes. The standard’s default for byte mode is ISO/IEC 8859-1, not UTF-8, so the marker is added when needed; Advanced encoding can switch it off.

    What this page does not do

    Nothing you type, and no logo you add, leaves this page: the tool makes no network request and stores nothing you enter, which your browser’s network panel will confirm as you type. More free utilities, including the password generator, are on the tools hub.

    Frequently asked questions

    A QR code itself never expires: it is printed text. What stops working is a dynamic code whose vendor switches off the redirect when a trial or plan ends. Codes from this page are static, so they work as long as the content they hold is valid.
    This QR code generator is free and needs no account. There is no trial and no watermark, the codes are yours to use commercially, and it all runs in your browser.
    A static code holds your content. A dynamic code holds a vendor link that redirects to it: editable and countable, but only while the vendor is paid and in business.
    Choose Wi-Fi, enter the network name and password, and pick the security type. The tool writes the WIFI: format phones recognise and escapes special characters; a phone camera then offers to join.
    A static QR code cannot count its own scans. Add UTM tags to the link it holds, and visits from the code show up in your own analytics as a separate source.
    A printed QR code should be big enough that each module stays readable from where people scan. Adobe suggests at least 2 x 2 cm. Enter your print width in the tool to see the module size and the pixels needed at 300 dpi.
    A logo works at error correction level H, which rebuilds the modules it covers. The tool clears the modules under it, caps it at 25% of the width and warns above 20%, the size at which every test code still decoded. Scan the final file before printing.
    A QR code usually fails to scan because of low contrast, light-on-dark colours, no quiet zone, too small a print or an oversized logo. The tool warns about each.
    Download SVG for print and design tools, because it is vector. Use PNG for documents, slides and the web, at the pixel size you need.
    A static QR code cannot be changed once printed. Encode a short link on your own domain instead, and change where it redirects whenever you like.