Set up a USB thermal printer for WebUSB
What each operating system needs before your browser can talk to a receipt printer directly.
Last updated: October 2026
WebUSB lets a web page send raw bytes to a USB device after you pick it in the browser's own permission dialog. For a receipt printer that is exactly what you want: the page builds ESC/POS commands and the printer executes them. The catch is that the browser can only claim a USB interface that no other driver on your computer is already using. Almost every setup problem comes down to that one rule.
What you need on every system
- A Chromium-based browser: Google Chrome, Microsoft Edge or Brave. Safari and Firefox do not implement WebUSB.
- A USB thermal printer that speaks ESC/POS — practically every generic 58 mm and 80 mm model does.
- A direct USB connection. Unpowered hubs and long cheap cables cause dropped transfers.
- The page served over HTTPS (elysano.com is) or from
localhost.
macOS
macOS has no built-in class driver that grabs a raw ESC/POS printer, so in most cases it works immediately. The exception is when you (or a setup tool) added the printer under System Settings → Printers & Scanners. CUPS then owns the device and the browser's connect step fails or the picker stays empty.
- Open System Settings → Printers & Scanners and remove any entry for the receipt printer.
- Unplug the USB cable, wait two seconds, and plug it back in.
- Reload elysano.com and click Connect printer.
Windows 10 and 11
Windows usually binds receipt printers to its built-in USB printing class driver (usbprint). While that driver is attached, Chrome can see the device but cannot claim it, and you get an "Access denied" or "Unable to claim interface" error. The fix is to switch the device to the generic WinUSB driver:
- Download Zadig, a small open-source USB driver tool.
- Plug in and power on the printer, run Zadig, and choose Options → List All Devices.
- Select your printer from the list (check the USB ID matches the one Elysano shows after a failed connect).
- Choose WinUSB as the target driver and click Replace Driver.
- Replug the printer and connect again in the browser.
Switching to WinUSB means Windows' normal print queue for that printer stops working. If you also print receipts from other software, revert the driver in Device Manager (Update driver → let me pick → USB Printing Support) when you need it.
Linux
Two things usually stand in the way: the kernel's usblp printer driver, and USB device permissions for your user.
- Find the vendor and product ID with
lsusb— for exampleBus 001 Device 007: ID 0416:5011. - Create a udev rule so your user can open the device, e.g.
/etc/udev/rules.d/60-thermal-printer.rules:
Make sure your user is in theSUBSYSTEM=="usb", ATTR{idVendor}=="0416", ATTR{idProduct}=="5011", MODE="0660", GROUP="plugdev"plugdevgroup, then runsudo udevadm control --reload-rules && sudo udevadm trigger. - If
usblphas claimed the printer (checklsmod | grep usblporls /dev/usb/lp*), unload it withsudo modprobe -r usblp, or blacklist it permanently by addingblacklist usblpto a file in/etc/modprobe.d/. - Replug the printer and connect from Chrome.
Remove the printer from CUPS if you added it there, for the same reason as on macOS.
ChromeOS
Chromebooks support WebUSB natively. If the printer was added under Settings → Advanced → Print and scan, remove it so the system print service doesn't hold it, then replug and connect. On managed school or work Chromebooks, an administrator policy can block WebUSB entirely.
Checking that it worked
After you pick the printer in the dialog, Elysano's status bar shows Connected to … with the device's vendor and product ID. Click Test print (text): a short receipt with the date means the connection and command set are working. If the test print works but images don't, see the paper width guide; for anything else, the troubleshooting guide.