ZPL viewer
Zebra label formats, drawn at print size · updated 18 October 2026
Paste a ZPL format — ^XA … ^XZ — into the viewer and it is drawn at the size it will come out of the printer. The viewer reads two languages and picks by itself: ^XA is ZPL, ~XA is the Paxar PCL used by SNAP printers. You can also force one in the language list.
No account is needed to look at a label.
Pick the resolution
A ZPL format does not say which printer it is for, and the measurements inside it are in printer dots, not millimetres. The same file prints at four inches wide on a 203 dpi printer and at 2.7 inches on a 300 dpi one. So the viewer asks: choose 203, 300 or 600 dpi and the drawing resizes. If a label looks the wrong size, that selector is almost always the reason.
What is drawn
| Command | What it does | Status |
^XA ^XZ | start and end of the format | drawn |
^PW ^LL | label width and length, in dots | drawn |
^LH ^LS | origin and shift applied to every field | drawn |
^FO ^FT | field position — ^FO from the top of the character, ^FT from the baseline | drawn |
^A ^CF | font, size and orientation; ^CF sets the default | drawn |
^FD ^FS | field data and end of field | drawn |
^GB | box and line, with thickness and rounding | drawn |
^BY | module width and default bar height | drawn |
^B3 ^BC ^BE ^B8 ^BU ^B2 | Code 39, Code 128, EAN-13, EAN-8, UPC-A, Interleaved 2 of 5 — with the human readable line | drawn |
^PQ ^PR ^FX | quantity, speed, comment | read |
^FB | text block: wraps on the block width, honours the line limit, left/centre/right; \& forces a break | drawn |
^GF | graphic embedded in the format, hexadecimal, with the ZPL repeat compression | drawn |
^GF binary or compressed, ^XG | other graphic encodings, and graphics recalled from printer memory | not yet |
^BQ ^BX | QR Code and Data Matrix | not yet |
^FR | reversed field | read, not drawn |
Anything else is listed as an unrecognised command instead of being silently ignored, so you always know what was left out of the drawing.
How close is the drawing
Zebra's own typefaces are licensed and cannot be redistributed — the default scalable font is CG Triumvirate Bold Condensed, from Monotype. Labelisk substitutes free equivalents: TeX Gyre Heros Condensed Bold, which like Triumvirate is a Helvetica derivative, and a monospaced face for the OCR fonts.
To know what that costs, the same formats were rendered here and in a reference ZPL renderer, and the ink measured column by column:
| Element | Difference |
Box and line ^GB | identical on all three axes |
Barcode ^B3 | identical on all three axes |
Embedded graphic ^GF | identical |
Text block ^FB | breaks on the same words, lines within 14 dots |
Text ^A0 | starts on the same column, 4% wider |
| Human readable line | within 4% |
In other words the geometry matches and the remaining difference is the shape of the letters. Good enough to check that a field fits, that a barcode has room and that nothing runs off the label — which is what a proof is for. For a bar-width tolerance audit, measure a real print.
The rendering API currently takes Paxar PCL only. ZPL renders in the browser; it is not in the API yet, because the API has no way to tell it which resolution to use. If you need ZPL through the API,
say so — that is how it gets prioritised.
The other language
Labelisk started with Paxar PCL, the format language of Avery Dennison SNAP 500 and SNAP 700 printers, which has no public specification and no other viewer. That one has a rendering API with PNG and vector PDF output. ZPL came later, and the two share the same drawing engine.