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 | O que faz | Category | Evidence |
|---|---|---|---|
^XA |
Abre um rótulo. Tudo até ^XZ é um rótulo. | Formato da Etiqueta | Rendered example |
^XZ |
Fecha o rótulo aberto por ^XA e o imprime. | Formato da Etiqueta | Rendered example |
^PW |
Define a largura da etiqueta em pontos. | Formato da Etiqueta | Rendered example |
^LL |
Define o comprimento da etiqueta em pontos. | Formato da Etiqueta | Rendered example |
^LH |
Muda a origem de onde cada posição de campo é medida. | Formato da Etiqueta | Rendered example |
^LS |
Desloca cada campo para a esquerda pelo número especificado de pontos. | Formato da Etiqueta | Rendered example |
^LT |
Mova toda a etiqueta para cima ou para baixo pelo número de linhas de pontos fornecido. | Formato da Etiqueta | Rendered example |
^PO |
Imprime a etiqueta normalmente (N) ou de cabeça para baixo (I). | Formato da Etiqueta | Rendered example |
^PM |
Inverte toda a etiqueta horizontalmente quando definido como Y. | Formato da Etiqueta | Rendered example |
^PQ |
Define quantas etiquetas imprimir; cada uma conta como uma etiqueta na pré-visualização. | Formato da Etiqueta | Rendered example |
^MU |
Muda a unidade de medida para pontos, polegadas ou milímetros. | Formato da Etiqueta | Rendered example |
^CI |
Seleciona o conjunto de caracteres. ^CI28 é UTF-8. | Formato da Etiqueta | Rendered example |
^FO |
Define a posição do campo: coordenadas x, y em pontos a partir do canto superior esquerdo. | Campos e posição | Rendered example |
^FT |
Posiciona um campo pela sua linha de base em vez de seu canto superior esquerdo. | Campos e posição | Rendered example |
^FD |
Os dados de texto ou código de barras do campo atual. | Campos e posição | Rendered example |
^FS |
Encerra o campo atual. | Campos e posição | Rendered example |
^FB |
Envolve o texto em um bloco com uma largura, contagem de linhas e alinhamento. | Campos e posição | Rendered example |
^FR |
Imprime o campo branco sobre preto sobre o que estiver abaixo. | Campos e posição | Rendered example |
^FH |
Permite que ^FD contenha escapes hexadecimais como _0D. | Campos e posição | Rendered example |
^FW |
Define a rotação padrão para os campos que seguem. | Campos e posição | Rendered example |
^FN |
Nomeia um campo variável em um formato armazenado. | Campos e posição | Rendered example |
^FX |
Um comentário. A impressora ignora tudo até o próximo comando. | Campos e posição | Rendered example |
^SN |
Imprime um número que aumenta em cada etiqueta. | Campos e posição | PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example |
^A |
Seleciona a fonte, rotação e tamanho para o próximo campo de texto. | Texto e fontes | Rendered example |
^A@ |
Seleciona uma fonte pelo nome do arquivo na impressora. | Texto e fontes | Rendered example |
^CF |
Define a fonte e o tamanho usados quando um campo não tem ^A. | Texto e fontes | Rendered example |
^CW |
Atribui um nome de uma letra a um arquivo de fonte. | Texto e fontes | Stores or recalls data; no image of its own |
^BY |
Define a largura do módulo, a proporção de largo para estreito e a altura dos códigos de barras que seguem. | Códigos de barras | Rendered example |
^BC |
Código de barras Código 128, o mais comum em rótulos de envio. | Códigos de barras | Rendered example |
^B3 |
Código de barras Código 39. | Códigos de barras | Rendered example |
^B2 |
Código de barras Intercalado 2 de 5, apenas numérico. | Códigos de barras | Rendered example |
^BE |
Código de barras de varejo EAN-13. | Códigos de barras | Rendered example |
^B8 |
Código de barras de varejo EAN-8. | Códigos de barras | Rendered example |
^BU |
Código de barras de varejo UPC-A. | Códigos de barras | Rendered example |
^B9 |
Código de barras de varejo UPC-E. | Códigos de barras | Rendered example |
^BQ |
Código QR. Os dados começam com uma correção de erro e modo de entrada, e.g. 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 empilhado. | Códigos de barras | Rendered example |
^BO |
Código de barras 2D Aztec. | Códigos de barras | Rendered example |
^BD |
MaxiCode, utilizado pela UPS. | Códigos de barras | Rendered example |
^GB |
Desenha uma caixa ou uma linha: largura, altura, espessura da borda, cor e arredondamento. | Gráficos | Rendered example |
^GC |
Desenha um círculo: diâmetro, espessura da borda e cor. | Gráficos | Rendered example |
^GE |
Desenha uma elipse. | Gráficos | Rendered example |
^GD |
Desenha uma linha diagonal. | Gráficos | Rendered example |
^GF |
Incorpora uma imagem bitmap na etiqueta (hexadecimal ASCII, binário ou Z64). | Gráficos | Rendered example |
^GS |
Imprime um símbolo registrado, de copyright ou outro. | Gráficos | Rendered example |
^DF |
Armazena o formato da etiqueta na impressora sob um nome. | Formatos e imagens armazenados | Rendered example |
^XF |
Recorda um formato armazenado para preencher seus campos ^FN. | Formatos e imagens armazenados | Rendered example |
~DG |
Armazena uma imagem na impressora sob um nome. | Formatos e imagens armazenados | Stores or recalls data; no image of its own |
^XG |
Imprime uma imagem armazenada com ~DG. | Formatos e imagens armazenados | Stores or recalls data; no image of its own |
^IM |
Imprime uma imagem armazenada na origem do campo atual. | Formatos e imagens armazenados | 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.