Bulk Barcode Generator Generate Free →
✓ Free forever · No signup · No watermark

Free ZPL Barcode Generator for Zebra Printers

Generate native ZPL II barcode commands for Zebra, Rollo, and SATO thermal printers — in bulk, from a CSV or Excel file. Supports Code 128, EAN-13, UPC-A, QR Code, Data Matrix, and Code 39. Choose 203, 300, or 600 DPI. No signup, no row limit, no watermark — all processing runs locally in your browser.

Generate ZPL Barcodes Free →
Free forever No signup required No row limit Data stays in browser

Why Use Our ZPL Generator?

🖨️

Native ZPL II — No Driver

Export raw ZPL II commands that send directly to your Zebra printer over USB or network. No driver, no PDF, no print dialog scaling issues.

🎯

Printer-Perfect Quality

The printer renders barcodes at its native DPI (203/300/600). No bitmap scaling, no blur — every bar exactly the right width for reliable scanning.

📦

All 6 Formats, Bulk

Code 128, EAN-13, UPC-A, Code 39, QR Code, and Data Matrix — generate hundreds of ZPL labels at once from a CSV or Excel upload.

Generate ZPL Labels in 3 Steps

1

Paste or Upload

Paste your values one per line, or upload a CSV/Excel file. Select the barcode format (Code 128, EAN-13, QR Code, etc.).

2

Set DPI & Label Size

Choose your printer's DPI (203, 300, or 600) and set the label dimensions in inches. Common presets: 4″×6″ shipping label, 2.25″×1.25″ small label.

3

Download & Send to Printer

Download the .zpl file and send it to your Zebra printer via USB copy, LPR, or the Zebra web interface. All labels print in one batch.

Who Uses ZPL Barcode Export?

Warehouse

Warehouse & 3PL

Generate inventory labels, bin tags, and receiving labels directly to Zebra ZT or ZD series printers on the warehouse floor.

Shipping

Shipping & Fulfillment

Create shipping barcode labels at 300 DPI for Zebra 4×6 thermal printers — FedEx, UPS, USPS, and carrier-compliant formats.

Retail

Retail Price & SKU Labels

Print small Zebra labels (2.25″×1.25″) with Code 128 or Code 39 SKU barcodes for shelf and product tagging.

Rollo

Rollo & SATO Printers

Rollo printers and many SATO models accept ZPL II commands — use the same export for your non-Zebra thermal printer.

What is ZPL and Why Does It Matter?

ZPL (Zebra Programming Language) is a text-based command language developed by Zebra Technologies for their thermal label printers. Instead of sending a pre-rendered image to the printer, ZPL sends instructions that the printer's firmware interprets and renders at its native resolution. The result is sharper, more precise barcodes than any bitmap-to-print approach.

ZPL II — the current version — is supported across the entire Zebra product line and has become a de facto industry standard, with many third-party printer manufacturers (Rollo, SATO, Datamax, Honeywell) offering ZPL compatibility modes. For high-volume thermal label printing, ZPL is the professional standard: files are small (under 200 bytes per label), print jobs queue reliably, and barcode quality is consistent across thousands of labels.

ZPL Command Reference for Barcodes

ZPL is a text-based command language, not a barcode symbology. A label is a short sequence of caret-prefixed commands that the printer interprets and renders itself. These are the commands that appear in every label our generator produces.

CommandPurpose
^XAStart of label format — opens every label
^XZEnd of label format — triggers printing
^FOx,yField origin — position in dots from the top-left corner
^BYw,r,hBar code field default — module width, wide-to-narrow ratio, height
^FDField data — the value to encode
^FSField separator — ends the current field
^PQnPrint quantity — number of copies

Symbology commands

CommandSymbologyExpected input
^BCCode 128Any ASCII string
^BEEAN-1312 digits — printer appends the check digit
^BUUPC-A11 digits — printer appends the check digit
^B3Code 39Uppercase alphanumeric
^BQQR CodeString with a model/magnification prefix
^BXData MatrixAny string

DPI, Dots, and the Check Digit Trap

Everything is measured in dots, not millimetres

ZPL positions and sizes are expressed in printer dots, so the same command file produces a different physical size on printers of different resolution. The conversions are worth memorising:

Printer resolutionDots per mmDots per inch
203 DPI8203
300 DPI11.8300
600 DPI23.6600

A label designed at 203 DPI and sent unchanged to a 300 DPI printer comes out at roughly two-thirds the intended size, with everything shifted toward the top-left corner. This is the most common cause of "my ZPL file worked on the old printer but not the new one." Our generator asks for your printer's DPI up front and computes all dot values for that resolution, so the exported file is already correct for the target device.

The EAN-13 and UPC-A check digit trap

