Skip to content

Hardware support

Per-device support for @thermal-label/marklife-*. The device table is generated from the registry (pnpm docs:hardware); the rest of the page is hand-authored. For the byte streams, see the protocol pages.

Sub-engines

Every registry entry binds to exactly one wire protocol through engines[].protocol:

protocolWire formatChassisHardware status
marklife-l1110 FF session frame, uncompressed GS v 0 rasterP12, P15, P15R, A1, R15, LP15, LP90, LP25, BARABOGO P12bench-confirmed — P12 and P15 print over USB, SPP and BLE
marklife-yxq1F-prefixed commands, zlib raster, per-id job shapesS2, S8, P50, D210, X2, X2 BLE and rebrandsbench-confirmed on the S2 (id 2) over SPP and BLE; ids 1, 3, 5, 8, 9 inferred
marklife-cpclCPCL page in a 1F 80 envelopeT3inferred, never driven
marklife-jbigESC/POS-shaped framing, JBIG rasterD100, X4, X8, U210, L100payload encoder not implemented — unsupported
marklife-tsplTSPL II, zlib BITMAP mode 3encoder retained, no chassis
marklife-escposESC/POS GS v 0 subsetencoder retained, no chassis

Transports

TransportChassisNotes
Bluetooth Classic SPPevery registered chassis except the X2 BLE entryStandard SPP channel 1; pair at the OS, open the RFCOMM port as a serial device. Web Serial in the browser, SerialTransport on Node. Pairing PIN: 1234 on the P12 and P15, none on the S2.
BLE GATTevery registered chassisThe advertised name is the SPP name plus _BLE. The chassis advertise a vendor UUID, not the service they host; the profile is resolved by probing after connect (below).
USBP12 (09c7:0011), P15 (5958:0015)USB Printer-class, bulk endpoint; prints the same byte stream — both bench-confirmed. The S2's USB port is charge-only. Other chassis unaudited.
TCPNo chassis exposes one.

Packet size and pacing

Every chassis takes its job as fixed-size packets with a pause between them, on every transport. The S2 accepts a 176-byte BLE packet and prints nothing; 95-byte packets print. The registry declares the ceiling on transports['bluetooth-gatt'].mtu (95 on the S2 and its siblings, 90 on the P12; 237 where an entry declares none) and, where a chassis drains faster than the family's 30 ms, engines[].capabilities.interChunkDelayMs (1 ms on the X2 family). Both printer classes apply them.

BLE profiles

A GATT probe of the P12 (2026-09-10) found it hosting Profile A, the Microchip transparent UART and the generic printer service at once, so the profile is not a per-model fact. marklife-web probes in this order and uses the first whose TX and RX characteristics resolve:

ProfileServiceTX / RXFlow control
A0000ff00-…ff02 / ff01credit gate on ff03 — see Link layer
B — Microchip transparent UART49535343-fe7d-4ae5-8fa9-9fafd205e455…-8841-43f4-… / …-1e4d-4bd9-…none
C0000fd00-…fd01 / fd02none
D — generic printer service000018f0-…2af1 / 2af0none

The advertisement carries e7810a71-73ae-499d-8c15-faa9aef0c3f2 and nothing else, so a Web Bluetooth picker filtered on a service UUID matches no chassis; requestPrinters filters on the registry's name prefixes and lists every profile in optionalServices.

Hardware families

The vendor sells the same chassis under many names. The registry key <NAME>_BY_<BASE> records a whitelabel of a base chassis; the families below group the registered keys by the hardware behind them.

FamilyHeadProtocolRegistered keys
P12 — narrow tape96 dots (12 mm)L11P12, BARABOGOP12, LP25_BY_P12
P15 — narrow tape96 dots, assumed from the P12L11P15, P15R, A1, LP15
R15, LP90 — narrow tapeunknown (registry carries a class guess)L11R15, LP90
S2 — 2" mobile384 dotsYXQ id 2S2, JAMMUK_S2, ETZ0535, M50_BY_S2
P50 — 2" mobile384 dots, assumedYXQ id 3P50, M57_BY_P50, T2, LPW40
X2 — 2" mobile384 dots, assumedYXQ id 9 (SPP), id 8 (BLE)X2, X2_BLE, M60_BY_X2
S8384 dots, assumedYXQ id 1S8
D210 — 4" desktop832 dots, assumedYXQ id 5D210
X8 / U210 — 4" desktopunknownJBIG id 10 (no encoder)X8, U210_BY_D210
D100unknownJBIG id 12D100
X4 / L100unknownJBIG id 7X4, L100_BY_X4
T3576 dots, assumedCPCLT3

Not registered but named by thermoprint's device table: the P80 family (CPCL), LuckP D1, HM-24-28, A31, P7, P11, P1s. A unit whose name starts with a registered prefix resolves to that entry; anything else is offered the list.

Only the P12 head width is measured (a BLE HCI capture carries 12-byte rows) and only the S2's is confirmed by a print (48-byte rows in every captured job). The other widths are the size class's usual value and carry a TODO in the registry; the D210 and X8 may well be 210 mm heads rather than 4", which the taxonomy cannot yet express.

Device support table

Generated by pnpm docs:hardware from the registry. verified is a maintainer or community print on that chassis; expected is lifted from a verified sibling on the same protocol and has not itself been driven — for marklife-yxq that lift crosses protocol ids, so an expected D210 or X2 rests on the S2 alone.

28 devices — 3 verified · 0 partial · 19 expected · 5 unsupported · 1 unverified

ModelKeyProtocolTransportsStatus
A1A1L11BT SPP, BT LE🔄 expected
BARABOGOP12BARABOGOP12L11BT SPP, BT LE🔄 expected
D100D100JBIGBT SPP, BT LE❌ unsupported
D210D210YXQBT SPP, BT LE🔄 expected
ewtto ET-Z0535ETZ0535YXQBT SPP, BT LE🔄 expected
Jammuk S2JAMMUK_S2YXQBT SPP, BT LE🔄 expected
L100L100_BY_X4JBIGBT SPP, BT LE❌ unsupported
LP15LP15L11BT SPP, BT LE🔄 expected
LP25LP25_BY_P12L11BT SPP, BT LE🔄 expected
LP90LP90L11BT SPP, BT LE🔄 expected
LPW40LPW40YXQBT SPP, BT LE🔄 expected
M50M50_BY_S2YXQBT SPP, BT LE🔄 expected
M57M57_BY_P50YXQBT SPP, BT LE🔄 expected
M60M60_BY_X2YXQBT SPP, BT LE🔄 expected
P12P12L11USB, BT SPP, BT LE✅ verified
P15P15L11USB, BT SPP, BT LE✅ verified
P15RP15RL11BT SPP, BT LE🔄 expected
P50P50YXQBT SPP, BT LE🔄 expected
R15R15L11BT SPP, BT LE🔄 expected
S2S2YXQBT SPP, BT LE✅ verified
S8S8YXQBT SPP, BT LE🔄 expected
T2T2YXQBT SPP, BT LE🔄 expected
T3T3CPCLBT SPP, BT LE⏳ unverified
U210U210_BY_D210JBIGBT SPP, BT LE❌ unsupported
X2X2YXQBT SPP, BT LE🔄 expected
X2 (BLE)X2_BLEYXQBT LE🔄 expected
X4X4JBIGBT SPP, BT LE❌ unsupported
X8X8JBIGBT SPP, BT LE❌ unsupported

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.

Verification

Hardware verification runs through the harness app: pair a chassis in the browser, print the diagnostic, submit the report. See the verification checklist.