# alex-e-o/pdfcraft architecture

> Architecture diagram of the GitHub repository alex-e-o/pdfcraft, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alex-e-o/pdfcraft
- Repository: https://github.com/alex-e-o/pdfcraft

## Overview

PdfCraft is a cross-platform PDF reader and editor, with desktop, web, and headless CLI entry points. The main user workflow is opening a PDF, viewing and searching it, applying document operations, and saving or exporting the result. Distinct capabilities include page organization, annotations and forms, accessibility, signing and redaction, printing, and automation. The README establishes product capabilities, while sampled source clarifies parts of the desktop and CLI structure; links between many unsampled domain modules are therefore omitted or marked unverified.

Main entry points: [`crates/render/src/lib.rs`](https://github.com/alex-e-o/pdfcraft/blob/main/crates/render/src/lib.rs) (PDF rendering), [`crates/ui-egui/src/app.rs`](https://github.com/alex-e-o/pdfcraft/blob/main/crates/ui-egui/src/app.rs) (Interactive UI), [`apps/pdfcraft/src/main.rs`](https://github.com/alex-e-o/pdfcraft/blob/main/apps/pdfcraft/src/main.rs) (Desktop app), [`crates/ui-egui/src/canvas.rs`](https://github.com/alex-e-o/pdfcraft/blob/main/crates/ui-egui/src/canvas.rs) (Page canvas)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User interfaces"]
  node_desktop["Desktop app<br/>[main.rs]"]
  node_ui["Interactive UI<br/>[app.rs]"]
  node_canvas["Page canvas<br/>[canvas.rs]"]
  node_web["Web app<br/>[main.rs]"]
  node_cli["Headless CLI<br/>[main.rs]"]
  node_automation["Automation tools<br/>[tools.rs]"]
end

subgraph group_documents["Document workflow"]
  node_engine["Document engine<br/>[document.rs]"]
  node_render["PDF rendering<br/>[lib.rs]"]
  node_search["Text search<br/>[search.rs]"]
end

subgraph group_features["PDF capabilities"]
  node_organize["Page organization<br/>[lib.rs]"]
  node_edit["Content editing<br/>[lib.rs]"]
  node_annotations["Annotations<br/>[lib.rs]"]
  node_forms["PDF forms<br/>[author.rs]"]
  node_accessibility["Accessibility<br/>[lib.rs]"]
  node_redaction["Redaction<br/>[lib.rs]"]
  node_signing["Signatures<br/>[lib.rs]"]
  node_printing["Printing<br/>[lib.rs]"]
end

subgraph group_core["PDF internals"]
  node_pdfstore["PDF object model<br/>[document.rs]"]
  node_preflight["PDF standards checks<br/>[lib.rs]"]
  node_ocr["OCR<br/>[lib.rs]"]
  node_optimization["PDF optimization<br/>[images.rs]"]
end

node_user(("PDF user"))

node_user -->|"opens PDF"| node_desktop
node_user -->|"uses in browser"| node_web
node_user -->|"runs commands"| node_cli
node_desktop -.->|"starts interface"| node_ui
node_web -->|"starts interface"| node_ui
node_cli -->|"dispatches tools"| node_automation
node_ui -->|"shows pages"| node_canvas
node_user -->|"reads PDF"| node_render
node_user -->|"searches text"| node_search
node_user -->|"organizes pages"| node_organize
node_user -.->|"edits content"| node_edit
node_user -->|"adds comments"| node_annotations
node_user -->|"uses forms"| node_forms
node_user -.->|"checks accessibility"| node_accessibility
node_user -.->|"redacts content"| node_redaction
node_user -.->|"signs documents"| node_signing
node_user -.->|"prints documents"| node_printing
node_user -.->|"checks standards"| node_preflight
node_user -.->|"recognizes text"| node_ocr
node_user -.->|"optimizes files"| node_optimization
node_canvas -.->|"requests images"| node_render
node_render -.->|"reads objects"| node_pdfstore
node_search -->|"extracts text"| node_render

click node_desktop "https://github.com/alex-e-o/pdfcraft/blob/main/apps/pdfcraft/src/main.rs"
click node_ui "https://github.com/alex-e-o/pdfcraft/blob/main/crates/ui-egui/src/app.rs"
click node_canvas "https://github.com/alex-e-o/pdfcraft/blob/main/crates/ui-egui/src/canvas.rs"
click node_web "https://github.com/alex-e-o/pdfcraft/blob/main/apps/pdfcraft-web/src/main.rs"
click node_cli "https://github.com/alex-e-o/pdfcraft/blob/main/apps/pdfcraft-cli/src/main.rs"
click node_automation "https://github.com/alex-e-o/pdfcraft/blob/main/crates/automation/src/tools.rs"
click node_engine "https://github.com/alex-e-o/pdfcraft/blob/main/crates/engine/src/document.rs"
click node_render "https://github.com/alex-e-o/pdfcraft/blob/main/crates/render/src/lib.rs"
click node_search "https://github.com/alex-e-o/pdfcraft/blob/main/crates/render/src/text/search.rs"
click node_organize "https://github.com/alex-e-o/pdfcraft/blob/main/crates/organize/src/lib.rs"
click node_edit "https://github.com/alex-e-o/pdfcraft/blob/main/crates/edit/src/lib.rs"
click node_annotations "https://github.com/alex-e-o/pdfcraft/blob/main/crates/annot/src/lib.rs"
click node_forms "https://github.com/alex-e-o/pdfcraft/blob/main/crates/forms/src/author.rs"
click node_accessibility "https://github.com/alex-e-o/pdfcraft/blob/main/crates/a11y/src/lib.rs"
click node_redaction "https://github.com/alex-e-o/pdfcraft/blob/main/crates/redact/src/lib.rs"
click node_signing "https://github.com/alex-e-o/pdfcraft/blob/main/crates/sign/src/lib.rs"
click node_printing "https://github.com/alex-e-o/pdfcraft/blob/main/crates/print/src/lib.rs"
click node_pdfstore "https://github.com/alex-e-o/pdfcraft/blob/main/crates/cos/src/document.rs"
click node_preflight "https://github.com/alex-e-o/pdfcraft/blob/main/crates/preflight/src/lib.rs"
click node_ocr "https://github.com/alex-e-o/pdfcraft/blob/main/crates/ocr/src/lib.rs"
click node_optimization "https://github.com/alex-e-o/pdfcraft/blob/main/crates/optimize/src/images.rs"

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_desktop,node_ui,node_canvas,node_web,node_cli,node_automation,node_user toneBlue
class node_engine,node_render,node_search toneAmber
class node_organize,node_edit,node_annotations,node_forms,node_accessibility,node_redaction,node_signing,node_printing toneMint
class node_pdfstore,node_preflight,node_ocr,node_optimization toneRose
```

## Components

### User interfaces

- [Desktop app](https://github.com/alex-e-o/pdfcraft/blob/main/apps/pdfcraft/src/main.rs): `apps/pdfcraft/src/main.rs`
- [Interactive UI](https://github.com/alex-e-o/pdfcraft/blob/main/crates/ui-egui/src/app.rs): `crates/ui-egui/src/app.rs`
- [Page canvas](https://github.com/alex-e-o/pdfcraft/blob/main/crates/ui-egui/src/canvas.rs): `crates/ui-egui/src/canvas.rs`
- [Web app](https://github.com/alex-e-o/pdfcraft/blob/main/apps/pdfcraft-web/src/main.rs): `apps/pdfcraft-web/src/main.rs`
- [Headless CLI](https://github.com/alex-e-o/pdfcraft/blob/main/apps/pdfcraft-cli/src/main.rs): `apps/pdfcraft-cli/src/main.rs`
- [Automation tools](https://github.com/alex-e-o/pdfcraft/blob/main/crates/automation/src/tools.rs): `crates/automation/src/tools.rs`

### Document workflow

- [Document engine](https://github.com/alex-e-o/pdfcraft/blob/main/crates/engine/src/document.rs): `crates/engine/src/document.rs`
- [PDF rendering](https://github.com/alex-e-o/pdfcraft/blob/main/crates/render/src/lib.rs): `crates/render/src/lib.rs`
- [Text search](https://github.com/alex-e-o/pdfcraft/blob/main/crates/render/src/text/search.rs): `crates/render/src/text/search.rs`

### PDF capabilities

- [Page organization](https://github.com/alex-e-o/pdfcraft/blob/main/crates/organize/src/lib.rs): `crates/organize/src/lib.rs`
- [Content editing](https://github.com/alex-e-o/pdfcraft/blob/main/crates/edit/src/lib.rs): `crates/edit/src/lib.rs`
- [Annotations](https://github.com/alex-e-o/pdfcraft/blob/main/crates/annot/src/lib.rs): `crates/annot/src/lib.rs`
- [PDF forms](https://github.com/alex-e-o/pdfcraft/blob/main/crates/forms/src/author.rs): `crates/forms/src/author.rs`
- [Accessibility](https://github.com/alex-e-o/pdfcraft/blob/main/crates/a11y/src/lib.rs): `crates/a11y/src/lib.rs`
- [Redaction](https://github.com/alex-e-o/pdfcraft/blob/main/crates/redact/src/lib.rs): `crates/redact/src/lib.rs`
- [Signatures](https://github.com/alex-e-o/pdfcraft/blob/main/crates/sign/src/lib.rs): `crates/sign/src/lib.rs`
- [Printing](https://github.com/alex-e-o/pdfcraft/blob/main/crates/print/src/lib.rs): `crates/print/src/lib.rs`

### PDF internals

- [PDF object model](https://github.com/alex-e-o/pdfcraft/blob/main/crates/cos/src/document.rs): `crates/cos/src/document.rs`
- [PDF standards checks](https://github.com/alex-e-o/pdfcraft/blob/main/crates/preflight/src/lib.rs): `crates/preflight/src/lib.rs`
- [OCR](https://github.com/alex-e-o/pdfcraft/blob/main/crates/ocr/src/lib.rs): `crates/ocr/src/lib.rs`
- [PDF optimization](https://github.com/alex-e-o/pdfcraft/blob/main/crates/optimize/src/images.rs): `crates/optimize/src/images.rs`

### Other components

- **PDF user**

## Connections

- PDF user → Desktop app: opens PDF (evidence: `README.md`)
- PDF user → Web app: uses in browser (evidence: `README.md`)
- PDF user → Headless CLI: runs commands (evidence: `README.md`)
- Desktop app → Interactive UI: starts interface
- Web app → Interactive UI: starts interface (evidence: `apps/pdfcraft-web/src/main.rs`)
- Headless CLI → Automation tools: dispatches tools (evidence: `apps/pdfcraft-cli/src/main.rs`)
- Interactive UI → Page canvas: shows pages (evidence: `crates/ui-egui/src/app.rs`)
- PDF user → PDF rendering: reads PDF (evidence: `README.md`)
- PDF user → Text search: searches text (evidence: `README.md`)
- PDF user → Page organization: organizes pages (evidence: `README.md`)
- PDF user → Content editing: edits content
- PDF user → Annotations: adds comments (evidence: `README.md`)
- PDF user → PDF forms: uses forms (evidence: `README.md`)
- PDF user → Accessibility: checks accessibility
- PDF user → Redaction: redacts content
- PDF user → Signatures: signs documents
- PDF user → Printing: prints documents
- PDF user → PDF standards checks: checks standards
- PDF user → OCR: recognizes text
- PDF user → PDF optimization: optimizes files
- Page canvas → PDF rendering: requests images
- PDF rendering → PDF object model: reads objects
- Text search → PDF rendering: extracts text (evidence: `crates/render/src/text/search.rs`)
