Text to QR Code Generator Online
The code carries the message, not a link — it displays on scan, with no network needed.
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.
The three corner squares always stay square — scanners lock onto them first.
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.
Drop one image here or click to select
PNG, JPG, WebP, SVG — screenshots, logos, or icons
- Text
SVG is vector — use it for anything printed. PNG is the right choice for screens.
How to turn text into a QR code
- 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.
- Keep it short. Text is stored inside the pattern itself, so every character makes the code denser and harder to scan.
- Pick your colors and module style, and add a logo if the code is going on branded material.
- Check the byte counter under the preview — it warns before the payload grows dense enough to fail in print.
- 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 code | Link QR code | |
|---|---|---|
| Needs internet on the phone | No | Yes |
| Needs a website to exist | No | Yes |
| Still works in 10 years | Yes | Only if the URL still resolves |
| Content visible before scanning | To anyone who decodes the image | Only the URL is visible |
| Can be edited after printing | No | No, unless it points at a redirect |
| Can count scans | No | Only 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.
// 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 mode | What it covers | Max at level L | Max at level H |
|---|---|---|---|
| Numeric | Digits only | 7 089 | 3 057 |
| Alphanumeric | Digits, UPPERCASE, space, $%*+-./: | 4 296 | 1 852 |
| Byte | Anything else, including lowercase | 2 953 | 1 273 |
| Kanji | Shift-JIS Japanese | 1 817 | 784 |
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.