@thermal-label/labelwriter-node
v0.6.4
Published
Node.js USB and TCP driver for Dymo LabelWriter printers
Downloads
540
Maintainers
Readme
@thermal-label/labelwriter-node
Node.js USB and TCP driver for Dymo LabelWriter printers.
Install
pnpm add @thermal-label/labelwriter-nodeRequirements
- Node.js >= 20.9.0 (Node 24 LTS recommended)
- Linux: udev rule required for raw USB access without
sudo— see below
LabelWriter 550 / 5XL: These models enforce an NFC label lock. Only genuine Dymo labels will print. This is a hardware restriction that cannot be bypassed in software.
Quick Start
import { openPrinter } from '@thermal-label/labelwriter-node';
const printer = await openPrinter();
try {
await printer.printText('Hello LabelWriter');
} finally {
await printer.close();
}Discovery
import { listPrinters } from '@thermal-label/labelwriter-node';
const printers = listPrinters();
console.log(printers); // [{ device, serialNumber, path, transport }]TCP / Network
import { openPrinterTcp } from '@thermal-label/labelwriter-node';
const printer = await openPrinterTcp('192.168.1.100');
await printer.printText('Hello via TCP');
await printer.close();Image Printing
Requires optional dependency @napi-rs/canvas:
pnpm add @napi-rs/canvasawait printer.printImage('/path/to/logo.png', { threshold: 128 });
await printer.printImage('./label.png', { dither: true, rotate: 90 });Error Recovery
If the printer is in an unknown state (e.g. after a failed print job):
await printer.recover();Linux udev Rule
Without a udev rule, USB access requires sudo. Create /etc/udev/rules.d/99-dymo-labelwriter.rules:
SUBSYSTEM=="usb", ATTR{idVendor}=="0922", MODE="0666", GROUP="plugdev"Then reload:
sudo udevadm control --reload-rules && sudo udevadm triggerLinks
Supported hardware
22 devices — 4 verified · 0 partial · 13 expected · 0 unsupported · 5 unverified
| Model | Key | USB PID | Transports | Status |
| --- | --- | --- | --- | --- |
| LabelWriter 4XL | LW_4XL | 0x001f | USB | 🔄 expected |
| LabelWriter 5XL | LW_5XL | 0x002a | USB, TCP | 🔄 expected |
| LabelWriter 300 | LW_300 | 0x0009 | USB, Serial | 🔄 expected |
| LabelWriter 310 | LW_310 | 0x0009 | USB, Serial | 🔄 expected |
| LabelWriter 330 | LW_330 | 0x0007 | USB, Serial | 🔄 expected |
| LabelWriter 330 Turbo | LW_330_TURBO | 0x0008 | USB, Serial | ✅ verified |
| LabelWriter 400 | LW_400 | 0x0019 | USB | ✅ verified |
| LabelWriter 400 Turbo | LW_400_TURBO | 0x001a | USB | 🔄 expected |
| LabelWriter 450 | LW_450 | 0x0020 | USB | 🔄 expected |
| LabelWriter 450 Duo | LW_450_DUO | 0x0023 | USB | 🔄 expected |
| LabelWriter 450 Turbo | LW_450_TURBO | 0x0021 | USB | 🔄 expected |
| LabelWriter 450 Twin Turbo | LW_450_TWIN_TURBO | 0x0022 | USB | ⏳ unverified |
| LabelWriter 550 | LW_550 | 0x0028 | USB | ✅ verified |
| LabelWriter 550 Turbo | LW_550_TURBO | 0x0029 | USB, TCP | 🔄 expected |
| LabelWriter Duo - 96 | LW_DUO_96 | 0x0017 | USB | 🔄 expected |
| LabelWriter Duo - 128 | LW_DUO_128 | 0x001d | USB | ✅ verified |
| LabelWriter EL40 | LW_EL40 | — | Serial | ⏳ unverified |
| LabelWriter EL60 | LW_EL60 | — | Serial | ⏳ unverified |
| LabelWriter SE450 | LW_SE450 | 0x0400 | USB, Serial | 🔄 expected |
| LabelWriter Turbo | LW_TURBO | — | Serial | ⏳ unverified |
| LabelWriter Twin Turbo | LW_TWIN_TURBO | 0x0018 | USB | ⏳ unverified |
| LabelWriter Wireless | LW_WIRELESS | 0x0031 | 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.
License
MIT — Copyright (c) 2026 Mannes Brak
