Docs · Start here

Print size and the scan badge

The badge under every code gives you the smallest safe print width and a verdict in plain words. Here is exactly how it is worked out.

All docs

The three states

Ready to print Print it at least 20 mm (0.8 in) wide. Simple code, 25 × 25.

Test one copy first Print it at least 22.8 mm (0.9 in) wide. Busy code, 49 × 49.

Hard to scan when small Print it at least 40.4 mm (1.6 in) wide, or shorten the content. Very dense code, 93 × 93.

StateGrid sizeWhat to do
Ready to printUp to 33 × 33Print at the width shown or larger.
Test one copy first37 × 37 to 57 × 57Print one copy at its real size and scan it with a phone before printing many.
Hard to scan when small61 × 61 and upShorten what is in the code, or print it well above the width shown.

Each state carries a word and an icon as well as a colour, so it reads the same for everyone.

How the width is worked out

Two rules, and the larger one wins:

  1. Never below 20 mm (0.8 in). This is the floor our sizing guide sets for any printed code. Below it, even close range scanning gets unreliable on older phones.
  2. 0.4 mm per module, plus the quiet zone. The width is (modules + 8) × 0.4 mm, where 8 is the 4 module margin on each side. This only goes above 20 mm for codes of 45 × 45 and larger.

The badge is a minimum for scanning up close, around 20 to 30 cm. Codes read from further away need to be bigger. A common rule is one tenth of the scanning distance: a code read from 1 m (about 3 ft) should be about 10 cm (4 in) wide.

Worked examples

Grid0.4 mm ruleBadge shows
25 × 2513.2 mm20 mm (0.8 in)
41 × 4119.6 mm20 mm (0.8 in)
49 × 4922.8 mm22.8 mm (0.9 in)
93 × 9340.4 mm40.4 mm (1.6 in)

When to print bigger

  • The code will be read from more than an arm's length away.
  • It goes on a curved, shiny or textured surface.
  • It is printed in colour rather than black on white, or carries a logo.
  • The badge says Test one copy first or Hard to scan when small.

The Sign maker sizes codes for common sign formats, and the Stress test shows where a particular code stops scanning.

Found a mistake on this page? Suggest a fix on GitHub