# moxgg/cups_print_app architecture

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

- Interactive diagram: https://gitdiagram.com/moxgg/cups_print_app
- Repository: https://github.com/moxgg/cups_print_app

## Overview

CUPSiOut is a CUPS print-management system: Flutter clients or the embedded web UI call a Go REST API, which manages CUPS servers and printers, submits and tracks print jobs, and provides administrative features. The main print path and server-side components are supported by sampled Go source; Flutter internals are not present in the supplied tree, so the client is shown only as a documented API consumer and Android conversion capability.

Main entry points: [`internal/handler`](https://github.com/moxgg/cups_print_app/tree/main/internal/handler) (API handlers), [`internal/repository`](https://github.com/moxgg/cups_print_app/tree/main/internal/repository) (SQLite repositories), [`internal/service/server_service.go`](https://github.com/moxgg/cups_print_app/blob/main/internal/service/server_service.go) (CUPS server service), [`cmd/server/main.go`](https://github.com/moxgg/cups_print_app/blob/main/cmd/server/main.go) (Server startup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and access"]
  node_web["Web UI<br/>[app.js]"]
  node_router["HTTP router<br/>[router.go]"]
  node_middleware["Auth and limits"]
  node_auth["Authentication<br/>[auth_service.go]"]
  node_handlers["API handlers"]
end

subgraph group_printing["Printing workflow"]
  node_printsvc["Print service<br/>[print_service.go]"]
  node_serversvc["CUPS server service<br/>[server_service.go]"]
  node_printersvc["Printer service<br/>[printer_service.go]"]
  node_jobsvc["Job service<br/>[job_service.go]"]
  node_convert["DOCX conversion<br/>[convert.go]"]
  node_cupsadapter["CUPS adapter<br/>[client.go]"]
  node_ipp["IPP client<br/>[client.go]"]
end

subgraph group_admin["Management features"]
  node_userfeatures["User management<br/>[user_service.go]"]
  node_settings["System settings<br/>[setting_service.go]"]
  node_announcements["Announcements"]
  node_versions["Version updates<br/>[version_service.go]"]
end

subgraph group_platform["Runtime integrations"]
  node_main["Server startup<br/>[main.go]"]
  node_repos[("SQLite repositories")]
  node_androidconvert["Android conversion"]
end

node_flutter["Flutter client"]
node_operator(("User or admin"))
node_cups["CUPS server"]

node_operator -->|"uses"| node_flutter
node_operator -->|"uses"| node_web
node_flutter -->|"calls REST API"| node_router
node_web -->|"calls REST API"| node_router
node_main -->|"assembles"| node_router
node_main -->|"initializes"| node_repos
node_main -->|"constructs"| node_serversvc
node_main -->|"constructs"| node_printsvc
node_main -->|"constructs"| node_printersvc
node_main -->|"constructs"| node_jobsvc
node_main -->|"constructs"| node_auth
node_router -->|"registers"| node_middleware
node_router -->|"dispatches"| node_handlers
node_router -->|"configures auth"| node_auth
node_handlers -->|"invokes"| node_auth
node_handlers -->|"invokes"| node_serversvc
node_handlers -->|"invokes"| node_printersvc
node_handlers -->|"invokes"| node_jobsvc
node_handlers -->|"invokes"| node_printsvc
node_handlers -->|"invokes"| node_userfeatures
node_handlers -->|"invokes"| node_settings
node_handlers -->|"invokes"| node_announcements
node_handlers -->|"invokes"| node_versions
node_auth -->|"reads users"| node_repos
node_serversvc -->|"reads and writes"| node_repos
node_serversvc -->|"gets client"| node_cupsadapter
node_printersvc -->|"resolves server"| node_serversvc
node_jobsvc -->|"resolves server"| node_serversvc
node_printsvc -->|"checks printer"| node_printersvc
node_printsvc -->|"gets client"| node_serversvc
node_printsvc -.->|"converts DOCX"| node_convert
node_printsvc -->|"submits job"| node_cupsadapter
node_printsvc -->|"records history"| node_repos
node_cupsadapter -->|"sends IPP"| node_ipp
node_ipp -->|"exchanges IPP"| node_cups
node_serversvc -->|"updates health"| node_repos
node_userfeatures -->|"persists users"| node_repos
node_settings -->|"persists settings"| node_repos
node_announcements -->|"persists announcements"| node_repos
node_versions -->|"persists versions"| node_repos
node_androidconvert -.->|"offers local conversion"| node_flutter

click node_flutter "https://github.com/moxgg/cups_print_app/tree/main/app"
click node_web "https://github.com/moxgg/cups_print_app/blob/main/internal/router/web/app.js"
click node_main "https://github.com/moxgg/cups_print_app/blob/main/cmd/server/main.go"
click node_router "https://github.com/moxgg/cups_print_app/blob/main/internal/router/router.go"
click node_middleware "https://github.com/moxgg/cups_print_app/tree/main/internal/middleware"
click node_auth "https://github.com/moxgg/cups_print_app/blob/main/internal/service/auth_service.go"
click node_handlers "https://github.com/moxgg/cups_print_app/tree/main/internal/handler"
click node_printsvc "https://github.com/moxgg/cups_print_app/blob/main/internal/service/print_service.go"
click node_serversvc "https://github.com/moxgg/cups_print_app/blob/main/internal/service/server_service.go"
click node_printersvc "https://github.com/moxgg/cups_print_app/blob/main/internal/service/printer_service.go"
click node_jobsvc "https://github.com/moxgg/cups_print_app/blob/main/internal/service/job_service.go"
click node_convert "https://github.com/moxgg/cups_print_app/blob/main/internal/convert/convert.go"
click node_cupsadapter "https://github.com/moxgg/cups_print_app/blob/main/internal/cups/client.go"
click node_ipp "https://github.com/moxgg/cups_print_app/blob/main/pkg/ipp/client.go"
click node_repos "https://github.com/moxgg/cups_print_app/tree/main/internal/repository"
click node_userfeatures "https://github.com/moxgg/cups_print_app/blob/main/internal/service/user_service.go"
click node_settings "https://github.com/moxgg/cups_print_app/blob/main/internal/service/setting_service.go"
click node_announcements "https://github.com/moxgg/cups_print_app/blob/main/internal/service/announcement_service.go"
click node_versions "https://github.com/moxgg/cups_print_app/blob/main/internal/service/version_service.go"
click node_androidconvert "https://github.com/moxgg/cups_print_app/blob/main/app/android/app/src/main/java/com/cupsprinthub/cups_print_hub/LibreOfficeConverterPlugin.java"

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_web,node_router,node_middleware,node_auth,node_handlers,node_flutter,node_operator toneBlue
class node_printsvc,node_serversvc,node_printersvc,node_jobsvc,node_convert,node_cupsadapter,node_ipp toneAmber
class node_userfeatures,node_settings,node_announcements,node_versions,node_cups toneMint
class node_main,node_repos,node_androidconvert toneRose
```

## Components

### API and access

- [Web UI](https://github.com/moxgg/cups_print_app/blob/main/internal/router/web/app.js): `internal/router/web/app.js`
- [HTTP router](https://github.com/moxgg/cups_print_app/blob/main/internal/router/router.go): `internal/router/router.go`
- [Auth and limits](https://github.com/moxgg/cups_print_app/tree/main/internal/middleware): `internal/middleware`
- [Authentication](https://github.com/moxgg/cups_print_app/blob/main/internal/service/auth_service.go): `internal/service/auth_service.go`
- [API handlers](https://github.com/moxgg/cups_print_app/tree/main/internal/handler): `internal/handler`

### Printing workflow

- [Print service](https://github.com/moxgg/cups_print_app/blob/main/internal/service/print_service.go): `internal/service/print_service.go`
- [CUPS server service](https://github.com/moxgg/cups_print_app/blob/main/internal/service/server_service.go): `internal/service/server_service.go`
- [Printer service](https://github.com/moxgg/cups_print_app/blob/main/internal/service/printer_service.go): `internal/service/printer_service.go`
- [Job service](https://github.com/moxgg/cups_print_app/blob/main/internal/service/job_service.go): `internal/service/job_service.go`
- [DOCX conversion](https://github.com/moxgg/cups_print_app/blob/main/internal/convert/convert.go): `internal/convert/convert.go`
- [CUPS adapter](https://github.com/moxgg/cups_print_app/blob/main/internal/cups/client.go): `internal/cups/client.go`
- [IPP client](https://github.com/moxgg/cups_print_app/blob/main/pkg/ipp/client.go): `pkg/ipp/client.go`

### Management features

- [User management](https://github.com/moxgg/cups_print_app/blob/main/internal/service/user_service.go): `internal/service/user_service.go`
- [System settings](https://github.com/moxgg/cups_print_app/blob/main/internal/service/setting_service.go): `internal/service/setting_service.go`
- [Announcements](https://github.com/moxgg/cups_print_app/blob/main/internal/service/announcement_service.go): `internal/service/announcement_service.go`
- [Version updates](https://github.com/moxgg/cups_print_app/blob/main/internal/service/version_service.go): `internal/service/version_service.go`

### Runtime integrations

- [Server startup](https://github.com/moxgg/cups_print_app/blob/main/cmd/server/main.go): `cmd/server/main.go`
- [SQLite repositories](https://github.com/moxgg/cups_print_app/tree/main/internal/repository): `internal/repository`
- [Android conversion](https://github.com/moxgg/cups_print_app/blob/main/app/android/app/src/main/java/com/cupsprinthub/cups_print_hub/LibreOfficeConverterPlugin.java): `app/android/app/src/main/java/com/cupsprinthub/cups_print_hub/LibreOfficeConverterPlugin.java`

### Other components

- [Flutter client](https://github.com/moxgg/cups_print_app/tree/main/app): `app`
- **User or admin**
- **CUPS server**

## Connections

- User or admin → Flutter client: uses
- User or admin → Web UI: uses
- Flutter client → HTTP router: calls REST API
- Web UI → HTTP router: calls REST API
- Server startup → HTTP router: assembles
- Server startup → SQLite repositories: initializes
- Server startup → CUPS server service: constructs
- Server startup → Print service: constructs
- Server startup → Printer service: constructs
- Server startup → Job service: constructs
- Server startup → Authentication: constructs
- HTTP router → Auth and limits: registers
- HTTP router → API handlers: dispatches
- HTTP router → Authentication: configures auth
- API handlers → Authentication: invokes
- API handlers → CUPS server service: invokes
- API handlers → Printer service: invokes
- API handlers → Job service: invokes
- API handlers → Print service: invokes
- API handlers → User management: invokes
- API handlers → System settings: invokes
- API handlers → Announcements: invokes
- API handlers → Version updates: invokes
- Authentication → SQLite repositories: reads users
- CUPS server service → SQLite repositories: reads and writes
- CUPS server service → CUPS adapter: gets client
- Printer service → CUPS server service: resolves server
- Job service → CUPS server service: resolves server
- Print service → Printer service: checks printer
- Print service → CUPS server service: gets client
- Print service → DOCX conversion: converts DOCX
- Print service → CUPS adapter: submits job
- Print service → SQLite repositories: records history
- CUPS adapter → IPP client: sends IPP
- IPP client → CUPS server: exchanges IPP
- CUPS server service → SQLite repositories: updates health
- User management → SQLite repositories: persists users
- System settings → SQLite repositories: persists settings
- Announcements → SQLite repositories: persists announcements
- Version updates → SQLite repositories: persists versions
- Android conversion → Flutter client: offers local conversion