This one silently produces wrong barcodes, so it is worth stating plainly. Zebra printers calculate and append the check digit themselves for retail symbologies. ^BE expects 12 digits and produces a 13-digit EAN-13; ^BU expects 11 digits and produces a 12-digit UPC-A.

If you pass a complete 13-digit EAN-13 to ^BE, the printer treats your check digit as data, computes a new one, and prints a barcode encoding a different number than the one printed underneath it. The label looks entirely correct to a human and scans to the wrong value. Our ZPL export strips the trailing check digit for both formats automatically, so you can paste full-length codes from your spreadsheet without thinking about it.

Why native ZPL beats sending an image

Some tools "support ZPL" by wrapping a bitmap in a ^GFA graphics command. That works, but it gives up both of ZPL's real advantages. A bitmap label runs 40–60 KB; the equivalent native ZPL is under 200 bytes — a difference that matters when pushing thousands of labels over a serial or network connection. More importantly, a bitmap is rendered at whatever resolution the generating tool chose, then rescaled by the printer, which softens bar edges. Native commands let the printer draw each bar at exact pixel boundaries for its own printhead.

Sending a .zpl file to your printer

Compatibility: ZPL II is native on Zebra printers and supported by Rollo, SATO, TSC, and Godex through emulation. Its predecessor EPL appears on older Zebra and Eltron hardware and is not interchangeable. See the thermal printer guide for a brand-by-brand comparison.

ZPL Barcode Generator — Frequently Asked Questions

What is ZPL and why do I need it for a Zebra printer?
ZPL (Zebra Programming Language) is the native command language that Zebra thermal printers understand. When you send ZPL commands to a Zebra printer — either via USB, network, or Bluetooth — the printer interprets and renders the barcode itself at full resolution, without needing a driver or print dialog. This produces sharper barcodes than printing a PDF image, especially at small label sizes.
Which printers does ZPL work with?
ZPL II is supported by all modern Zebra printers (ZD, ZT, GX, GK, GT, and LP series), as well as many third-party thermal printers that support ZPL emulation — including Rollo, SATO, Datamax, and Intermec models. Check your printer manual for ZPL II compatibility.
What barcode formats can I export as ZPL?
Bulk Barcode Generator exports ZPL II commands for all six supported formats: Code 128, EAN-13, UPC-A, Code 39, QR Code, and Data Matrix.
How do I send a ZPL file to my Zebra printer?
Connect your Zebra printer via USB, network (Ethernet or WiFi), or Bluetooth. On Windows, open a Command Prompt and run: copy /b your-file.zpl \\your-printer-name. On Mac/Linux, use: lpr -P PrinterName your-file.zpl. Some Zebra models also have a built-in web interface where you can paste ZPL directly.
What DPI setting should I choose?
Match the DPI setting to your printer's print head resolution: 203 DPI for standard Zebra printers (ZD220, ZD230, GX420), 300 DPI for high-resolution models (ZD420, ZD620, ZT230), and 600 DPI for precision industrial printers (ZT610, ZT620). Using the wrong DPI will make barcodes appear too wide or too narrow.
Can I generate ZPL for hundreds of labels at once?
Yes. Paste values one per line or upload a CSV/Excel file with any number of rows. The generator creates a single .zpl file containing all label commands — send it once to your printer and all labels print in sequence.
Why does my EAN-13 or UPC-A ZPL label print the wrong number?
Because Zebra printers calculate the check digit themselves. The ^BE command expects 12 digits and appends the thirteenth; ^BU expects 11 and appends the twelfth. Pass a complete 13-digit EAN-13 to ^BE and the printer treats your check digit as data, computes a new one, and encodes a different number than the text printed below it — a label that looks perfect but scans wrong. Our export strips the trailing check digit for both formats automatically, so full-length spreadsheet values are safe to paste.
How do I actually send a .zpl file to my printer?
On Windows, share the printer and run copy /b labels.zpl \\localhost\ZebraPrinter, or paste the contents into Zebra Setup Utilities' direct-communication window. On macOS or Linux, use lp -d printer_name -o raw labels.zpl — the -o raw flag matters, as it stops the print system from trying to render the file as a document. Over a network, send the raw file to TCP port 9100 on the printer's IP. Rollo's desktop app accepts ZPL files directly.
Does ZPL work on Rollo, SATO, or TSC printers?
Yes. ZPL II is native to Zebra but Rollo, SATO, TSC, and Godex all support it through emulation, which is why it functions as the industry's de facto standard. What is not interchangeable is EPL, the older Eltron language found on some legacy Zebra hardware — an EPL-only printer will not interpret ZPL commands. Brother and Dymo use closed proprietary protocols and cannot accept ZPL at all; those printers need the PDF or PNG export instead.
Other Barcode Formats