Releases: LukiPrince/printpapi
Releases · LukiPrince/printpapi
Release list
v1.1.0
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 copies —
POST /jobsacceptscopies(integer1–100, default1); the agent prints the job that many times, on every backend (win32print / SumatraPDF / CUPS / raw socket). - Job cancel —
DELETE /jobs/{id}cancels a still-queuedjob →cancelled(409once an agent has claimed it — no mid-print interrupt,404if 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 onjob_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.0and:latest(amd64 + arm64).
Full changelog: v1.0.0...v1.1.0
printpapi v1.0.0
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).