TypeScript-first driver for the LabeLife / Aimo / Quyin family of ~95 thermal label printers — Phomemo, Munbyn, Wagtail, 123inkt LW650XL PRO and friends — over Bluetooth-SPP, BLE GATT, TCP-9100, and (when VID/PIDs surface) USB.
Two wire-protocol families coexist in this catalog:
- TSPL II with vendor LZO
BITMAPmodes 3 / 4 andSSS<KEY>:<VALUE>status framing — 76 models across three sub-engines (tspl-c1,tspl-l3,tspl-m3). - Vendor-extended ESC/POS with
1F 11 xxopcodes and an optional LZO-compressed raster path — 21 models across three sub-engines (escpos-a,escpos-y0,escpos-p1).
The driver is transport-unaware: bring any Transport from
@thermal-label/transport
and the same encoder produces correct wire bytes for whichever
sub-engine your device uses.
pnpm add @thermal-label/labelife-node # Node USB / TCP / Serial / Bluetooth-SPP
pnpm add @thermal-label/labelife-web # Browser WebUSB / Web Serial / Web BluetoothMost labelife printers are classic-Bluetooth — pair the printer at the
OS level and the SPP channel surfaces as a serial port (/dev/rfcomm0,
/dev/tty.<Name>-SPPDev, COMx):
import { LabelifeDiscovery, MEDIA } from '@thermal-label/labelife-node';
const discovery = new LabelifeDiscovery();
const printer = await discovery.openPrinter({
serialPath: '/dev/rfcomm0',
deviceKey: 'D521_PRO',
});
try {
await printer.print(image, MEDIA.DIE_CUT_50X30);
} finally {
await printer.close();
}For a Wi-Fi-capable -WF model (post-provisioning), use TCP-9100:
const printer = await discovery.openPrinter({
host: '192.168.1.42',
deviceKey: 'PM_344_WF',
});import { requestPrinterBluetooth, MEDIA } from '@thermal-label/labelife-web';
// BLE-Wi-Fi models (PM-344-WF, PM-241-WF, AM-242-WF, …)
const printer = await requestPrinterBluetooth('PM_344_WF');
try {
await printer.print(image, MEDIA.DIE_CUT_50X30);
} finally {
await printer.close();
}Or via Web Serial for OS-paired Bluetooth-SPP / USB-serial bridges:
import { requestPrinterSerial } from '@thermal-label/labelife-web';
const printer = await requestPrinterSerial({ deviceKey: 'D521_PRO' });95 devices — 0 verified · 0 partial · 0 broken · 95 untested
| Model | Key | USB PID | Transports | Status |
|---|---|---|---|---|
| 6XL Pro | K_6XL_PRO |
— | BT SPP, USB | ⏳ untested |
| 650 | K_650 |
— | BT SPP, USB | ⏳ untested |
| 660 | K_660 |
— | BT SPP, USB | ⏳ untested |
| A64M | A64M |
— | BT SPP, USB | ⏳ untested |
| A641M | A641M |
— | BT SPP, USB | ⏳ untested |
| A646 | A646 |
— | BT SPP, USB | ⏳ untested |
| AM-242-BT | AM_242_BT |
— | BT SPP, USB | ⏳ untested |
| AM-242-WF | AM_242_WF |
— | BT LE, TCP, USB | ⏳ untested |
| AM-243-BT | AM_243_BT |
— | BT SPP, USB | ⏳ untested |
| AM-243-WF | AM_243_WF |
— | BT LE, TCP, USB | ⏳ untested |
| CS 60pro 300BT | CS_60PRO_300BT |
— | BT SPP, USB | ⏳ untested |
| CT200 | CT200 |
— | BT SPP, USB | ⏳ untested |
| CT200Pro | CT200_PRO |
— | BT SPP, USB | ⏳ untested |
| CT310 | CT310 |
— | BT SPP, USB | ⏳ untested |
| CT310Pro | CT310_PRO |
— | BT SPP, USB | ⏳ untested |
| CT610 | CT610 |
— | BT SPP, USB | ⏳ untested |
| CT610-BT | CT610_BT |
— | BT SPP, USB | ⏳ untested |
| D420BT | D420BT |
— | BT SPP, USB | ⏳ untested |
| D420D | D420D |
— | BT SPP, USB | ⏳ untested |
| D421R | D421R |
— | BT SPP, USB | ⏳ untested |
| D422S | D422S |
— | BT SPP, USB | ⏳ untested |
| D450 | D450 |
— | BT SPP, USB | ⏳ untested |
| D450BT-Z | D450BT_Z |
— | BT SPP, USB | ⏳ untested |
| D520 Pro | D520_PRO |
— | BT SPP, USB | ⏳ untested |
| D520BT | D520BT |
— | BT SPP, USB | ⏳ untested |
| D520BT-Z | D520BT_Z |
— | BT SPP, USB | ⏳ untested |
| D520W | D520W |
— | BT SPP, USB | ⏳ untested |
| D521 Pro | D521_PRO |
— | BT SPP, USB | ⏳ untested |
| D530 Pro | D530_PRO |
— | BT SPP, USB | ⏳ untested |
| D530BT | D530BT |
— | BT SPP, USB | ⏳ untested |
| D550 Plus | D550_PLUS |
— | BT SPP, USB | ⏳ untested |
| D550 Pro | D550_PRO |
— | BT SPP, USB | ⏳ untested |
| D550BT | D550BT |
— | BT SPP, USB | ⏳ untested |
| D560 Plus | D560_PLUS |
— | BT SPP, USB | ⏳ untested |
| DS-50P | DS_50P |
— | BT SPP, USB | ⏳ untested |
| GFLP801 | GFLP801 |
— | BT SPP, USB | ⏳ untested |
| GFLP806 | GFLP806 |
— | BT SPP, USB | ⏳ untested |
| ITPP 129 | ITPP_129 |
— | BT SPP, USB | ⏳ untested |
| ITPP 129B | ITPP_129B |
— | BT SPP, USB | ⏳ untested |
| JK01-R | JK01_R |
— | BT SPP | ⏳ untested |
| JP01-S | JP01_S |
— | BT SPP | ⏳ untested |
| JY-2024 | JY_2024 |
— | BT SPP, USB | ⏳ untested |
| KT-320S | KT_320S |
— | BT SPP | ⏳ untested |
| KT260P | KT260P |
— | BT SPP | ⏳ untested |
| KT320 | KT320 |
— | BT SPP | ⏳ untested |
| KT600 | KT600 |
— | BT SPP | ⏳ untested |
| LK-01 | LK_01 |
— | BT SPP | ⏳ untested |
| LW650XL PRO | LW650XL_PRO |
— | BT SPP, USB | ⏳ untested |
| M08F | M08F |
— | BT SPP | ⏳ untested |
| M660 | M660 |
— | BT SPP | ⏳ untested |
| M831 | M831 |
— | BT SPP | ⏳ untested |
| M832 | M832 |
— | BT SPP | ⏳ untested |
| Munbyn ITPP129S | MUNBYN_ITPP129S |
— | BT LE, TCP, USB | ⏳ untested |
| P780BT PRO | P780BT_PRO |
— | BT SPP | ⏳ untested |
| P831 | P831 |
— | BT SPP | ⏳ untested |
| P831Max | P831_MAX |
— | BT SPP | ⏳ untested |
| P833 | P833 |
— | BT SPP | ⏳ untested |
| PL70 | PL70 |
— | BT SPP, USB | ⏳ untested |
| PM-241-BT | PM_241_BT |
— | BT SPP, USB | ⏳ untested |
| PM-241-WF | PM_241_WF |
— | BT LE, TCP, USB | ⏳ untested |
| PM-241Z-BT | PM_241Z_BT |
— | BT SPP, USB | ⏳ untested |
| PM-245-BT | PM_245_BT |
— | BT SPP, USB | ⏳ untested |
| PM-246S-BT | PM_246S_BT |
— | BT SPP, USB | ⏳ untested |
| PM-246S-WF | PM_246S_WF |
— | BT LE, TCP, USB | ⏳ untested |
| PM-247-WF | PM_247_WF |
— | BT LE, TCP, USB | ⏳ untested |
| PM-248-Pro | PM_248_PRO |
— | BT SPP, USB | ⏳ untested |
| PM-248-WF | PM_248_WF |
— | BT LE, TCP, USB | ⏳ untested |
| PM-249-BT | PM_249_BT |
— | BT SPP, USB | ⏳ untested |
| PM-249-WF | PM_249_WF |
— | BT LE, TCP, USB | ⏳ untested |
| PM-344-WF | PM_344_WF |
— | BT LE, TCP, USB | ⏳ untested |
| PM-2410-BT | PM_2410_BT |
— | BT SPP, USB | ⏳ untested |
| PM-2411-BT | PM_2411_BT |
— | BT SPP, USB | ⏳ untested |
| PM-2415-BT | PM_2415_BT |
— | BT SPP, USB | ⏳ untested |
| PM64Air | PM64AIR |
— | BT SPP, USB | ⏳ untested |
| PM64D | PM64D |
— | BT SPP, USB | ⏳ untested |
| Q302 | Q302 |
— | BT SPP | ⏳ untested |
| QF238B | QF238B |
— | BT SPP, USB | ⏳ untested |
| QF368B | QF368B |
— | BT SPP, USB | ⏳ untested |
| QR-386A | QR_386A |
— | BT SPP, USB | ⏳ untested |
| S821 | S821 |
— | BT SPP | ⏳ untested |
| S821BT | S821BT |
— | BT SPP | ⏳ untested |
| T08A | T08A |
— | BT SPP | ⏳ untested |
| T08FS | T08FS |
— | BT SPP | ⏳ untested |
| T200 | T200 |
— | BT SPP, USB | ⏳ untested |
| T200Pro | T200_PRO |
— | BT SPP, USB | ⏳ untested |
| T300 | T300 |
— | BT SPP, USB | ⏳ untested |
| T310 | T310 |
— | BT SPP, USB | ⏳ untested |
| T330 | T330 |
— | BT SPP, USB | ⏳ untested |
| T350 | T350 |
— | BT SPP, USB | ⏳ untested |
| T410 | T410 |
— | BT SPP, USB | ⏳ untested |
| T430 | T430 |
— | BT SPP, USB | ⏳ untested |
| T800 | T800 |
— | BT SPP, USB | ⏳ untested |
| T831 | T831 |
— | BT SPP | ⏳ untested |
| Wagtail CT-200 | WAGTAIL_CT_200 |
— | BT SPP, USB | ⏳ untested |
| Wagtail CT-310 | WAGTAIL_CT_310 |
— | BT SPP, USB | ⏳ untested |
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.
Full docs at https://thermal-label.github.io/labelife/.
- Getting started
- Hardware list (incl. transport reachability matrix and udev/Zadig preconditions)
- Wire protocols — TSPL · ESC/POS
- Node guide
- Web guide
- API reference
MIT — see LICENSE.