I have a generic Bluetooth thermal receipt printer and need to print bills from a web-based SaaS application. The browser's normal print dialog is one option, but it seems poorly suited to receipt printers and may not support features such as paper cutting or reliable formatting. What alternatives can I use to print with minimal user interaction? I may also need to support USB, serial, and network printers later, so I'd like an approach that can grow beyond the current Bluetooth device. The current printer is an MP-80M with USB and Bluetooth, and I'm considering supporting USB first.
3 Answers
For receipt printers, it’s usually better to generate ESC/POS commands instead of printing an HTML page through the browser dialog. Keep receipt formatting separate from the printer connection layer: the same receipt data can produce ESC/POS bytes while the connection layer handles USB, Bluetooth, serial, or network output. Libraries such as Node ESC/POS packages or python-escpos can help with formatting, barcodes, QR codes, code pages, and cutting.
The most flexible SaaS design is a small local print agent installed on the customer’s computer. Your web app sends the receipt job to the agent, and the agent communicates with whichever printer is connected. This avoids browser and operating-system limitations and gives you one integration point for USB, Bluetooth, serial, and network printers. It also works better with Safari, iPads, and browsers that do not support Web Bluetooth, WebUSB, or Web Serial.
A local agent would probably save trouble when customers connect different inexpensive printers. Direct browser APIs can work, but they are mostly limited to Chromium-based browsers and require device permissions and pairing.
QZ Tray is one established option for using a local bridge to send raw ESC/POS data from a web application, including USB and serial devices. Check its current licensing and certificate requirements before building around it, since some deployment and signing features may require a paid plan. You can also build a lightweight agent yourself if you want full control, but then you’ll need to handle installation, security, printer discovery, job status, and updates. For this MP-80M, I’d test USB first and add Bluetooth only if customers specifically need it.

That makes sense. Since the MP-80M supports USB as well as Bluetooth, starting with USB may be simpler than dealing with inconsistent Bluetooth implementations.