Connector Guide
The connector agent is a lightweight Node.js daemon that runs inside your print facility. It bridges your physical devices with the QueueVIO cloud — no inbound firewall rules required.
How the agent works
All communication is outbound HTTPS initiated by the agent — you never need to open inbound ports or configure NAT rules. The agent self-registers with the cloud on first start, then loops between polling and heartbeat on configurable intervals.
On first start the agent calls POST /api/connectors and stores the returned ID in connector-id.txt. Subsequent restarts reuse the persisted ID.
Every 5 s (configurable) the agent calls GET /api/jobs/dispatch?connectorId=X to fetch jobs queued for its devices.
Each job is translated into the target device's native format (IPP, JDF, hot folder, vendor REST) by the matching adapter and submitted.
Stage progress and completion are written back via PATCH /api/jobs/:id/status. Heartbeats and SNMP device metrics run in parallel.
Installation
Requires Node.js 20+. The agent ships as a single npm package with no native dependencies.
npm install -g @queuevio/connector-agent # or run without installing: npx @queuevio/connector-agent
On first start — or with the --setup flag — the agent opens a browser-based wizard at http://localhost:3101. Enter your API URL, token, and tenant ID, then optionally connect your devices.
queuevio-agent # No config found — setup wizard auto-launches: ┌─────────────────────────────────────────────────────┐ │ QueueVIO Connector Setup │ │ │ │ Open your browser to: http://localhost:3101 │ │ │ │ Complete the setup wizard, then this agent │ │ will start automatically. │ └─────────────────────────────────────────────────────┘ # To reopen the wizard at any time: queuevio-agent --setup
# After saving in the wizard the agent starts immediately: QueueVIO Connector Agent API: https://api.queuevio.com Tenant: ten_01j9x... Devices: 3 [init] registering new connector: Plant Floor A — Building 2 [init] registered — connector ID: con_01j9xp... Polling every 5s · Heartbeat every 30s
Skip the wizard by creating a .env and devices.json before first run. See the environment variables table below.
# .env QUEUEVIO_API_URL=https://api.queuevio.com QUEUEVIO_API_TOKEN=eyJhbGci... QUEUEVIO_TENANT_ID=ten_01j9x... CONNECTOR_NAME="Plant Floor A — Building 2" DEVICES_CONFIG=./devices.json
Environment variables
All configuration is via environment variables or a .env file in the working directory. Variables marked * are required.
| Variable | Default | Description |
|---|---|---|
| QUEUEVIO_API_URL* | http://localhost:3000 | Base URL of the QueueVIO cloud API. |
| QUEUEVIO_API_TOKEN* | — | JWT token from POST /api/auth/login. Scopes the agent to a single tenant. |
| QUEUEVIO_TENANT_ID* | tenant-demo | Tenant identifier. Must match the token's tenant scope. |
| CONNECTOR_NAME | Connector Agent | Human-readable label shown in the dashboard (e.g. "Plant Floor A — Building 2"). |
| CONNECTOR_ID | auto | Set to auto (default) for self-registration, or provide an existing connector UUID to skip re-registration. |
| DEVICES_CONFIG | ./devices.json | Path to the devices JSON file that maps QueueVIO device IDs to local adapters. |
| POLL_INTERVAL_MS | 5000 | How often the agent polls the cloud API for new jobs (milliseconds). |
| HEARTBEAT_INTERVAL_MS | 30000 | How often the agent sends a heartbeat with CPU, memory, and queue metrics (milliseconds). |
Available adapters
Set the adapter field in devices.json to one of the keys below. No code changes required — the agent loads the correct driver automatically.
ipp / ippsInternet Printing Protocol — the universal standard for networked printers. Works with any IPP-compliant device out of the box.
lprLine Printer Remote protocol for legacy UNIX print queues and older network printers.
rawSends raw PDL data over a TCP socket. Used for printers that accept PCL or PostScript on a direct port (typically 9100).
hot_folderWrites job files into a watched directory. The RIP or device software picks them up automatically. Monitored with chokidar.
jdf_jmfJob Definition Format ticket submission with JMF messaging. Used for offset press integrations and MIS-connected workflows.
efi_fieryFiery Command WorkStation REST API. Submits jobs, monitors status, and reads queue depth directly from the Fiery server.
hp_indigoHP Production Pro / SmartStream Director integration for Indigo digital presses.
hp_smartstreamHP SmartStream Designer and Production Center for variable-data and transactional workflows.
ricoh_totalflowTotalFlow Production Manager REST API for Ricoh inkjet and toner presses.
heidelberg_prinectPrinect Integration Manager JMF bridge for Heidelberg offset and digital presses.
konica_minoltaKonica Minolta IQ-501 Intelligent Quality Optimizer and bizhub PRESS series.
xerox_freeflowFreeFlow Print Server and Core integration for Xerox iGen, Versant, and Nuvera presses.
canon_prismasyncPRISMAsync Print Server REST API for Canon varioPRINT and imagePRESS series.
onyx_ripONYX Thrive and ProductionHouse hot-folder and API integration for wide-format printers.
caldera_ripCalderaRIP REST API for wide-format and textile printing workflows.
zebra_zplZPL II label generation and direct submission to Zebra label and barcode printers.
generic_restConfigurable REST adapter for any device or system with a custom HTTP API.
duplo_dccDuplo Digital Cutter / Creaser JDF integration for inline and nearline finishing.
horizonHorizon JDF-compatible folders, stitchers, and perfect binders.
muller_martiniMüller Martini Connex workflow for high-speed saddle stitching and binding lines.
kolbusKolbus digital workflow integration for perfect binding and case making.
bobst_connectBobst Connect platform for folding carton and label converting lines.
efi_paceEFI Pace MIS job import and status writeback for commercial printers.
xmpieXMPie PersonalEffect REST API for variable-data and multichannel campaign workflows.
Device health metrics
Add "snmp": { "enabled": true } to any device in devices.json to enable SNMP polling. The agent queries standard MIBs every 30 s and writes the results back as AI signals on the device record.
- ›Page counter and impression count
- ›Toner / ink levels per channel
- ›Paper tray status and media loaded
- ›Error and warning flags
- ›Temperature and fuser status
- ›Network interface utilisation
{
"queuevioDeviceId": "dev_01j9xq...",
"name": "HP Indigo 100K — Bay 3",
"adapter": "hp_indigo",
"host": "192.168.1.42",
"snmp": {
"enabled": true,
"community": "public",
"port": 161
}
}SNMP polling runs independently of the job adapter — you can enable it alongside any adapter type. Collected metrics are written to device.aiSignals and used by the routing engine.
Running in production
Run the agent as a managed system service so it restarts automatically on reboot or crash.
# /etc/systemd/system/queuevio-agent.service [Unit] Description=QueueVIO Connector Agent After=network-online.target [Service] Type=simple WorkingDirectory=/opt/queuevio-agent EnvironmentFile=/opt/queuevio-agent/.env ExecStart=/usr/bin/queuevio-agent Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
# docker-compose.yml
services:
connector:
image: queuevio/connector-agent:latest
restart: unless-stopped
volumes:
- ./devices.json:/app/devices.json:ro
- ./connector-id.txt:/app/connector-id.txt
environment:
QUEUEVIO_API_URL: https://api.queuevio.com
QUEUEVIO_API_TOKEN: ${QUEUEVIO_API_TOKEN}
QUEUEVIO_TENANT_ID: ${QUEUEVIO_TENANT_ID}
CONNECTOR_NAME: "Plant Floor A"Mount connector-id.txt as a persistent volume or bind mount. If it is lost, the agent re-registers as a new connector and the old record becomes orphaned.
Ready to connect your floor?
Register a tenant, grab your API token, and have the agent running in under five minutes.