ZPL compatibility of the OpenZPL engine
The OpenZPL engine draws the 51 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-20 with openzpl-api 689632b 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 116 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 | Wat het doet | Category | Evidence |
|---|---|---|---|
^XA |
Opent een etiket. Alles tot ^XZ is één etiket. | Etiketformaat | Rendered example |
^XZ |
Sluit het label geopend door ^XA en print het. | Etiketformaat | Rendered example |
^PW |
Stelt de labelbreedte in punten in. | Etiketformaat | Rendered example |
^LL |
Stelt de labellengte in punten in. | Etiketformaat | Rendered example |
^LH |
Verplaatst de oorsprong waar elke veldpositie vanaf wordt gemeten. | Etiketformaat | Rendered example |
^LS |
Verschuift elk veld naar links met het opgegeven aantal punten. | Etiketformaat | Rendered example |
^LT |
Verplaatst het hele etiket omhoog of omlaag met het opgegeven aantal puntregels. | Etiketformaat | Rendered example |
^PO |
Print het etiket normaal (N) of ondersteboven (I). | Etiketformaat | Rendered example |
^PM |
Spiegelt het hele etiket horizontaal wanneer ingesteld op Y. | Etiketformaat | Rendered example |
^PQ |
Stelt in hoeveel labels er afgedrukt moeten worden; elke telt als een label in de voorbeeldweergave. | Etiketformaat | Rendered example |
^MU |
Wijzigt de maateenheid naar stippen, inches of millimeters. | Etiketformaat | Rendered example |
^CI |
Kiest de tekenset. ^CI28 is UTF-8. | Etiketformaat | Rendered example |
^FO |
Stelt de veldpositie in: x, y-coördinaten in punten vanaf de linkerbovenhoek. | Velden en positie | Rendered example |
^FT |
Plaatst een veld op zijn basislijn in plaats van op de bovenste linkerkant. | Velden en positie | Rendered example |
^FD |
De tekst- of barcodegegevens van het huidige veld. | Velden en positie | Rendered example |
^FS |
Eindigt het huidige veld. | Velden en positie | Rendered example |
^FB |
Voorziet tekst van een blok met een breedte, regelcount en uitlijning. | Velden en positie | Rendered example |
^FR |
Print het veld wit op zwart over wat eronder ligt. | Velden en positie | Rendered example |
^FH |
Laat ^FD hex escapes bevatten zoals _0D. | Velden en positie | Rendered example |
^FW |
Stelt de standaardrotatie in voor de volgende velden. | Velden en positie | Rendered example |
^FN |
Noemt een variabel veld in een opgeslagen formaat. | Velden en positie | Rendered example |
^FX |
Een opmerking. De printer negeert alles tot de volgende opdracht. | Velden en positie | Rendered example |
^SN |
Print een nummer dat bij elk etiket toeneemt. | Velden en positie | PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example |
^A |
Kiest het lettertype, de rotatie en de grootte voor het volgende tekstveld. | Tekst en lettertypen | Rendered example |
^A@ |
Kiest een lettertype op basis van de bestandsnaam op de printer. | Tekst en lettertypen | Rendered example |
^CF |
Stelt het lettertype en de grootte in die worden gebruikt wanneer een veld geen ^A heeft. | Tekst en lettertypen | Rendered example |
^CW |
Kent een een-letter naam toe aan een lettertypebestand. | Tekst en lettertypen | Stores or recalls data; no image of its own |
^BY |
Stelt de modulebreedte, de verhouding breed-tot-smal en de hoogte in voor de daaropvolgende barcodes. | Streepjescodes | Rendered example |
^BC |
Code 128-streepjescode, de meest voorkomende op verzendlabels. | Streepjescodes | Rendered example |
^B3 |
Code 39-streepjescode. | Streepjescodes | Rendered example |
^B2 |
Interleaved 2 van 5 streepjescode, alleen numeriek. | Streepjescodes | Rendered example |
^BE |
EAN-13 retail barcode. | Streepjescodes | Rendered example |
^B8 |
EAN-8 retail barcode. | Streepjescodes | Rendered example |
^BU |
UPC-A detailbarcode. | Streepjescodes | Rendered example |
^B9 |
UPC-E detailbarcode. | Streepjescodes | Rendered example |
^BQ |
QR Code. De veldgegevens beginnen met het foutcorrectieniveau en de invoermodus, zoals in ^FDQA,text. | Streepjescodes | Rendered example |
^BX |
Data Matrix 2D barcode. | Streepjescodes | Rendered example |
^B7 |
PDF417 gestapelde 2D-barcode. | Streepjescodes | Rendered example |
^BO |
Aztec 2D-barcode. | Streepjescodes | Rendered example |
^BD |
MaxiCode, gebruikt door UPS. | Streepjescodes | Rendered example |
^GB |
Tekent een doos of een lijn: breedte, hoogte, randdikte, kleur en afronding. | Graphics | Rendered example |
^GC |
Tekent een cirkel: diameter, randdikte en kleur. | Graphics | Rendered example |
^GE |
Tekent een ellips. | Graphics | Rendered example |
^GD |
Tekent een diagonale lijn. | Graphics | Rendered example |
^GF |
Voegt een bitmapafbeelding in het label in (ASCII hex, binair of Z64). | Graphics | Rendered example |
^GS |
Print een geregistreerd, auteursrechtelijk of ander symbool. | Graphics | Rendered example |
^DF |
Slaat de labelindeling op de printer op onder een naam. | Opgeslagen indelingen en afbeeldingen | Rendered example |
^XF |
Haal een opgeslagen formaat op om de ^FN-velden te vullen. | Opgeslagen indelingen en afbeeldingen | Rendered example |
~DG |
Slaat een afbeelding op de printer op onder een naam. | Opgeslagen indelingen en afbeeldingen | Stores or recalls data; no image of its own |
^XG |
Print een afbeelding opgeslagen met ~DG. | Opgeslagen indelingen en afbeeldingen | Stores or recalls data; no image of its own |
^IM |
Print een opgeslagen afbeelding op de huidige veldorigine. | Opgeslagen indelingen en afbeeldingen | 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 |
|---|---|---|
^TB | Text block | Text is drawn on one line; the block doesn't wrap. Use ^FB instead. |
^B0 | Aztec (alias) | No symbol drawn. ^BO, the other Aztec command, is drawn. |
^B1 | Code 11 | No bars; the data is printed as text. |
^B4 | Code 49 | No bars; the data is printed as text. |
^B5 | Planet Code | No bars; the data is printed as text. |
^BA | Code 93 | No bars; the data is printed as text. |
^BB | CODABLOCK | No symbol; the data is printed as text. |
^BF | MicroPDF417 | No symbol; the data is printed as text. |
^BK | ANSI Codabar | No bars; the data is printed as text. |
^BL | LOGMARS | No bars; the data is printed as text. |
^BM | MSI | No bars; the data is printed as text. |
^BP | Plessey | No bars; the data is printed as text. |
^BR | GS1 DataBar | No symbol; the data is printed as text. |
^BS | UPC/EAN extensions | No bars; the data is printed as text. |
^BT | TLC39 | No symbol; the data is printed as text. |
^BZ | POSTAL | No bars; the data is printed as text. |
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.
Moving from 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.