This module provides a pure-software alternative to the Odoo IoT Box for thermal receipt printing in the Point of Sale, using QZ Tray as the print driver.
It extends base_report_to_printer_qz — which adds QZ Tray backend support to printing.printer — and brings that functionality into the POS, allowing users to select a printer with backend = qztray directly from the POS configuration.
Key features:
- Cash drawer support: the cash drawer open command (ESC p) is sent automatically after each receipt print.
- No IoT Box required: designed as a software-only alternative for setups where deploying IoT infrastructure is not desirable.
auto_awesome What this module does
AI-generated from the code · Odoo 19.0Print POS receipts directly to a local thermal printer using QZ Tray software instead of an IoT Box. Enable it per point of sale, pick a QZ Tray printer, and receipts plus cash drawer commands are sent automatically.
This module lets a point of sale print customer receipts on a local thermal printer without needing an Odoo IoT Box. It works together with QZ Tray, a small program installed on the cashier's computer.
In the point of sale settings, under the devices section, a new "QZTray" option appears. When enabled, you can choose a "QZTray Receipt Printer" from the printers already configured with the QZ Tray backend, and tick the cash drawer option.
During checkout, the receipt shown on screen is turned into an image and then into ESC/POS printer commands by the server. Those commands are sent to the selected printer through QZ Tray. After each receipt, the cash drawer open command is sent automatically, so the drawer pops open without extra clicks.
A server route also exists to render any receipt image at the right width for 58 mm or 80 mm paper. The module touches the point of sale configuration (pos.config) and the printing printer list, and adds a printer service inside the POS interface. It does not change accounting, stock or sales documents.
Depends on
Models and fields (1)
- pos.config · extends an existing modelis_qztray (Enable QZ Tray Printing), iface_qztray_printer_id (QZ Tray Printer)
Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 1 confirmed, 8 with no information of 9 versions.
Sources · Odoo 19.0
Confirmed on 2026-11-03 in branch 19.0 of OCA/pos.
terminal Installation and usage
OCA documentation · Odoo 19.0Installation
Source · Odoo 19.0This module requires the following non-Python dependency:
- QZ Tray must be installed and running on the client machine that operates the POS.
Odoo module dependency (must be installed first):
- base_report_to_printer_qz — provides the QZ Tray printer backend and the printing.printer model with backend = qztray support.
Python dependencies (installed automatically via external_dependencies):
- python-escpos
Configuration
Source · Odoo 19.0To configure this module, you need to:
- Install and launch the QZ Tray desktop application on the machine where the thermal printer is connected.
- In Odoo, go to Point of Sale \> Configuration \> Settings.
- Select your POS configuration and enable QZ Tray Printing.
- Optionally select a QZ Tray Printer from the list — only printers with backend = qztray (managed by base_report_to_printer_qz) are shown. If left empty, QZ Tray will use the system default printer.
- Save the settings and open the POS session.
To extend or customise the receipt template, inherit PosEscposController in your own module and override the relevant _get_* methods (e.g. _get_header, _get_order_lines). No frontend changes are required.
Usage
Source · Odoo 19.0To use this module, you need to:
- Open a POS session that has QZ Tray Printing enabled.
- Make sure the QZ Tray desktop application is running on the POS machine.
- Process a sale and click Payment to print the receipt.
The receipt is sent directly to the thermal printer via QZ Tray. Receipt HTML is rendered to PNG and converted to ESC/POS format server-side before sending following native Odoo logic. The cash drawer is opened automatically after each print if enabled.
No IoT Box or network printer configuration is required.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.