TypeScript printer drivers and plumbing for people who want thermal labels inside real applications — not a throwaway script, not a proprietary SDK you cannot ship.
flowchart TB
APP[Your application]
CLI["thermal-label-cli<br/><sub>list · status · print</sub>"]
BQ["@thermal-label/brother-ql-*<br/><sub>core · node · web</sub>"]
LM["@thermal-label/labelmanager-*<br/><sub>core · node · web</sub>"]
LW["@thermal-label/labelwriter-*<br/><sub>core · node · web</sub>"]
TR["@thermal-label/transport<br/><sub>USB · TCP · WebUSB · Web Bluetooth · Web Serial</sub>"]
CT["@thermal-label/contracts<br/><sub>Transport · PrinterAdapter · MediaDescriptor · PrinterStatus</sub>"]
APP --> CLI
APP --> BQ
APP --> LM
APP --> LW
CLI --> BQ
CLI --> LM
CLI --> LW
BQ --> TR
LM --> TR
LW --> TR
BQ --> CT
LM --> CT
LW --> CT
TR --> CT
The stack is deliberately layered:
-
@thermal-label/contracts— shared types only:Transport,PrinterAdapter,PrinterDiscovery, media and status shapes, structured errors. One import surface for drivers and for apps that sit above them. Bitmap types line up with@mbtech-nl/bitmapso rendered labels move cleanly from design tools into drivers. -
@thermal-label/transport— byte channels that implement those contracts: NodeUsbTransport/TcpTransport(libusb + JetDirect-style raw TCP), and browserWebUsbTransport/WebBluetoothTransport/WebSerialTransportwith discovery helpers. Subpath exports keep nativeusbout of browser bundles. -
Device families — each driver is published as core + node + web packages: Brother QL, DYMO LabelWriter, DYMO LabelManager (D1 / WebHID). Same concepts everywhere: open or request a printer, query status and detected media, print or preview, close cleanly.
-
thermal-label-cli— one minimal command-line entry point that aggregates every installed driver forlist,status, and quickprint text/print image— ideal for CI, headless servers, and "does this USB cable actually work?" moments. Richer template, CSV, and sheet workflows live in the burnmark tooling, not here by design.
If you are embedding printers: start from contracts and transport, pick the driver packages you need, and wire PrinterDiscovery / PrinterAdapter into your app the same way in Node or in Chromium. If you are shipping labels at volume with barcodes and templates, pair these drivers with burnmark-io — same ecosystem, different layer.
Documentation: thermal-label.github.io — full per-driver guides, hardware lists, API reference, live demos.
Contributing: see CONTRIBUTING/ — code of conduct, security policy, "adding a driver" guide, release process, docs conventions all live in this .github repo.
Explore: Organization website · burnmark-io (design & production) · mbtech-nl (shared bitmap & configs)
Repositories: contracts · transport · brother-ql · labelwriter · labelmanager · cli
Not affiliated with DYMO, Brother, or other manufacturers; trademarks belong to their owners.