# Structured append

> Structured append is a QR mode that splits one message across up to 16 separate symbols, each carrying its position, the total count and a shared parity byte so a reader can reassemble them in order. Phone cameras effectively do not support it, so in practice it is a dead letter.

Source: https://useqr.app/glossary/structured-append · Last reviewed 2026-08-21 · UseQR is free forever, no signup.

---

## How it works on paper

Each symbol in the set opens with the structured append
[mode indicator](/glossary/encoding-mode) `0011`, followed by a 4-bit sequence index, a
4-bit total count (hence the **16-symbol maximum**) and an 8-bit **parity byte**, the XOR
of all bytes of the complete message, identical in every symbol, so a reader can tell that
the parts it collected belong to the same message. In theory that multiplies
[capacity](/glossary/data-capacity) sixteen-fold: sixteen version-40 symbols could carry
about 47 KB.

## Why it does not work in practice

Reassembly is the *reader's* job, and mainstream readers never took it on. iOS and Android
camera apps treat each symbol as an independent code and act on the first one they see;
ZXing's support is partial and most wrapper apps ignore it. A multi-part code printed for
the public will behave as one working code and several confusing ones.

If a payload does not fit in one symbol, the honest fixes are: shorten it, host the content
and encode a short URL instead ([why longer URLs make denser codes](/docs/spec/why-longer-urls-make-denser-codes)),
or split the *task* rather than the data. Structured append survives only in controlled
industrial settings where the operator chooses a scanner that implements it.

## FAQ

### Can one QR code continue into another?
The standard allows it, structured append chains up to 16 symbols with sequence numbers and a parity check. But phone cameras do not reassemble them, so for any public audience the answer is effectively no.

### How do I encode more data than one QR code holds?
Do not. Host the data at a URL and encode that instead; a shorter payload also produces a sparser, more scannable code. Multi-symbol sets only work with dedicated scanners chosen for the job.

## Try it

- https://useqr.app/url
- https://useqr.app/validate
