It is text, not an image
ZPL stands for Zebra Programming Language. A .zpl file — or .txt, or .prn, the name changes nothing — is plain text full of instructions: put this text at this position, draw this barcode at this width, rule this line.
Which is why a text editor opens it perfectly and helps not at all: it does exactly what you asked, showing you the text. What is missing is something that executes the instructions, which is what a thermal printer does — or the viewer on this page.
How to read a line of ZPL
Every label starts at ^XA and ends at ^XZ. In between, each instruction begins with a caret and two letters, followed by its parameters separated by commas.
Take ^FO50,120^A0N,40,40^FD123 Example St^FS: put the next field 50 dots across and 120 down; use font 0, unrotated, 40 dots tall; the content is “123 Example St”; end of field. Four commands, one line of a label.
- ^XA … ^XZ — the start and end of one label. Two blocks are two labels.
- ^FO — where the next thing is drawn, in dots from the corner.
- ^FD — the content: the text, or the barcode's data.
- ^FS — closes the current field. Forgetting it is the most common cause of a label that renders as one run-on line.
- ^BC, ^BQ — a Code 128 barcode and a QR code.
- ^PW, ^LL — the label's width and length, in dots.
Why systems hand it over this way
Because it is what the printer wants to receive. A PDF has to be rasterised and rescaled before printing, and that step is where a barcode loses precision; ZPL arrives with its measurements already expressed in printhead dots.
It is also why ZPL turns up one layer down in your stack rather than in a marketplace download: a carrier API returns it base64-encoded, ShipStation switches an account to it through support, EasyPost and Shippo take it as a request parameter, and a WMS or ERP writes it straight to .prn.
How to open one
Drop the file into the converter below and the label appears drawn, the way it would come off a thermal printer, dot for dot. From there it downloads as a PDF at true physical size, a PNG at printer resolution, or prints straight from the browser.
All of it happens inside your browser: the file is never uploaded to a server, which is what matters when what is inside it is a customer's address.