zpl.tools
Printer configuration

~JD - Enable Communications Diagnostics

Switches the printer into diagnostic mode, where received bytes are printed as a hex dump instead of interpreted.

~JD puts the printer into diagnostic mode, where it prints what it receives instead of interpreting it. The printer lays out every byte on the label as its character and its hexadecimal value, with any communication errors. A format that renders the wrong label, or no label, reads back as the printer saw it. It is the tool for encoding and framing problems, not for layout problems.

Syntax

~JD

Support

Not implemented yetparsed: none · state: none · rendered: none

Recognised as valid ZPL and not implemented yet, so it has no effect on the output.

The renderer does not parse this command. Labelary implements diagnostic mode, re-measured on 2026-08-22: every byte from ~JD to the next ~JE draws as its own character with that byte number in hexadecimal underneath, 32 characters to a line, and the dump is a page of its own. A dump longer than the page is clipped rather than continued, so it is always one page, and an empty dump renders no page at all. The renderer interprets the ZPL normally and prints the label instead. The gap needs a parser mode that captures raw bytes plus a page generator for the character grid, so no milestone covers it yet. — not pinned by a test

Labelary renders this command.

Parameters

~JD takes no arguments.

Behavior

Diagnostic mode is a mode, not a per-format setting: it begins when the printer reads ~JD and lasts across ^XZ until ~JE turns it off. The dump uses the current label length and the full print width, 32 characters to a line.

Labelary does not continue a long dump onto a second page. Re-measured on 2026-08-22, a dump of 2000 bytes fills one page and the rest is lost, and an empty dump renders no page at all.

Labelary implements the rest faithfully. Measured on 2026-07-30, ~JD^XA^FO50,50^A0N,40,40^FDhi^FS^XZ returns a single page that reads ^ X A ^ F O 5 0 , 5 0 ^ A 0 N , 4 0 , 4 0 ^ F D h i ^ F S ^ with 5E 58 41 5E 46 4F … beneath the characters. The renderer does not implement it: it parses the ZPL as usual and returns the label the ZPL describes. A format that relies on ~JD to diagnose itself gets a rendered label from the renderer and a byte dump from Labelary.

Differences from the specification

zpl.tools against Labelary

Where our output differs from Labelary for the same input. These are the differences that break a migration.

  • Labelary renders the rest of the stream as a byte dump; the renderer renders the label the stream describes. We measured this on 2026-07-29. — not pinned by a test

Example

Diagnostic mode turned on ahead of an ordinary label:

~JD
^XA
^FO50,50^A0N,40,40^FDhi^FS
^XZ

Open in viewer