# lukiprince/printpapi architecture

> Architecture diagram of the GitHub repository lukiprince/printpapi, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lukiprince/printpapi
- Repository: https://github.com/lukiprince/printpapi

## Overview

printpapi is a self-hosted print-job service: clients submit jobs to its HTTP API, the server queues them in SQLite, and an outbound-polling agent retrieves and prints them. The dashboard is an API client; e-commerce integrations turn orders into packing-slip jobs. Separate paths cover Star CloudPRNT printers, PrintNode-compatible clients, and billing. The excerpts show only parts of the server and agent, so links among unsampled server subsystems are limited to documented capabilities and are not expanded into speculative call chains.

Main entry points: [`app/server.py`](https://github.com/lukiprince/printpapi/blob/main/app/server.py) (HTTP API), [`app/orders.py`](https://github.com/lukiprince/printpapi/blob/main/app/orders.py) (Order intake), [`app/store.py`](https://github.com/lukiprince/printpapi/blob/main/app/store.py) (SQLite queue), [`agent/print_agent.py`](https://github.com/lukiprince/printpapi/blob/main/agent/print_agent.py) (Print agent)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Clients"]
  node_dashboard["Web dashboard<br/>[page.tsx]"]
  node_webapi["Web API client<br/>[api.ts]"]
end

subgraph group_server["Server"]
  node_http["HTTP API<br/>[server.py]"]
  node_queue[("SQLite queue<br/>[store.py]")]
  node_auth["Accounts and auth<br/>[auth.py]"]
  node_compat["PrintNode API<br/>[printnode.py]"]
end

subgraph group_fleet["Print fleet"]
  node_agent["Print agent<br/>[print_agent.py]"]
  node_cloudprnt["CloudPRNT protocol<br/>[cloudprnt.py]"]
end

subgraph group_commerce["Commerce"]
  node_orders["Order intake<br/>[orders.py]"]
  node_packing["Packing slips<br/>[packing_slip.py]"]
  node_woocommerce["WooCommerce plugin<br/>[printpapi.php]"]
  node_shopify["Shopify webhook<br/>[server.py]"]
end

subgraph group_operations["Operations"]
  node_billing["Plans and billing<br/>[billing.py]"]
  node_mail["Email delivery<br/>[mail.py]"]
  node_metrics["Fleet monitoring<br/>[server.py]"]
end

node_submitter(("Print clients"))
node_printer(("Local printers"))
node_star(("Star printer"))

node_submitter -->|"submits jobs"| node_http
node_dashboard -->|"calls"| node_webapi
node_webapi -->|"HTTP requests"| node_http
node_http -->|"authenticates"| node_auth
node_http -->|"queues and reads"| node_queue
node_woocommerce -->|"submits order jobs"| node_http
node_shopify -->|"delivers orders"| node_orders
node_http -->|"routes order requests"| node_orders
node_orders -->|"renders slips"| node_packing
node_orders -->|"enqueues jobs"| node_queue
node_agent -->|"polls and reports"| node_http
node_http -->|"returns claimed jobs"| node_agent
node_agent -->|"prints jobs"| node_printer
node_star -->|"polls for jobs"| node_cloudprnt
node_cloudprnt -->|"claims and reads jobs"| node_queue
node_compat -->|"serves compatible data"| node_queue
node_http -->|"routes compatibility requests"| node_compat
node_http -->|"handles billing webhook"| node_billing
node_http -.->|"sends account mail"| node_mail
node_http -->|"exposes metrics"| node_metrics

click node_dashboard "https://github.com/lukiprince/printpapi/blob/main/web/app/print/page.tsx"
click node_webapi "https://github.com/lukiprince/printpapi/blob/main/web/lib/api.ts"
click node_http "https://github.com/lukiprince/printpapi/blob/main/app/server.py"
click node_queue "https://github.com/lukiprince/printpapi/blob/main/app/store.py"
click node_auth "https://github.com/lukiprince/printpapi/blob/main/app/auth.py"
click node_orders "https://github.com/lukiprince/printpapi/blob/main/app/orders.py"
click node_packing "https://github.com/lukiprince/printpapi/blob/main/app/packing_slip.py"
click node_woocommerce "https://github.com/lukiprince/printpapi/blob/main/integrations/woocommerce/printpapi/printpapi.php"
click node_shopify "https://github.com/lukiprince/printpapi/blob/main/app/server.py"
click node_agent "https://github.com/lukiprince/printpapi/blob/main/agent/print_agent.py"
click node_cloudprnt "https://github.com/lukiprince/printpapi/blob/main/app/cloudprnt.py"
click node_compat "https://github.com/lukiprince/printpapi/blob/main/app/printnode.py"
click node_billing "https://github.com/lukiprince/printpapi/blob/main/app/billing.py"
click node_mail "https://github.com/lukiprince/printpapi/blob/main/app/mail.py"
click node_metrics "https://github.com/lukiprince/printpapi/blob/main/app/server.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dashboard,node_webapi,node_submitter toneBlue
class node_http,node_queue,node_auth,node_compat toneAmber
class node_agent,node_cloudprnt toneMint
class node_orders,node_packing,node_woocommerce,node_shopify toneRose
class node_billing,node_mail,node_metrics,node_printer,node_star toneIndigo
```

## Components

### Clients

- [Web dashboard](https://github.com/lukiprince/printpapi/blob/main/web/app/print/page.tsx): `web/app/print/page.tsx`
- [Web API client](https://github.com/lukiprince/printpapi/blob/main/web/lib/api.ts): `web/lib/api.ts`

### Server

- [HTTP API](https://github.com/lukiprince/printpapi/blob/main/app/server.py): `app/server.py`
- [SQLite queue](https://github.com/lukiprince/printpapi/blob/main/app/store.py): `app/store.py`
- [Accounts and auth](https://github.com/lukiprince/printpapi/blob/main/app/auth.py): `app/auth.py`
- [PrintNode API](https://github.com/lukiprince/printpapi/blob/main/app/printnode.py): `app/printnode.py`

### Print fleet

- [Print agent](https://github.com/lukiprince/printpapi/blob/main/agent/print_agent.py): `agent/print_agent.py`
- [CloudPRNT protocol](https://github.com/lukiprince/printpapi/blob/main/app/cloudprnt.py): `app/cloudprnt.py`

### Commerce

- [Order intake](https://github.com/lukiprince/printpapi/blob/main/app/orders.py): `app/orders.py`
- [Packing slips](https://github.com/lukiprince/printpapi/blob/main/app/packing_slip.py): `app/packing_slip.py`
- [WooCommerce plugin](https://github.com/lukiprince/printpapi/blob/main/integrations/woocommerce/printpapi/printpapi.php): `integrations/woocommerce/printpapi/printpapi.php`
- [Shopify webhook](https://github.com/lukiprince/printpapi/blob/main/app/server.py): `app/server.py`

### Operations

- [Plans and billing](https://github.com/lukiprince/printpapi/blob/main/app/billing.py): `app/billing.py`
- [Email delivery](https://github.com/lukiprince/printpapi/blob/main/app/mail.py): `app/mail.py`
- [Fleet monitoring](https://github.com/lukiprince/printpapi/blob/main/app/server.py): `app/server.py`

### Other components

- **Print clients**
- **Local printers**
- **Star printer**

## Connections

- Print clients → HTTP API: submits jobs
- Web dashboard → Web API client: calls
- Web API client → HTTP API: HTTP requests
- HTTP API → Accounts and auth: authenticates
- HTTP API → SQLite queue: queues and reads
- WooCommerce plugin → HTTP API: submits order jobs
- Shopify webhook → Order intake: delivers orders
- HTTP API → Order intake: routes order requests
- Order intake → Packing slips: renders slips
- Order intake → SQLite queue: enqueues jobs
- Print agent → HTTP API: polls and reports
- HTTP API → Print agent: returns claimed jobs
- Print agent → Local printers: prints jobs
- Star printer → CloudPRNT protocol: polls for jobs
- CloudPRNT protocol → SQLite queue: claims and reads jobs
- PrintNode API → SQLite queue: serves compatible data
- HTTP API → PrintNode API: routes compatibility requests
- HTTP API → Plans and billing: handles billing webhook
- HTTP API → Email delivery: sends account mail
- HTTP API → Fleet monitoring: exposes metrics
