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 | El que fa | Category | Evidence |
|---|---|---|---|
^XA |
Obre una etiqueta. Tot fins a ^XZ és una etiqueta. | Format Etiqueta | Rendered example |
^XZ |
Tanca l'etiqueta oberta per ^XA i l'imprimeix. | Format Etiqueta | Rendered example |
^PW |
Estableix l'amplada de l'etiqueta en punts. | Format Etiqueta | Rendered example |
^LL |
Estableix la longitud de l'etiqueta en punts. | Format Etiqueta | Rendered example |
^LH |
Mou l'origen des del qual es mesura cada posició de camp. | Format Etiqueta | Rendered example |
^LS |
Desplaça cada camp a l'esquerra pel nombre de punts especificat. | Format Etiqueta | Rendered example |
^LT |
Mou tota l'etiqueta amunt o avall pel nombre especificat de files de punts. | Format Etiqueta | Rendered example |
^PO |
Imprimeix l'etiqueta normalment (N) o cap per avall (I). | Format Etiqueta | Rendered example |
^PM |
Reflexa tota l'etiqueta horitzontalment quan està configurat a Y. | Format Etiqueta | Rendered example |
^PQ |
Estableix quantes etiquetes imprimir; cada una compta com una etiqueta a la vista prèvia. | Format Etiqueta | Rendered example |
^MU |
Canvia la unitat de mesura a punts, polzades o mil·límetres. | Format Etiqueta | Rendered example |
^CI |
Selecciona el conjunt de caràcters. ^CI28 és UTF-8. | Format Etiqueta | Rendered example |
^FO |
Estableix la posició del camp: coordenades x, y en punts des de la cantonada superior esquerra. | Camps i posició | Rendered example |
^FT |
Posa un camp per la seva línia de base en comptes de la seva cantonada superior esquerra. | Camps i posició | Rendered example |
^FD |
Les dades del text o del codi de barres del camp actual. | Camps i posició | Rendered example |
^FS |
Acaba el camp actual. | Camps i posició | Rendered example |
^FB |
Envolta el text en un bloc amb una amplada, comptatge de línies i alineació. | Camps i posició | Rendered example |
^FR |
Imprimeix el camp blanc sobre negre sobre el que hi hagi sota. | Camps i posició | Rendered example |
^FH |
Permet que ^FD contingui escapes hexadecimals com _0D. | Camps i posició | Rendered example |
^FW |
Estableix la rotació per defecte per als camps que segueixen. | Camps i posició | Rendered example |
^FN |
Dóna nom a un camp variable en un format emmagatzemat. | Camps i posició | Rendered example |
^FX |
Un comentari. La impressora ignora tot fins al següent comandament. | Camps i posició | Rendered example |
^SN |
Imprimeix un número que s'incrementa a cada etiqueta. | Camps i posició | PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example |
^A |
Selecciona la tipografia, rotació i mida per al següent camp de text. | Text i fonts | Rendered example |
^A@ |
Selecciona una tipografia pel seu nom de fitxer a la impressora. | Text i fonts | Rendered example |
^CF |
Estableix la tipografia i la mida utilitzades quan un camp no té ^A. | Text i fonts | Rendered example |
^TB |
Envolta un camp de text dins d'una caixa d'amplada i alçada donades. | Text i fonts | Rendered example |
^CW |
Assigna un nom d'una lletra a un fitxer de font. | Text i fonts | Stores or recalls data; no image of its own |
^BY |
Estableix l'amplada del mòdul, la proporció d'ample a estret i l'alçària per als codis de barres que segueixen. | Codis de barres | Rendered example |
^BC |
Codi de barres Codi 128, el més comú en etiquetes d'enviament. | Codis de barres | Rendered example |
^B3 |
Codi de barres Codi 39. | Codis de barres | Rendered example |
^B2 |
Codi de barres Intercalat 2 de 5, només numèric. | Codis de barres | Rendered example |
^BE |
Codi de barres de venda al detall EAN-13. | Codis de barres | Rendered example |
^B8 |
Codi de barres de venda al detall EAN-8. | Codis de barres | Rendered example |
^BU |
Codi de barres UPC-A per al comerç. | Codis de barres | Rendered example |
^B9 |
Codi de barres UPC-E per al comerç. | Codis de barres | Rendered example |
^BQ |
Codi QR. Les dades del camp comencen amb el nivell de correcció d'errors i el mode d'entrada, com en ^FDQA,text. | Codis de barres | Rendered example |
^BX |
Codi de barres 2D Data Matrix. | Codis de barres | Rendered example |
^B7 |
Codi de barres 2D PDF417 apilats. | Codis de barres | Rendered example |
^BO |
Codi de barres 2D Aztec. | Codis de barres | Rendered example |
^BD |
MaxiCode, utilitzat per UPS. | Codis de barres | Rendered example |
^B0 |
Codi de barres 2D Aztec; el mateix comandament que ^BO. | Codis de barres | Rendered example |
^BA |
Codi de barres Codi 93: més dens que el Codi 39, amb dos caràcters de control integrats. | Codis de barres | Rendered example |
^BK |
Codi de barres Codabar, utilitzat per biblioteques, bancs de sang i alguns missatgers. | Codis de barres | Rendered example |
^BL |
Codi de barres LOGMARS, el Codi 39 de les forces armades dels EUA amb un dígit de control obligatori. | Codis de barres | Rendered example |
^B1 |
Codi de barres Codi 11, numèric, utilitzat en equips de telecomunicacions. | Codis de barres | Rendered example |
^BM |
Codi de barres MSI (Plessey modificat), numèric, utilitzat en etiquetes d'estanteries. | Codis de barres | Rendered example |
^BP |
Codi de barres Plessey, numèric, amb un dígit de control CRC. | Codis de barres | Rendered example |
^BS |
L'addició de 2 o 5 dígits imprimida al costat d'un codi UPC o EAN. | Codis de barres | Rendered example |
^BZ |
Còdigs de barres postals dels EUA: POSTNET, PLANET i Correu Intel·ligent. | Codis de barres | Rendered example |
^B5 |
Codi de barres USPS PLANET. | Codis de barres | Rendered example |
^BR |
GS1 DataBar (abans RSS): codis de barres GTIN compactes per a productes i cupons. | Codis de barres | 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, un PDF417 més petit per a etiquetes petites. | Codis de barres | Rendered example |
^GB |
Dibuixa una caixa o una línia: amplada, alçada, gruix de la vora, color i arrodoniment. | Gràfics | Rendered example |
^GC |
Dibuixa un cercle: diàmetre, gruix de la vora i color. | Gràfics | Rendered example |
^GE |
Dibuixa una el·lipse. | Gràfics | Rendered example |
^GD |
Dibuixa una línia diagonal. | Gràfics | Rendered example |
^GF |
Incorpora una imatge en mapa de bits a l'etiqueta (hexadecimal ASCII, binari o Z64). | Gràfics | Rendered example |
^GS |
Imprimeix un símbol registrat, de copyright o altre. | Gràfics | Rendered example |
^DF |
Emmagatzema el format de l'etiqueta a la impressora sota un nom. | Formats i imatges emmagatzemades | Rendered example |
^XF |
Recupera un format emmagatzemat per omplir els seus camps ^FN. | Formats i imatges emmagatzemades | Rendered example |
~DG |
Emmagatzema una imatge a la impressora sota un nom. | Formats i imatges emmagatzemades | Stores or recalls data; no image of its own |
^XG |
Imprimeix una imatge emmagatzemada amb ~DG. | Formats i imatges emmagatzemades | Stores or recalls data; no image of its own |
^IM |
Imprimeix una imatge emmagatzemada a l'origen del camp actual. | Formats i imatges emmagatzemades | 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.
Migració des de 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.