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#
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 ──────────│ │- 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.
- The daemon resolves the printer: a printer registered on this daemon, an OS queue name, or a network address (Printers).
- 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).
- Printed job ids are remembered, so a redelivered message with the same
jobIdisn'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:
- Label Designer renders and merges ZPL labels: send the merged ZPL as a
zpljob. - Report Designer renders templates and data to PDF: send the PDF (base64) as a
pdfjob.
Where to go next#
- Install: requirements, install, and running it as a system service.
- Print job messages: the message format, and how to send jobs to each queue.
- Queues: queue configuration, delivery semantics, dead letters and firewall rules.
- Printers: discovery, label resolution and manual setup.
- Admin UI & CLI, Troubleshooting, License and Status.
Questions: support@insanelab.dev.