ZPL vs EPL: Differences
Complete comparison between Zebra's two programming languages with code examples and migration guide
Try our free ZPL tools right now
Free, no signup required — Instant results
ZPL or EPL?
Zebra Technologies developed two programming languages for their thermal printers: ZPL (Zebra Programming Language) and EPL (Eltron Programming Language). ZPL was created in the 1990s as the successor to EPL, which existed since the 1980s when Zebra acquired Eltron Technologies. Although both are used to create labels, they have fundamental differences in syntax, graphic capabilities, barcode support and performance. EPL was officially discontinued in 2010 but remains in use in legacy systems. This guide helps you understand the differences and decide when to migrate.
Comparison table
| Característica | ZPL | EPL |
|---|---|---|
| Year of introduction | 1990s — Modern language, actively developed | 1980s — Legacy language, discontinued in 2010 |
| Basic syntax | Commands with ^ (format) and ~ (configuration). Example: ^XA...^XZ | Commands with simple letters. Example: N...P |
| Label structure | ^XA opens, ^XZ closes. Fields with ^FO+^FD+^FS | N clears buffer, P prints. Fields with direct positioning |
| 1D barcodes | Code 128, Code 39, EAN-13, UPC-A, Code 93, Interleaved 2 of 5 and more | Code 128, Code 39, EAN-13, UPC-A — fewer options |
| 2D barcodes | QR (^BQ), DataMatrix (^BX), PDF417 (^B7), Aztec (^BO) | Only PDF417 and DataMatrix on recent models, no native QR |
| Graphics and images | ^GF for images, ^GB for boxes, ^GC for circles, ^GD for diagonal lines | Only GW (Graphic Write) for simple bitmap images |
| Fonts | Scalable built-in fonts (0-9, A-Z), downloadable TrueType, Unicode via ^CI28 | 5 fixed bitmap fonts, no scaling, no Unicode |
| Text rotation | 4 orientations per field (N=0°, R=90°, I=180°, B=270°) | 4 rotations but only for the entire label |
| Serialization | ^SN with configurable increment, zero padding, multiple fields | Basic serialization with C command, less flexible |
| Print speed | ^PR controls speed per label (1-14 inches/second) | S controls speed but with less granularity |
| Print mode | ^MM supports tear-off, peel-off, rewind, cutter and applicator | Fewer modes, more limited configuration |
| Compatible printers | All modern Zebra (ZD, ZT, ZQ, ZE). Partially compatible with TSC and SATO | Original Eltron and old Zebra (LP, TLP). No support on current printers |
| Support and documentation | Updated ZPL II manual, active community, abundant examples | Archived documentation, no updates since 2010 |
| Marketplace usage | Amazon, eBay, Shopify and FedEx generate shipping labels in ZPL | No modern marketplace generates labels in EPL |
When to use each language?
ZPLUsar cuando...
- Modern Zebra printers of any series (ZD, ZT, ZQ, ZE)
- Need QR codes, DataMatrix or any 2D barcode
- Require graphics, logos or images on labels
- Shipping labels from marketplaces (Amazon, eBay, Shopify)
- Integration with ERP, WMS or e-commerce platforms
- Need advanced serialization or variable data fields
- Labels with international characters using UTF-8
- Any new project, regardless of complexity
EPLUsar cuando...
- Old Eltron printers that don't support ZPL
- Stable legacy systems that work and don't need changes
- Extremely simple text-only labels without graphics
- Existing EPL code that would be costly to rewrite immediately
- Specific hardware with firmware that only accepts EPL
Code comparison: ZPL vs EPL
Simple text label
^XA ^FO50,50 ^A0N,30,30 ^FDHello World^FS ^XZ
N A50,50,0,3,1,1,N,"Hello World" P1
Label with Code 128 barcode
^XA ^FO50,50 ^BY2 ^BCN,100,Y,N,N ^FD123456789^FS ^XZ
N B50,50,0,1,2,3,100,B,"123456789" P1
Label with text + barcode + box
^XA ^FO50,30^A0N,25,25 ^FDProduct: Widget^FS ^FO50,70^BY2 ^BCN,80,Y^FDSKU001^FS ^FO40,20^GB350,150,2^FS ^XZ
N A50,30,0,2,1,1,N,"Product: Widget" B50,70,0,1,2,2,80,B,"SKU001" X40,20,2,390,170 P1
Quick EPL to ZPL migration guide
- 1Replace N (clear buffer in EPL) with ^XA (start format in ZPL)
- 2Replace P or P1 (print in EPL) with ^XZ (end format in ZPL)
- 3Convert A (text in EPL) to ^FO + ^A + ^FD + ^FS. Example: A50,50,0,3,1,1,N,"Text" → ^FO50,50 ^A0N,30,30 ^FDText^FS
- 4Convert B (barcode in EPL) to ^BY + ^BC. Example: B50,100,0,1,2,3,80,B,"123" → ^FO50,100 ^BY2 ^BCN,80,Y ^FD123^FS
- 5Convert X (line in EPL) to ^GB (graphic box in ZPL). Parameters change format
- 6Add ^CI28 at the beginning if you need accents or international characters
- 7Use the ZPLPDF ZPL Viewer to verify each converted label before printing
- 8Migrate gradually: convert one label at a time and validate on the actual printer
Recommendation
For any new project, ZPL is the right choice without question. It offers more features, better support, up-to-date documentation and is the worldwide logistics industry standard. If you have existing EPL code, plan a gradual migration following the steps in this guide. If you use non-Zebra printers (Brother, DYMO, Rollo), convert your ZPL code to PDF with ZPLPDF to print from any brand.
Frequently asked questions about ZPL vs EPL
ZPL or EPL: which is better for current printers?
How do I convert EPL code to ZPL?
Does my printer support both ZPL and EPL?
Why do Amazon and FedEx use ZPL format?
Is EPL faster than ZPL?
Does ZPLPDF work with EPL files?
Can I use ZPL on non-Zebra printers?
Convert your ZPL code
Try our free tools to view, validate and convert ZPL files to PDF.