Skip to content

Releases: LukiPrince/printpapi

v1.1.0

Choose a tag to compare

@LukiPrince LukiPrince released this 22 Jul 20:52

Four v2 features — job control + observability. Fully backward compatible: the SQLite schema migrates in place on first start (existing jobs default to copies=1, carry no callback, and never re-fire webhooks).

Added

  • Job copiesPOST /jobs accepts copies (integer 1100, default 1); the agent prints the job that many times, on every backend (win32print / SumatraPDF / CUPS / raw socket).
  • Job cancelDELETE /jobs/{id} cancels a still-queued job → cancelled (409 once an agent has claimed it — no mid-print interrupt, 404 if unknown). Cancel button on queued rows in the dashboard.
  • Webhooks — set a per-job callback_url; the server POSTs the outcome {job_id, state, error, title, printer_id} once the job reaches a terminal state (done / failed / cancelled). Best-effort with retries, at-least-once (make your handler idempotent — dedupe on job_id+state), unsigned, http(s)-only.
  • GET /metrics — Prometheus text: printpapi_jobs{state=…} (all five states), printpapi_agents_online / _total, printpapi_printers_total. Client-auth; scrape with a bearer token.

Notes

  • 101 tests (was 67), green on Linux + Windows / Python 3.12.
  • Each feature was adversarially reviewed; every confirmed finding fixed.
  • Docker image built by this release: ghcr.io/lukiprince/printpapi:1.1.0 and :latest (amd64 + arm64).

Full changelog: v1.0.0...v1.1.0

printpapi v1.0.0

Choose a tag to compare

@LukiPrince LukiPrince released this 15 Jul 19:06

Self-hosted, open-source PrintNode alternative — first public release.

What's in the box

  • HTTP print server — Python standard library only, no dependencies. REST API, SQLite job queue (WAL + visibility-timeout reaper), per-client API keys (SHA-256-hashed, revocable), web dashboard.
  • Cross-platform agent — polls outbound (works behind NAT/firewalls, no inbound ports). Windows: win32print RAW + SumatraPDF for PDF. Linux: CUPS. Raw network printers via socket://host:9100.
  • Documents and labels — raw jobs (ZPL/ESC-POS) go straight to the printer; PDFs are rendered first. Label printers are never sent a PDF by accident.
  • 67 tests, real loopback HTTP + real SQLite, no mocks.

Getting started

See the README — server up in one command, agent in three steps.

printpapi-agent.zip below contains the agent script + an agent.ini template for machines where you don't want to clone the repo.

Known limitation

The Windows agent is not code-signed yet — on locked-down machines (Smart App Control/WDAC) run it via the signed Python interpreter (see docs/agent.md).