How to Print Zebra Labels from a Browser
Updated June 11, 2026
Zebra printers don’t need a driver to print — they need bytes. A label is just a small block of ZPL text, and anything that can deliver that text to the printer can print. That includes the browser: with the WebUSB API, Chrome and Edge can stream raw ZPL to a USB-connected Zebra printer directly — no drivers, no print spooler, no middleware service, and it works the same on Windows, macOS, Linux and ChromeOS.
The three ways to get ZPL into a Zebra printer
- WebUSB (browser → USB). The web page asks for permission, you pick the printer from a browser dialog once, and the page writes ZPL straight to the USB endpoint. Best when the printer sits next to the person printing. Requires Chrome or Edge and an HTTPS page.
- Network (TCP port 9100). Zebra printers with Ethernet or Wi-Fi listen on port 9100 for raw ZPL. Ideal for shared warehouse printers; browsers cannot open raw TCP sockets, so this path needs a small relay (or the printer’s own HTTP POST support on newer Link-OS models).
- OS driver (Windows/CUPS). Install the Zebra driver and print like any other printer. Convenient for printing documents, but the driver re-renders the page, which can soften barcodes, and per-machine driver setup is exactly what browser printing avoids.
Printing over WebUSB, step by step
- Use Chrome or Edge. WebUSB is supported in Chromium-based browsers; Safari and Firefox have not implemented it.
- Connect the printer over USB and turn it on. Load media and make sure the printer is not paused (a solid green status light on most Zebra models).
- Open the web app and trigger a print. In ZPLCraft, design your label on the canvas and click Print — the browser shows a device-picker dialog listing USB devices.
- Select your printer and grant access. This permission is remembered for the site, so future prints are one click.
- Print. The app claims the USB interface and writes the ZPL bytes; the label is printing before a driver would have finished spooling.
Troubleshooting
The printer doesn’t appear in the device picker
- Swap the USB cable and port — charging-only cables are a surprisingly common culprit.
- Windows: if the Zebra driver (or Zebra Setup Utilities) has claimed the device, the browser may not be able to. Removing the driver, or switching the printer to a generic “usbprint” class device, frees it for WebUSB.
- Linux: grant your user permission to the USB device with a udev rule for vendor ID
0a5f(Zebra), then replug the printer.
The label prints, but it’s blank or faint
- Blank labels usually mean the wrong media mode: direct-thermal stock with the printer set to thermal-transfer (or a missing ribbon). Check
^MT/media settings or run a calibration. - Faint print: increase darkness (
^MDor the driver/front-panel setting) or slow the print speed (^PR).
The layout is shifted or clipped
- Make sure the ZPL targets your printer’s DPI — coordinates written for 203 dpi land in the wrong place on a 300 dpi printhead. ZPLCraft scales the generated code to the printer you choose.
- Run media calibration (
~JC, or hold the feed button per your model’s manual) so the printer finds the label gap and starts each label at the top.
Why browser printing instead of drivers?
Every machine you skip a driver install on is one less thing to maintain. Browser printing means a new warehouse station is ready as soon as someone signs in; barcodes are generated as native ZPL commands rather than re-rendered images, so they stay crisp and scannable; and the same app works across operating systems. The printer’s job is to turn ZPL into a label — the browser is perfectly capable of delivering it.
ZPLCraft was built around this workflow: design visually, preview the exact label, then stream it to the printer over WebUSB or export the ZPL for your existing systems. The free tier includes the full editor and USB printing. If you’re writing ZPL by hand instead, keep the command reference nearby.