Print Daemon 0.1.0

Print Daemon

Print Daemon is a background service for Windows, macOS and Linux that you install on a machine in the same network as your printers. It pulls self-contained print jobs from a cloud queue and prints them. Your systems put a job on the queue; the daemon at the site prints it. It only makes outbound connections, so the site needs no inbound ports or public address.

This documentation is for version 0.1.0.

What it prints#

Job type Printers How
zpl, raw (any printer language, e.g. EPL or PCL) Zebra and other label printers Raw TCP (port 9100) or an OS print queue. All documents and copies of a job are sent as one print job, so labels from other jobs can't get in between.
pdf, image, office, text Desktop and office printers The OS spooler: CUPS on macOS and Linux, the Windows spooler with SumatraPDF on Windows. Office files and text are converted to PDF with headless LibreOffice first.
pdf Network printers that accept PDF (most current Xerox, Brother, HP, Canon and Epson models) Driverless IPP, the protocol AirPrint uses: no OS install or driver, the same on every OS.

Microsoft Office is not needed. LibreOffice's conversion is very close to Word's but not pixel-identical (fonts that aren't installed are substituted, and complex layouts can shift); if the output has to be exact, send PDF. See Install › Requirements.

Supported queues#

All three handle large messages:

Vendor Large-message mechanism Max job size
AWS SQS S3 extended payload, compatible with the Java Amazon SQS Extended Client Library (1.x and 2.x pointer formats) S3 object size
Azure Service Bus (Premium) Native large messages 100 MB (set Max message size on the entity)
Google Cloud Pub/Sub Native, plus a GCS claim-check attribute (payloadGcsUri) for anything over 10 MB 10 MB native / GCS object size

How to produce jobs for each queue is in Print job messages › Producing jobs; how the daemon consumes them, retries and dead-letters is in Queues.

How it works#

text
  your system                cloud queue                  print daemon (at the site)       printers
      │                           │                                │                          │
      │  job JSON (schema v1) ───▶│  SQS / Service Bus / Pub/Sub   │                          │
      │  large jobs: S3 / GCS     │◀──── outbound connection ──────│                          │
      │                           │──────────── job ──────────────▶│  resolve printer,        │
      │                           │                                │  convert, print ────────▶│
      │                           │◀──────── ack / retry ──────────│                          │
  1. Your system sends a job: one JSON message with the printer, the documents and options (Print job messages). Give each site its own queue or subscription: a daemon prints every job it receives.
  2. The daemon resolves the printer: a printer registered on this daemon, an OS queue name, or a network address (Printers).
  3. It prints and acks the message. Transient failures (printer offline, timeout) are retried with a backoff; jobs that can't print (invalid message, unknown printer) or that keep failing go to a local dead-letter list on the daemon, where an operator re-sends, edits or deletes them (Queues › Dead letters).
  4. Printed job ids are remembered, so a redelivered message with the same jobId isn't printed twice.

The daemon finds printers on the local network by itself and registers them. A local admin UI and CLI cover queue setup, manual printer setup, test prints and dead letters.

How it fits with the other products#

Print Daemon is sold separately from the other products of the family, and works with any producer that can put JSON on a queue. Two common sources of print data:

Where to go next#

Questions: support@insanelab.dev.