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 | Hva det gjør | Category | Evidence |
|---|---|---|---|
^XA |
Åpner en etikett. Alt opp til ^XZ er én etikett. | Etikett format | Rendered example |
^XZ |
Lukker etiketten åpnet av ^XA og skriver den ut. | Etikett format | Rendered example |
^PW |
Setter etikettens bredde i prikker. | Etikett format | Rendered example |
^LL |
Setter etikettens lengde i prikker. | Etikett format | Rendered example |
^LH |
Flytter opprinnelsen som hver feltposisjon måles fra. | Etikett format | Rendered example |
^LS |
Flytter hvert felt til venstre med det gitte antallet prikker. | Etikett format | Rendered example |
^LT |
Flytter hele etiketten opp eller ned med det angitte antallet prikkrader. | Etikett format | Rendered example |
^PO |
Skriver ut etiketten normalt (N) eller opp ned (I). | Etikett format | Rendered example |
^PM |
Speiler hele etiketten horisontalt når den er satt til Y. | Etikett format | Rendered example |
^PQ |
Setter hvor mange etiketter som skal skrives ut; hver teller som en etikett i forhåndsvisningen. | Etikett format | Rendered example |
^MU |
Endrer enheten for måling til punkter, tommer eller millimeter. | Etikett format | Rendered example |
^CI |
Velger tegnsettet. ^CI28 er UTF-8. | Etikett format | Rendered example |
^FO |
Setter feltposisjonen: x, y-koordinater i prikker fra øverste venstre hjørne. | Felt og posisjon | Rendered example |
^FT |
Plasserer et felt etter baselinjen i stedet for det øverste venstre hjørnet. | Felt og posisjon | Rendered example |
^FD |
Teksten eller strekkode-dataene til det nåværende feltet. | Felt og posisjon | Rendered example |
^FS |
Avslutter det nåværende feltet. | Felt og posisjon | Rendered example |
^FB |
Pakker teksten inn i et blokker med en bredde, linjetall og justering. | Felt og posisjon | Rendered example |
^FR |
Skriver ut feltet hvitt på svart over det som er under det. | Felt og posisjon | Rendered example |
^FH |
Lar ^FD inneholde hex-escapes som _0D. | Felt og posisjon | Rendered example |
^FW |
Setter standard rotasjon for feltene som følger. | Felt og posisjon | Rendered example |
^FN |
Navngir et variabelfelt i et lagret format. | Felt og posisjon | Rendered example |
^FX |
En kommentar. skriveren ignorerer alt frem til neste kommando. | Felt og posisjon | Rendered example |
^SN |
Skriver ut et nummer som øker for hver etikett. | Felt og posisjon | PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example |
^A |
Velger font, rotasjon og størrelse for neste tekstfelt. | Tekst og skrifttyper | Rendered example |
^A@ |
Velger en font basert på filnavnet på skriveren. | Tekst og skrifttyper | Rendered example |
^CF |
Setter font og størrelse som brukes når et felt ikke har ^A. | Tekst og skrifttyper | Rendered example |
^TB |
Pakker et tekstfelt inn i en boks med gitt bredde og høyde. | Tekst og skrifttyper | Rendered example |
^CW |
Tildeler et enbokstavers navn til en skrifttypefil. | Tekst og skrifttyper | Stores or recalls data; no image of its own |
^BY |
Setter modulbredde, bred-til-smal forhold og høyde for strekkodene som følger. | Strekkoder | Rendered example |
^BC |
Code 128 strekkode, den vanligste på fraktetiketter. | Strekkoder | Rendered example |
^B3 |
Code 39 strekkode. | Strekkoder | Rendered example |
^B2 |
Innimellom 2 av 5 strekkode, kun numerisk. | Strekkoder | Rendered example |
^BE |
EAN-13 detaljhandelsstrekkode. | Strekkoder | Rendered example |
^B8 |
EAN-8 detaljhandelsstrekkode. | Strekkoder | Rendered example |
^BU |
UPC-A detaljhandelsstrekkode. | Strekkoder | Rendered example |
^B9 |
UPC-E detaljhandelsstrekkode. | Strekkoder | Rendered example |
^BQ |
QR-kode. Feltdataene starter med feilrettingsnivået og inngangsmodusen, som i ^FDQA,text. | Strekkoder | Rendered example |
^BX |
Data Matrix 2D strekkode. | Strekkoder | Rendered example |
^B7 |
PDF417 stablet 2D strekkode. | Strekkoder | Rendered example |
^BO |
Aztec 2D-strekkode. | Strekkoder | Rendered example |
^BD |
MaxiCode, brukt av UPS. | Strekkoder | Rendered example |
^B0 |
Aztec 2D strekkode; den samme kommandoen som ^BO. | Strekkoder | Rendered example |
^BA |
Kode 93 strekkode: tettere enn Kode 39, med to innebygde kontrolltegn. | Strekkoder | Rendered example |
^BK |
Codabar strekkode, brukt av biblioteker, blodbanker og noen budfirmaer. | Strekkoder | Rendered example |
^BL |
LOGMARS strekkode, USAs militærs kode 39 med et obligatorisk sjekksiffer. | Strekkoder | Rendered example |
^B1 |
Kode 11 strekkode, numerisk, brukt på telekommunikasjonsutstyr. | Strekkoder | Rendered example |
^BM |
MSI (Modifisert Plessey) strekkode, numerisk, brukt på hyllesedler. | Strekkoder | Rendered example |
^BP |
Plessey strekkode, numerisk, med et CRC kontrollsiffer. | Strekkoder | Rendered example |
^BS |
Det 2- eller 5-sifrede tillegget som skrives ut ved siden av en UPC- eller EAN-kode. | Strekkoder | Rendered example |
^BZ |
Amerikanske poststreker: POSTNET, PLANET og Intelligent Mail. | Strekkoder | Rendered example |
^B5 |
USPS PLANET strekkode. | Strekkoder | Rendered example |
^BR |
GS1 DataBar (tidligere RSS): kompakte GTIN-strekkoder for frukt og grønnsaker og kuponger. | Strekkoder | 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 for små etiketter. | Strekkoder | Rendered example |
^GB |
Tegner en boks eller en linje: bredde, høyde, kanttykkelse, farge og avrunding. | Grafikk | Rendered example |
^GC |
Tegner en sirkel: diameter, kanttykkelse og farge. | Grafikk | Rendered example |
^GE |
Tegner en ellipse. | Grafikk | Rendered example |
^GD |
Tegner en diagonal linje. | Grafikk | Rendered example |
^GF |
Innebygger et bitmap-bilde i etiketten (ASCII hex, binær eller Z64). | Grafikk | Rendered example |
^GS |
Skriver ut et registrert, opphavsrett eller annet symbol. | Grafikk | Rendered example |
^DF |
Lagrer etikettformatet på skriveren under et navn. | Lagrede formater og bilder | Rendered example |
^XF |
Henter et lagret format for å fylle sine ^FN-felt. | Lagrede formater og bilder | Rendered example |
~DG |
Lagrer et bilde på skriveren under et navn. | Lagrede formater og bilder | Stores or recalls data; no image of its own |
^XG |
Skriver ut et bilde lagret med ~DG. | Lagrede formater og bilder | Stores or recalls data; no image of its own |
^IM |
Skriver ut et lagret bilde på den nåværende feltopprinnelsen. | Lagrede formater og bilder | 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.