ZPL compatibility of the OpenZPL engine
The OpenZPL engine draws the 64 ZPL commands of the command reference, one of them partially, and skips the ones that configure the printer. The barcode and text commands listed under “Not supported yet” don't draw correctly today.
Tested 2026-10-26 with openzpl-api 10d0497 at 8 dpmm.
How we test
Every example on this site is a fixture: a short synthetic label that the engine renders to a PNG when the site is built. If a fixture's ZPL changes and its image isn't rendered again, the build fails, so the image always shows what the engine does with that exact code.
The 140 fixtures are public in fixtures.json, with their size, density and image, under CC0. Use them to test any ZPL renderer.
A preview isn't a print. Darkness, media, firmware and the fonts installed on a printer change the result, so check critical labels on the printer itself.
Drawn
| Command | Hvad det gør | Category | Evidence |
|---|---|---|---|
^XA |
Åbner en etikette. Alt op til ^XZ er én etikette. | Etiket format | Rendered example |
^XZ |
Lukker etiketten åbnet af ^XA og printer den. | Etiket format | Rendered example |
^PW |
Sætter etiketbredden i prikker. | Etiket format | Rendered example |
^LL |
Sætter etiketlængden i prikker. | Etiket format | Rendered example |
^LH |
Flytter oprindelsen, som hver feltposition måles fra. | Etiket format | Rendered example |
^LS |
Skifter hvert felt til venstre med det angivne antal prikker. | Etiket format | Rendered example |
^LT |
Flytter hele etiketten op eller ned med det angivne antal prikrækker. | Etiket format | Rendered example |
^PO |
Printer labelen normalt (N) eller op-ned (I). | Etiket format | Rendered example |
^PM |
Spejler hele etiketten vandret når indstillet til Y. | Etiket format | Rendered example |
^PQ |
Sætter hvor mange etiketter der skal printes; hver tæller som en etiket i forhåndsvisningen. | Etiket format | Rendered example |
^MU |
Ændrer måleenheden til prikker, tommer eller millimeter. | Etiket format | Rendered example |
^CI |
Vælger tegnsættet. ^CI28 er UTF-8. | Etiket format | Rendered example |
^FO |
Sætter feltposition: x, y koordinater i prikker fra det øverste venstre hjørne. | Felter og position | Rendered example |
^FT |
Positionerer et felt efter dets baseline i stedet for dets øverste venstre hjørne. | Felter og position | Rendered example |
^FD |
Teksten eller stregkodedataene for det aktuelle felt. | Felter og position | Rendered example |
^FS |
Afslutter det aktuelle felt. | Felter og position | Rendered example |
^FB |
Pakker tekst ind i en blok med en bredde, linjetælling og justering. | Felter og position | Rendered example |
^FR |
Printer feltet hvidt på sort over hvad der end er under det. | Felter og position | Rendered example |
^FH |
Lader ^FD indeholde hex-escapes som _0D. | Felter og position | Rendered example |
^FW |
Sætter standardrotationen for de følgende felter. | Felter og position | Rendered example |
^FN |
Navngiver et variabelfelt i et gemt format. | Felter og position | Rendered example |
^FX |
En kommentar. Printeren ignorerer alt indtil næste kommando. | Felter og position | Rendered example |
^SN |
Printer et nummer, der stiger med hver label. | Felter og position | PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example |
^A |
Vælger skrifttype, rotation og størrelse til det næste tekstfelt. | Tekst og skrifttyper | Rendered example |
^A@ |
Vælger en skrifttype efter filnavnet på printeren. | Tekst og skrifttyper | Rendered example |
^CF |
Sætter skrifttype og størrelse, der bruges, når et felt ikke har ^A. | Tekst og skrifttyper | Rendered example |
^TB |
Indkapsler et tekstfelt indeni en boks med angivet bredde og højde. | Tekst og skrifttyper | Rendered example |
^CW |
Tildeler et enkelt bogstavsnavn til en skrifttypefil. | Tekst og skrifttyper | Stores or recalls data; no image of its own |
^BY |
Sætter modulbredden, forholdet mellem bred til smal og højden for de følgende stregkoder. | Stregkoder | Rendered example |
^BC |
Code 128 stregkode, den mest almindelige på forsendelsesetiketter. | Stregkoder | Rendered example |
^B3 |
Code 39 stregkode. | Stregkoder | Rendered example |
^B2 |
Interleaved 2 af 5 stregkode, kun numerisk. | Stregkoder | Rendered example |
^BE |
EAN-13 detailstregkode. | Stregkoder | Rendered example |
^B8 |
EAN-8 detailstregkode. | Stregkoder | Rendered example |
^BU |
UPC-A detailstregkode. | Stregkoder | Rendered example |
^B9 |
UPC-E detailstregkode. | Stregkoder | Rendered example |
^BQ |
QR Code. Feltdata starter med fejlkorrigeringsniveauet og inputtilstand, som i ^FDQA,text. | Stregkoder | Rendered example |
^BX |
Data Matrix 2D stregkode. | Stregkoder | Rendered example |
^B7 |
PDF417 stablet 2D stregkode. | Stregkoder | Rendered example |
^BO |
Aztec 2D stregkode. | Stregkoder | Rendered example |
^BD |
MaxiCode, brugt af UPS. | Stregkoder | Rendered example |
^B0 |
Aztec 2D stregkode; den samme kommando som ^BO. | Stregkoder | Rendered example |
^BA |
Code 93 stregkode: tættere end Code 39, med to indbyggede kontroltegn. | Stregkoder | Rendered example |
^BK |
Codabar stregkode, brugt af biblioteker, blodbanker og nogle kurerer. | Stregkoder | Rendered example |
^BL |
LOGMARS stregkode, US militærets Code 39 med et obligatorisk kontrolciffer. | Stregkoder | Rendered example |
^B1 |
Code 11 stregkode, numerisk, brugt på telekommunikationsudstyr. | Stregkoder | Rendered example |
^BM |
MSI (Modified Plessey) stregkode, numerisk, anvendt på hyldetiketter. | Stregkoder | Rendered example |
^BP |
Plessey stregkode, numerisk, med et CRC kontrolciffer. | Stregkoder | Rendered example |
^BS |
Det 2- eller 5-cifrede tillæg, der printes ved siden af en UPC- eller EAN-kode. | Stregkoder | Rendered example |
^BZ |
US postale stregkoder: POSTNET, PLANET og Intelligent Mail. | Stregkoder | Rendered example |
^B5 |
USPS PLANET stregkode. | Stregkoder | Rendered example |
^BR |
GS1 DataBar (tidligere RSS): kompakte GTIN-stregkoder til frugt og grønt samt kuponer. | Stregkoder | PartialGS1 DataBar types 1 to 6 are drawn. Type 6 (Expanded) encodes the data as written and scans the same as Labelary's, but its last characters can differ; types 7 to 12 (UPC/EAN composites) print the data as text. Rendered example |
^BF |
MicroPDF417, en mindre PDF417 til små etiketter. | Stregkoder | Rendered example |
^GB |
Tegner en boks eller en linje: bredde, højde, kanttykkelse, farve og afrunding. | Grafik | Rendered example |
^GC |
Tegner en cirkel: diameter, kanttykkelse og farve. | Grafik | Rendered example |
^GE |
Tegner en ellipse. | Grafik | Rendered example |
^GD |
Tegner en diagonal linje. | Grafik | Rendered example |
^GF |
Indlejrer et bitmapbillede i etiketten (ASCII hex, binær eller Z64). | Grafik | Rendered example |
^GS |
Printer et registreret, ophavsretligt eller andet symbol. | Grafik | Rendered example |
^DF |
Gemmer etiketformatet på printeren under et navn. | Gemte formater og billeder | Rendered example |
^XF |
Henter et gemt format for at udfylde dets ^FN-felter. | Gemte formater og billeder | Rendered example |
~DG |
Gemmer et billede på printeren under et navn. | Gemte formater og billeder | Stores or recalls data; no image of its own |
^XG |
Printer et billede gemt med ~DG. | Gemte formater og billeder | Stores or recalls data; no image of its own |
^IM |
Printer et gemt billede ved den nuværende feltoprindelse. | Gemte formater og billeder | Stores or recalls data; no image of its own |
Ignored on purpose
These commands set up the printer, not the label. The API accepts them and renders the label as if they weren't there; we checked that the image is byte-identical without them.
| Group | Commands |
|---|---|
| Media and sensors | ^MM, ^MN, ^MT, ^MF, ~JS |
| Speed, darkness and tear-off | ^PR, ~SD, ^MD, ~TA |
| Calibration and printer state | ~JC, ~JA, ~JR, ^JU, ~HS |
| Network, RFID setup and host queries | ^NC, ^NI, ^RS, ~HI, ~HM |
Not supported yet
Each one was tested by placing it in a label at 8 dpmm. None of them fails the request: the label renders, without the symbol.
| Command | Symbology or feature | What the engine does today |
|---|---|---|
^B4 | Code 49 | No bars; the data is printed as text (Labelary doesn't draw it either). |
^BB | CODABLOCK | No symbol; the data is printed as text (Labelary doesn't draw it either). |
^BT | TLC39 | No symbol; the data is printed as text (Labelary doesn't draw it either). |
Known differences
- A format with no fields, such as
^XA^XZ, returns400 ERROR: No labels found in the ZPLinstead of a blank image. - Fonts: Zebra's font 0 (CG Triumvirate Bold Condensed) can't be bundled, so
^A0is drawn with Roboto Condensed Bold, with spacing calibrated per character. The bitmap fonts^AA–^AHare drawn with DejaVu Sans Mono. Text widths can differ by a few dots from a given printer. - An RFID write (
^RFfollowed by^FD…^FS) draws its data as text; a printer encodes it in the tag and prints nothing. - EPL reverse text (the
Rflag ofA) gets a black box the size of the character cells, as on the printer; it can run past the last character because the substitute font is narrower than EPL's bitmap fonts.
Flytter fra Labelary
The API keeps Labelary's v1 paths and headers, so most clients only change the host. See Migrate from Labelary for the tested differences and OpenZPL vs Labelary for the comparison.