@thermal-label/brother-ql
September 21, 2026 · View on GitHub
TypeScript-first Brother QL label printer driver — Node USB/TCP and browser WebUSB.
Install
pnpm add @thermal-label/brother-ql-node # Node USB/TCP
pnpm add @thermal-label/brother-ql-web # Browser WebUSB
For ad-hoc printing from the terminal, install
thermal-label-cli — it
auto-detects every installed driver, no per-driver CLI needed.
Quick example (Node, USB)
import { discovery } from '@thermal-label/brother-ql-node';
import { MEDIA } from '@thermal-label/brother-ql-core';
const printer = await discovery.openPrinter();
try {
// `image` is RawImageData — { width, height, data } where data is
// an RGBA Uint8Array. Any pipeline that produces RGBA works.
await printer.print(image, MEDIA[259]); // 62mm continuous
} finally {
await printer.close();
}
Quick example (Browser, WebUSB)
import { requestPrinter } from '@thermal-label/brother-ql-web';
import { MEDIA } from '@thermal-label/brother-ql-core';
const printer = await requestPrinter(); // call from a user gesture
try {
await printer.print(image, MEDIA[259]);
} finally {
await printer.close();
}
Supported hardware
24 devices — 4 verified · 0 partial · 14 expected · 0 unsupported · 6 unverified
| Model | Key | USB PID | Transports | Status |
|---|---|---|---|---|
| PT-E550W | PT_E550W | 0x2060 | USB, TCP | ⏳ unverified |
| PT-P750W | PT_P750W | 0x2062 | USB, TCP | ⏳ unverified |
| PT-P900 | PT_P900 | 0x2083 | USB | ⏳ unverified |
| PT-P900W | PT_P900W | 0x2085 | USB, TCP | ⏳ unverified |
| PT-P910BT | PT_P910BT | 0x20c7 | USB, BT SPP | ⏳ unverified |
| PT-P950NW | PT_P950NW | 0x2086 | USB, TCP | ⏳ unverified |
| QL-500 | QL_500 | 0x2015 | USB | 🔄 expected |
| QL-550 | QL_550 | 0x2016 | USB | 🔄 expected |
| QL-560 | QL_560 | 0x2027 | USB | 🔄 expected |
| QL-570 | QL_570 | 0x2028 | USB | 🔄 expected |
| QL-580N | QL_580N | 0x2029 | USB, TCP | 🔄 expected |
| QL-600 | QL_600 | 0x20c0 | USB | 🔄 expected |
| QL-650TD | QL_650TD | 0x201b | USB | 🔄 expected |
| QL-700 | QL_700 | 0x2042 | USB | ✅ verified |
| QL-710W | QL_710W | 0x2043 | USB, TCP | 🔄 expected |
| QL-720NW | QL_720NW | 0x2044 | USB, TCP | ✅ verified |
| QL-800 | QL_800 | 0x209b | USB | ✅ verified |
| QL-810W | QL_810W | 0x209c | USB, TCP | 🔄 expected |
| QL-820NWBc | QL_820NWBc | 0x209d | USB, TCP, BT SPP | ✅ verified |
| QL-1050 | QL_1050 | 0x2020 | USB | 🔄 expected |
| QL-1060N | QL_1060N | 0x202a | USB, TCP | 🔄 expected |
| QL-1100 | QL_1100 | 0x20a7 | USB | 🔄 expected |
| QL-1110NWB | QL_1110NWB | 0x20a8 | USB, TCP | 🔄 expected |
| QL-1115NWB | QL_1115NWB | 0x20ab | USB, TCP | 🔄 expected |
Click any model to open its detail page on the docs site, where engines, supported media, and verification reports live. The same data backs the interactive cross-driver table.
Documentation
Full docs at https://thermal-label.github.io/brother-ql/.
- Getting started
- Hardware list
- Media + DK roll reference
- Protocol reference — QL raster · PT raster
- Troubleshooting
- API reference
- Live demo
Packages
| Package | Role |
|---|---|
@thermal-label/brother-ql-core | Protocol encoding, device + media registries. Browser + Node. |
@thermal-label/brother-ql-node | Node USB (libusb) and TCP (port 9100) transport. |
@thermal-label/brother-ql-web | Browser WebUSB transport. |
The per-driver *-cli package was retired — use the unified
thermal-label-cli instead.
Compatibility
| Node | ≥ 20.9 (Node 24 LTS recommended) |
| Browsers | Chrome / Edge 89+ (WebUSB), secure context (https:// or localhost) |
| Linux | typically needs a udev rule for 04F9:* to access without sudo |
| Peers | @thermal-label/contracts, @thermal-label/transport, @mbtech-nl/bitmap |
| License | MIT |
Not affiliated with Brother. Trademarks belong to their owners.
Contributing
See CONTRIBUTING/
on the org .github repo — code of conduct, security policy, "adding a
driver" guide, release process.