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 | Qué hace | Category | Evidence |
|---|---|---|---|
^XA |
Abre una etiqueta. Todo hasta ^XZ es una etiqueta. | Formato de etiqueta | Rendered example |
^XZ |
Cierra la etiqueta abierta por ^XA y la imprime. | Formato de etiqueta | Rendered example |
^PW |
Establece el ancho de la etiqueta en puntos. | Formato de etiqueta | Rendered example |
^LL |
Establece la longitud de la etiqueta en puntos. | Formato de etiqueta | Rendered example |
^LH |
Mueve el origen desde el que se mide cada posición de campo. | Formato de etiqueta | Rendered example |
^LS |
Desplaza cada campo a la izquierda por la cantidad dada de puntos. | Formato de etiqueta | Rendered example |
^LT |
Mueve toda la etiqueta hacia arriba o hacia abajo por el número dado de filas de puntos. | Formato de etiqueta | Rendered example |
^PO |
Imprime la etiqueta normalmente (N) o al revés (I). | Formato de etiqueta | Rendered example |
^PM |
Refleja toda la etiqueta horizontalmente cuando se establece en Y. | Formato de etiqueta | Rendered example |
^PQ |
Establece cuántas etiquetas imprimir; cada una cuenta como una etiqueta en la vista previa. | Formato de etiqueta | Rendered example |
^MU |
Cambia la unidad de medida a puntos, pulgadas o milímetros. | Formato de etiqueta | Rendered example |
^CI |
Selecciona el conjunto de caracteres. ^CI28 es UTF-8. | Formato de etiqueta | Rendered example |
^FO |
Establece la posición del campo: coordenadas x, y en puntos desde la esquina superior izquierda. | Campos y posición | Rendered example |
^FT |
Posiciona un campo por su línea base en lugar de su esquina superior izquierda. | Campos y posición | Rendered example |
^FD |
Los datos de texto o código de barras del campo actual. | Campos y posición | Rendered example |
^FS |
Finaliza el campo actual. | Campos y posición | Rendered example |
^FB |
Envuelve el texto en un bloque con un ancho, contador de líneas y alineación. | Campos y posición | Rendered example |
^FR |
Imprime el campo blanco sobre negro sobre lo que esté debajo. | Campos y posición | Rendered example |
^FH |
Permite que ^FD contenga escapes hexadecimales como _0D. | Campos y posición | Rendered example |
^FW |
Establece la rotación por defecto para los campos que siguen. | Campos y posición | Rendered example |
^FN |
Nombrar un campo variable en un formato almacenado. | Campos y posición | Rendered example |
^FX |
Un comentario. La impresora ignora todo hasta el siguiente comando. | Campos y posición | Rendered example |
^SN |
Imprime un número que se incrementa en cada etiqueta. | Campos y posición | 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 fuente, rotación y tamaño para el siguiente campo de texto. | Texto y fuentes | Rendered example |
^A@ |
Selecciona una fuente por su nombre de archivo en la impresora. | Texto y fuentes | Rendered example |
^CF |
Establece la fuente y el tamaño utilizados cuando un campo no tiene ^A. | Texto y fuentes | Rendered example |
^CW |
Asigna un nombre de una letra a un archivo de fuente. | Texto y fuentes | Stores or recalls data; no image of its own |
^BY |
Establece el ancho del módulo, la relación de ancho a estrecho y la altura para los códigos de barras que siguen. | Códigos de barras | Rendered example |
^BC |
Código de barras de Código 128, el más común en etiquetas de envío. | Códigos de barras | Rendered example |
^B3 |
Código de barras de Código 39. | Códigos de barras | Rendered example |
^B2 |
Código de barras Intercalado 2 de 5, solo numérico. | Códigos de barras | Rendered example |
^BE |
Código de barras minorista EAN-13. | Códigos de barras | Rendered example |
^B8 |
Código de barras minorista EAN-8. | Códigos de barras | Rendered example |
^BU |
Código de barras minorista UPC-A. | Códigos de barras | Rendered example |
^B9 |
Código de barras minorista UPC-E. | Códigos de barras | Rendered example |
^BQ |
Código QR. Los datos comienzan con una corrección de errores y modo de entrada, p. ej. QA, | Códigos de barras | Rendered example |
^BX |
Código de barras 2D Data Matrix. | Códigos de barras | Rendered example |
^B7 |
Código de barras 2D PDF417 apilado. | Códigos de barras | Rendered example |
^BO |
Código de barras 2D Aztec. | Códigos de barras | Rendered example |
^BD |
MaxiCode, utilizado por UPS. | Códigos de barras | Rendered example |
^GB |
Dibuja un cuadro o una línea: ancho, altura, grosor del borde, color y redondeo. | Gráficos | Rendered example |
^GC |
Dibuja un círculo: diámetro, grosor del borde y color. | Gráficos | Rendered example |
^GE |
Dibuja una elipse. | Gráficos | Rendered example |
^GD |
Dibuja una línea diagonal. | Gráficos | Rendered example |
^GF |
Incrusta una imagen de mapa de bits en la etiqueta (hexadecimal ASCII, binario o Z64). | Gráficos | Rendered example |
^GS |
Imprime un símbolo registrado, de copyright u otro. | Gráficos | Rendered example |
^DF |
Almacena el formato de la etiqueta en la impresora bajo un nombre. | Formatos e imágenes almacenadas | Rendered example |
^XF |
Recupera un formato almacenado para llenar sus campos ^FN. | Formatos e imágenes almacenadas | Rendered example |
~DG |
Almacena una imagen en la impresora bajo un nombre. | Formatos e imágenes almacenadas | Stores or recalls data; no image of its own |
^XG |
Imprime una imagen almacenada con ~DG. | Formatos e imágenes almacenadas | Stores or recalls data; no image of its own |
^IM |
Imprime una imagen almacenada en el origen de campo actual. | Formatos e imágenes almacenadas | 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.