Plain text shown on screen the moment it is scanned — no link, no website, no internet needed.

Whatever you type here is what the phone displays. Nothing is opened and nothing is loaded.

Colors
Shape
Module style

The three corner squares always stay square — scanners lock onto them first.

Quiet zone1 modules

Fine at 1 for screens. Raise it to 4 before printing — that is the specification minimum, and too little margin is the most common print failure.

Logo

Drop one image here or click to select

PNG, JPG, WebP, SVG — screenshots, logos, or icons

Export
Example — fill in the form to generate your code
Nothing to encode yet
  • Text

SVG is vector — use it for anything printed. PNG is the right choice for screens.

How to turn text into a QR code

  1. Type or paste the text you want the code to display. It appears on the phone exactly as written — nothing is opened and nothing is loaded.
  2. Keep it short. Text is stored inside the pattern itself, so every character makes the code denser and harder to scan.
  3. Pick your colors and module style, and add a logo if the code is going on branded material.
  4. Check the byte counter under the preview — it warns before the payload grows dense enough to fail in print.
  5. Download as PNG for screens, or as SVG for labels, packaging and signage.

Text codes carry the message — link codes only point at it

This is the whole difference, and everything else follows from it. A link QR code stores a web address; the phone still has to reach the internet and the site still has to be online. A text QR code stores the message itself, so scanning it displays the content immediately — no browser, no server, no signal.

Text QR codeLink QR code
Needs internet on the phoneNoYes
Needs a website to existNoYes
Still works in 10 yearsYesOnly if the URL still resolves
Content visible before scanningTo anyone who decodes the imageOnly the URL is visible
Can be edited after printingNoNo, unless it points at a redirect
Can count scansNoOnly through a redirect service

That independence is the reason to choose text. A code on a machine in a factory basement, on a shipping crate, in a lift shaft or on a hiking trail sign has to work where there is no reception at all — and a link code simply does not.

The generator itself works offline too

Plenty of sites will tell you that text QR codes work without the internet. Almost all of them build the code on their server, which means the text you typed travelled across the network before it became an image.

This page has no backend at all. The text is encoded into the matrix inside your browser tab, drawn onto a canvas and handed to you as a file. Load the page once, switch your machine to airplane mode, and keep generating codes — it keeps working, because there is nothing to call.

JavaScript
// The entire pipeline. No fetch, no upload, no analytics on your input.
const { create } = await import('qrcode')
const qr = create(text, { errorCorrectionLevel: 'M' })

const ctx = canvas.getContext('2d')
for (let row = 0; row < qr.modules.size; row++) {
  for (let col = 0; col < qr.modules.size; col++) {
    if (qr.modules.data[row * qr.modules.size + col] !== 1) continue
    ctx.fillRect(offset + col * m, offset + row * m, m, m)
  }
}

Open DevTools, switch to the Network tab and generate something. You will see the page assets load once and then nothing else. That is worth knowing before you encode an internal batch number or a maintenance note.

How much text actually fits — and why the usual number is wrong

Nearly every QR guide quotes 4 296 characters. That figure is real but it applies to a narrow case: the alphanumeric encoding mode, which covers only digits, uppercase A–Z, space and nine punctuation marks. The moment your text contains a single lowercase letter, the encoder falls back to byte mode and the ceiling drops.

Encoding modeWhat it coversMax at level LMax at level H
NumericDigits only7 0893 057
AlphanumericDigits, UPPERCASE, space, $%*+-./:4 2961 852
ByteAnything else, including lowercase2 9531 273
KanjiShift-JIS Japanese1 817784

Non-Latin text costs more still. In UTF-8 a Cyrillic, Greek or Arabic letter takes two bytes, and most CJK characters take three — so 500 characters of Ukrainian is roughly 1 000 bytes, not 500. The counter under the preview measures actual bytes for exactly this reason, which is why it can disagree with the 4 296 figure you will read elsewhere.

The practical limit is much lower than any of these numbers. Around 300 characters is where a code stays comfortably scannable on a printed label at normal size. Past that the matrix grows dense enough that a phone needs to be held close and steady, which defeats the point.

Where plain text codes are the right tool

Places with no reliable signal

  • Machines and equipment — setup steps, torque values or a troubleshooting note on the panel itself, readable in a basement plant room
  • Shipping crates and pallets — batch number, contents, handling instructions that survive without a warehouse system
  • Trail and park signage — route notes and distances where there is no reception for kilometres
  • Lift and plant rooms — service dates and emergency contacts

