Stripy Horse
Stripy Horse

Label preflight: will your barcode scan?

Paste ZPL and get it graded the way a barcode verifier grades a printed label: round-trip decode, module width in printer dots, quiet zones, physical X-dimension against the GS1 minimum, and how much wear-and-tear the symbol survives. Plus a static ZPL validator: unterminated fields, encoding traps, out-of-bounds elements. A fail here is a chargeback later.

Output carries a light watermark. Sign in and create a free API key; then every run here is watermark-free (500 credits a month, no card).

The same checks run in CI via POST /v1/preflight: fail the build, not the shipment. See the API docs.

About the Preflight

Preflight renders your ZPL at the target density and then treats the result the way a scanner would: every barcode is located, decoded, and measured. You see whether the decoded value matches what you encoded, how many printer dots make up one module, whether the quiet zones are wide enough, and how far the X-dimension sits above or below the symbology's minimum at that resolution.

The blur test degrades the image step by step until the code stops decoding. A label that survives several steps will scan on a worn head or a smudged ribbon; one that fails on the first step is scanning by luck.

Each barcode gets a pass, warn or fail grade with the reason, so the fix is usually a one-number change in the ZPL: a wider module, a moved field, or a bigger label.

Density and label size in dots

ZPL positions are printer dots, so the same label is a different number of dots at each density. Match the printer.

Printerdpidots / mm4 x 6 in label2 x 1 in label
Most desktop Zebras (GX, GK, ZD, LP)2038812 x 1218406 x 203
Industrial and healthcare (ZT, ZD 300)300121218 x 1827609 x 304
High resolution (ZT 600)600242436 x 36541218 x 609

Your data: Your ZPL is processed in memory and discarded when the response is sent; nothing is stored, logged or read by a person. The grade is computed on the clean render; only the displayed preview is watermarked for anonymous runs. Details in the privacy policy.

Questions

Why does a barcode that looks fine fail to scan?

The most common cause is a module width that is not a whole number of printer dots, so bars alternate between two widths. Preflight reports the module width in dots; pick a ^BY that gives whole dots at your density.

What is the X-dimension and why does it matter?

The width of the narrowest bar. Every symbology has a minimum (GS1-128 for shipping is 0.25 mm at the low end, more for pallet labels); below it, scanners at the dock read the code intermittently or not at all.

Does preflight check 2D codes?

QR and Data Matrix are decoded and their module size measured, alongside Code 128, Code 39 and Interleaved 2 of 5. Other symbologies render but are not yet graded.

Can I run this in CI?

Yes. The same check is POST /v1/preflight; fail the build when a label drops below the grade you want, and pair it with a virtual printer so the whole print path is under test.

The same engine is behind the API and the guides; every tool here is also an API call.