Two languages, one job
Both describe a label as commands: where each piece of text goes, which font, which barcode. They differ in shape. ZPL marks every command with a caret or a tilde (^FO, ^FD, ~DG) and wraps each label in ^XA … ^XZ. EPL has no prefix at all — one command per line, a letter followed by comma-separated parameters, with the label printed by a P line at the end.
Neither is a better description of a label; ZPL simply won. It has more commands (stored formats, graphics, more symbologies), every modern Zebra speaks it, and it is the thermal format UPS, FedEx, ShipStation and EasyPost all support, and the one marketplaces hand out.
How to tell which one you have
Open the file in any text editor. You do not need to read it, only to look at the first few lines.
- ZPL: starts with ^XA and is full of carets — ^FO50,50^A0N,40,40^FDText^FS. Each label ends with ^XZ.
- EPL: usually starts with an empty line and then N (clear the buffer), followed by lines such as q812, Q1218,24, A50,50,0,4,1,1,N,"Text" and B50,120,0,1,3,7,100,B,"12345", and ends with P1.
- No carets and no N/P lines, but long runs of binary-looking characters: it is probably a raster or a different vendor's language, not either of these.
- A .prn extension says nothing either way — it only means “something a printer driver wrote to a file”.
Which printers speak which
Most current Zebra desktop printers read both and switch automatically depending on what arrives. The trouble is the older and the specialised models.
- Current Zebra desktops (the GK, GX and ZD families) accept ZPL and EPL and detect which one a job is written in.
- The old LP 2844 and TLP 2844 speak EPL only; the variants with a -Z suffix (LP 2844-Z, TLP 2844-Z) are the ZPL ones. The letter matters more than the model number.
- If in doubt, print the printer's configuration label (on Zebra desktops it is printed from the feed button; the exact sequence is in the manual), which lists the language settings in use.
- Non-Zebra thermal printers frequently speak neither natively — TSPL, DPL and others — and offer an emulation that has to be switched on.
When the file and the printer disagree
The symptom is the same either way: commands printed as text, a blank label fed through, or the printer doing nothing. There are three ways out, in order of preference.
- Ask the source for the other language. Carrier APIs take the label format as a request parameter — UPS and FedEx both offer ZPL and EPL among their thermal formats — so the cheapest fix is usually one field in the request.
- Switch the printer. Dual-language Zebras can be told which language to expect, and some non-Zebra printers have a ZPL or EPL emulation mode in their setup utility.
- Render it. For ZPL, the converter on this page draws the label and gives you a PDF any printer can print at 100%. It does not read EPL — an EPL file produces no labels here — so for EPL the first two options are the ones that work.
The other label languages you may meet
ZPL and EPL are Zebra's. Every other thermal printer maker has its own, and they are not interchangeable either.
- DPL — Datamax-O'Neil (now Honeywell).
- IPL — Intermec (also Honeywell).
- TSPL — TSC, and many of the low-cost printers sold online that are built on TSC-compatible boards.
- PPLA and PPLB — Argox, which is why so many entry-level printers in Brazil arrive speaking them.