Places where a link would be overkill

  • Product packaging — best-before dates, storage temperature, allergen notes
  • Shelf edge labels — promotion terms that are too long to print in full
  • Event badges — table number, session track, dietary requirement
  • Classrooms — emergency contacts, quiz answers revealed after the exercise
  • Museum and gallery labels — extended captions without building a mobile site

The common thread is that none of these justify owning a URL, hosting a page and keeping it alive for years. The text code is the page.

What not to put in a text QR code

A plain text code offers no protection whatsoever. The content is not encrypted, not obfuscated and not hidden — anyone who photographs the code, or finds the image online, can decode it in seconds with any free decoder. Treat it exactly like text printed in the open.

  • Passwords and access codes — a photograph of the code is a photograph of the password
  • Personal data — names, addresses, dates of birth or medical details on anything publicly visible
  • Licence keys or serials — trivially harvested at scale from photos
  • Anything you would not print in large type on the same surface — that is the honest test

The scanning risk, briefly

There is also a risk in the other direction. Quishing — QR phishing — works because a printed code gives no preview of where it leads, and a sticker placed over a legitimate code is invisible to the eye. Text codes are the safer half of that equation: they display content rather than navigating anywhere, so a scanner shows you the message and nothing happens on its own. If you place codes in public, check periodically that nobody has covered them.

Frequently Asked Questions

What is a text QR code?
It is a QR code that stores plain text directly inside the pattern instead of a web address. Scanning it displays the text immediately on the phone screen — nothing opens, nothing loads and no website is involved.
Does a text QR code work without internet?
Yes, completely. The content lives inside the code itself, so the scanning phone needs no signal, no data plan and no working website at the other end. This is the main reason to choose text over a link.
How is this different from a URL QR code?
A URL code stores an address and the phone has to fetch it, which needs internet and a live site. A text code carries the message itself. Use a link when the content changes or lives online; use text when the message is short, fixed and has to work anywhere.
How many characters can a text QR code hold?
The theoretical maximum is 2 953 bytes for ordinary mixed-case text at error correction level L, dropping to 1 273 bytes at level H. The widely quoted 4 296 figure applies only to uppercase letters, digits and a few punctuation marks. In practice, stay near 300 characters — beyond that the code becomes too dense to scan reliably in print.
Why does the byte counter disagree with 4 296 characters?
Because those are different encoding modes. QR codes switch to byte mode as soon as text contains lowercase letters, and byte mode holds 2 953 bytes. Accented, Cyrillic and Greek characters cost two bytes each in UTF-8, and most CJK characters cost three — so the byte count is what actually matters, not the character count.
Can I use other languages and emoji?
Yes. Text is encoded as UTF-8, so any language and emoji work. Just remember that each non-Latin character consumes two or three bytes rather than one, so a code in Ukrainian, Greek or Japanese holds noticeably fewer characters than the same code in English.
Is my text sent to your server?
No. There is no server. The text is encoded into the QR matrix inside your browser and never leaves the device. You can verify it by opening DevTools and watching the Network tab, or by disconnecting from the internet — the page keeps generating codes.
Can I edit the text after printing the code?
No. The text is baked into the pattern, so a change means generating a new code and reprinting. If the content will change, put a short URL in the code instead and update the page behind it.
Is it safe to put a password in a text QR code?
No. The content is stored in plain form with no encryption, so anyone who photographs or downloads the code can decode it instantly. Treat a text QR code exactly like text printed openly on the same surface.
Does the code expire or need a subscription?
Neither. These are static codes with no redirect service in the middle, so nothing can lapse, shut down or start charging. A printed code keeps working indefinitely.
Why does my text code look denser than a link code?
Because it usually holds more data. A short URL is 20 to 40 characters, while a useful text note is often several hundred, and more data means a higher QR version with smaller modules. Shortening the text is the most effective way to make the code easier to scan.
Can I add a logo to a text QR code?
Yes. Error correction switches to level H automatically when you add one, which recovers up to 30% of the covered pattern. Note that level H also cuts capacity to 1 273 bytes, so a long text plus a logo can exceed the limit — the counter will warn you before it does.
What size should I print it?
At least 2 × 2 cm for a short note, and larger for anything over 100 characters, since more text means a denser grid. Export as SVG for print so the module edges stay sharp, and never crop the quiet zone around the code.