QR code utility

Text QR Generator

Put a short message, note, serial number, or Wi-Fi instruction into a scannable code. Everything is built in your browser, so the text is never uploaded anywhere.


How much actually fits

The limit is measured in bytes rather than characters, and the practical ceiling for the most widely compatible setting is around 2,900 bytes. A code can hold more than that, but the denser codes need a recent scanner and a clean, large, high-contrast print, and the margin for a damaged or angled read disappears. Treat 2,900 as the number to design to rather than as a limit to push against.

Not every character costs the same

Everything in a text code is measured in bytes, and in UTF-8 anything outside plain ASCII costs more than one. An accented letter, a currency sign or a curly quote can use two or three bytes where a plain letter uses one, so the same sentence can cost half again as much once it contains them. A code of a few hundred ordinary characters is comfortable; the same few hundred with punctuation from a word processor are not.

The format changes itself to suit the content

Codes pack digits far more densely than letters, so a string of numbers fits in a much smaller code than the same number of characters of prose. A long numeric identifier is a good candidate for a code. A paragraph of English is not.

Error correction is a choice, not a setting to leave alone

Every code carries a small amount of redundancy so it can be read despite a corner being smudged, creased or lit badly. The higher the level, the more damage it survives and the less text it can hold. The medium level is a sensible default; raising it is worthwhile for a code that will be printed and handled, and pointless for one on a screen nobody will scratch.

Newlines have to be written as characters

A line break in the text cannot be placed in the code literally. It has to be encoded as its escape sequence, and a raw break produces a code that scans to something other than what you typed. This tool handles the encoding, which is the main reason to use it rather than assembling a code by hand.

Print it large, and test it with something else

Each module has to be resolved by a camera from a realistic distance, so the size on the page matters more than the settings used to make the code. Check the printed result with a second phone, and check it in the light it will be read in. If it does not scan there, no amount of regenerating will fix it.

When a code is the wrong tool

A code holds a very small amount of text and requires the reader to have a working camera. Anything longer than a short line is better as a link, and anything that has to be read carefully is better as printed text. A code is a shortcut to a short string, not a way of putting an essay on a wall.

The limit is bytes, not characters

A QR code holds a fixed amount of data, and what runs out is space rather than letters. The counter above measures your text in UTF-8 bytes, which is what actually decides whether it fits. That is why an emoji costs four of the budget while a plain letter costs one, and why 200 accented characters can fail where 200 ASCII characters succeed.

The ceiling also depends on the error correction level, because a more resilient code spends more of its capacity on recovery data:

  • L holds up to 2,953 bytes
  • M holds up to 2,331 bytes
  • Q holds up to 1,663 bytes
  • H holds up to 1,273 bytes

Pushing past the limit is worth avoiding rather than working around. A code at maximum capacity becomes a dense grid of modules that many phones struggle to focus on from a normal distance.

Line breaks and special characters

Multi-line text encodes fine. What varies is what happens after the scan: some reader apps show a line break faithfully, others collapse it into a single line, and a few render the text as a clickable link if it happens to look like one. If the exact layout matters, test the code in the apps your audience actually uses.

Accented characters, punctuation, and non-Latin scripts are all supported and are encoded as UTF-8. If a code built elsewhere scans as empty text, this is usually why: some generators treat anything outside plain ASCII as one byte per character, silently corrupting the payload.

When a code is the wrong tool

QR codes hold a few kilobytes at most. They are suited to a URL, a short instruction, a serial number, or a contact detail. They are not suited to a paragraph of instructions, a list, or anything a person is expected to read at length. If you need to share more than a sentence or two, put it on a page and encode the link to it instead.