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 | Що це робить | Category | Evidence |
|---|---|---|---|
^XA |
Відкриває мітку. Все до ^XZ є одною міткою. | Формат етикетки | Rendered example |
^XZ |
Закриває етикетку, відкриту за допомогою ^XA, та друкує її. | Формат етикетки | Rendered example |
^PW |
Встановлює ширину етикетки в крапках. | Формат етикетки | Rendered example |
^LL |
Встановлює довжину етикетки в крапках. | Формат етикетки | Rendered example |
^LH |
Переміщує початок, від якого вимірюється кожна позиція поля. | Формат етикетки | Rendered example |
^LS |
Зсуває кожне поле вліво на вказану кількість крапок. | Формат етикетки | Rendered example |
^LT |
Переміщує всю етикетку вгору або вниз на зазначену кількість рядків крапок. | Формат етикетки | Rendered example |
^PO |
Друкує ярлик нормально (N) або догори дригом (I). | Формат етикетки | Rendered example |
^PM |
Віддзеркалює всю етикетку горизонтально, коли встановлено Y. | Формат етикетки | Rendered example |
^PQ |
Визначає, скільки етикеток роздрукувати; кожна з них враховується як етикетка в попередньому перегляді. | Формат етикетки | Rendered example |
^MU |
Змінює одиницю вимірювання на точки, дюйми або міліметри. | Формат етикетки | Rendered example |
^CI |
Вибір кодування символів. ^CI28 — це UTF-8. | Формат етикетки | Rendered example |
^FO |
Встановлює положення поля: координати x, y в крапках з верхнього лівого кута. | Поля та позиція | Rendered example |
^FT |
Встановлює поле за його основною лінією, а не за верхнім лівим кутом. | Поля та позиція | Rendered example |
^FD |
Текст або дані штрих-коду поточного поля. | Поля та позиція | Rendered example |
^FS |
Завершує поточне поле. | Поля та позиція | Rendered example |
^FB |
Огортає текст в блок з шириною, кількістю рядків та вирівнюванням. | Поля та позиція | Rendered example |
^FR |
Друкує поле білим на чорному над тим, що під ним. | Поля та позиція | Rendered example |
^FH |
Нехай ^FD містить шестигранні ескейпи, такі як _0D. | Поля та позиція | Rendered example |
^FW |
Встановлює стандартне обертання для наступних полів. | Поля та позиція | Rendered example |
^FN |
Іменує змінне поле в збереженому форматі. | Поля та позиція | Rendered example |
^FX |
Коментар. Принтер ігнорує все до наступної команди. | Поля та позиція | Rendered example |
^SN |
Друкує номер, що збільшується на кожному ярлику. | Поля та позиція | PartialRead but not drawn: the serial field is left out and copies aren't incremented (the same as Labelary's preview). Rendered example |
^A |
Вибір шрифту, обертання та розміру для наступного текстового поля. | Текст та шрифти | Rendered example |
^A@ |
Вибір шрифту за його іменем файлу на принтері. | Текст та шрифти | Rendered example |
^CF |
Встановлює шрифт і розмір, що використовуються, коли поле не має ^A. | Текст та шрифти | Rendered example |
^TB |
Обгортає текстове поле всередині прямокутника заданої ширини і висоти. | Текст та шрифти | Rendered example |
^CW |
Призначає однобуквене ім'я файлу шрифту. | Текст та шрифти | Stores or recalls data; no image of its own |
^BY |
Встановлює ширину модуля, співвідношення широких до вузьких і висоту для наступних штрих-кодів. | Штрих-коди | Rendered example |
^BC |
Штрих-код Code 128, найпоширеніший на транспортних етикетках. | Штрих-коди | Rendered example |
^B3 |
Штрих-код Code 39. | Штрих-коди | Rendered example |
^B2 |
Штрих-код Interleaved 2 of 5, тільки числовий. | Штрих-коди | Rendered example |
^BE |
Роздрібний штрих-код EAN-13. | Штрих-коди | Rendered example |
^B8 |
Роздрібний штрих-код EAN-8. | Штрих-коди | Rendered example |
^BU |
Універсальний товарний код UPC-A. | Штрих-коди | Rendered example |
^B9 |
Універсальний товарний код UPC-E. | Штрих-коди | Rendered example |
^BQ |
QR Code. Дані поля починаються з рівня корекції помилок та режиму введення, як у ^FDQA,text. | Штрих-коди | Rendered example |
^BX |
2D штрих-код Data Matrix. | Штрих-коди | Rendered example |
^B7 |
PDF417 стековий 2D штрихкод. | Штрих-коди | Rendered example |
^BO |
Штрих-код Aztec 2D. | Штрих-коди | Rendered example |
^BD |
MaxiCode, використовується UPS. | Штрих-коди | Rendered example |
^B0 |
2D штрих-код Aztec; та ж команда, що й ^BO. | Штрих-коди | Rendered example |
^BA |
Штрих-код коду 93: більш щільний, ніж код 39, з двома вбудованими контрольними символами. | Штрих-коди | Rendered example |
^BK |
Штрих-код Codabar, який використовують бібліотеки, банки крові та деякі кур'єри. | Штрих-коди | Rendered example |
^BL |
Штрих-код LOGMARS — це Код 39 військових США з обов'язковою перевірочною цифрою. | Штрих-коди | Rendered example |
^B1 |
Штрих-код коду 11, числовий, використовується на телекомунікаційному обладнанні. | Штрих-коди | Rendered example |
^BM |
Штрих-код MSI (модифікований Plessey), числовий, використовується на етикетках на полицях. | Штрих-коди | Rendered example |
^BP |
Штрих-код Plessey, числовий, з контрольною цифрою CRC. | Штрих-коди | Rendered example |
^BS |
2- або 5-цифровий додаток, надрукований поруч з кодом UPC або EAN. | Штрих-коди | Rendered example |
^BZ |
Поштові штрих-коди США: POSTNET, PLANET та Intelligent Mail. | Штрих-коди | Rendered example |
^B5 |
Штрих-код USPS PLANET. | Штрих-коди | Rendered example |
^BR |
GS1 DataBar (раніше RSS): компактні штрих-коди GTIN для продуктів і купонів. | Штрих-коди | 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, менший PDF417 для маленьких етикеток. | Штрих-коди | Rendered example |
^GB |
Малює рамку або лінію: ширина, висота, товщина краю, колір і закруглення. | Графіка | Rendered example |
^GC |
Малює коло: діаметр, товщина краю і колір. | Графіка | Rendered example |
^GE |
Малює еліпс. | Графіка | Rendered example |
^GD |
Малює діагональну лінію. | Графіка | Rendered example |
^GF |
Вбудовує растрове зображення в етикетку (ASCII hex, бінарний або Z64). | Графіка | Rendered example |
^GS |
Друкує зареєстрований, авторський або інший символ. | Графіка | Rendered example |
^DF |
Зберігає формат етикетки на принтері під ім'ям. | Збережені формати та зображення | Rendered example |
^XF |
Відновлює збережений формат для заповнення його полів ^FN. | Збережені формати та зображення | Rendered example |
~DG |
Зберігає зображення на принтері під ім'ям. | Збережені формати та зображення | Stores or recalls data; no image of its own |
^XG |
Друкує зображення, збережене з ~DG. | Збережені формати та зображення | Stores or recalls data; no image of its own |
^IM |
Друкує збережене зображення за поточним початком поля. | Збережені формати та зображення | 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.
Перехід з 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.