OpenPrinterOpenPrinter

Getting Started

Pair the published OPPA app with a custom OpenPrinter server and deliver a virtual print job.

Open OPPA

First, download the OPPA desktop app from the downloads page, then open the published release build.

In OPPA, open Settings and set the OpenPrinter server URL to your custom server base URL. Changing the server URL will unpair the computer and require pairing again.

Run the example server

pnpm --filter openprinter-node-example dev

The example listens on http://127.0.0.1:8787, exposes the standard discovery/pairing/gateway paths, and logs a short-lived development pairing code.

Pair

  1. Enter the example server URL, such as http://127.0.0.1:8787, in OPPA.
  2. Select Discover server and confirm the returned service identity.
  3. Enter the logged pairing code and an agent name.
  4. Select Pair and connect.

OPPA generates an Ed25519 key locally. The example stores only its public key. After challenge authentication and hello negotiation, the overview shows the connected service and agent ID.

Create a virtual printer

Open Printers, create a virtual printer, and copy its printer ID. Virtual output is deterministic and requires no physical device.

Send a job

Copy the connected agent ID and call:

curl -X POST http://127.0.0.1:8787/agents/AGENT_ID/jobs \
  -H 'content-type: application/json' \
  -d '{
    "jobId": "job_quickstart_001",
    "idempotencyKey": "job_quickstart_001_v1",
    "printerId": "PRINTER_ID",
    "createdAt": "2026-08-01T09:00:00Z",
    "document": {
      "width": 80,
      "sections": [{ "type": "text", "value": "Hello from OpenPrinter" }]
    }
  }'

Check Jobs and Virtual output. received means OPPA durably stored the job; submitted means the virtual backend accepted it.

Reconnect and reset

Restarting OPPA reuses the local key and paired identity. Restarting the example removes its in-memory public credentials, so the next connection is rejected and must be paired again. Use Forget server to delete OPPA's key and local pairing metadata deliberately.

On this page