# eimg/lime architecture

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

- Interactive diagram: https://gitdiagram.com/eimg/lime
- Repository: https://github.com/eimg/lime

## Overview

Lime is a desktop image editor. The main workflow is opening or creating an image in the workspace, editing layered content with selection, paint, text, path, transform, and effect tools, then saving an editable .lime project or exporting a flattened image/PDF. The graph also preserves documented recovery and PDF capabilities. Source excerpts show document, rendering, and project behavior; several UI and service connections are based on the README, so unsampled implementation details are not expanded.

Main entry points: [`src/workspace/view.rs`](https://github.com/eimg/lime/blob/main/src/workspace/view.rs) (Canvas Workspace), [`src/document/content.rs`](https://github.com/eimg/lime/blob/main/src/document/content.rs) (Document Model), [`src/workspace/dialogs/pdf_input.rs`](https://github.com/eimg/lime/blob/main/src/workspace/dialogs/pdf_input.rs) (PDF Import UI), [`src/document.rs`](https://github.com/eimg/lime/blob/main/src/document.rs) (Canvas Rendering)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Workspace UI"]
  node_workspace["Canvas Workspace<br/>[view.rs]"]
  node_layer_ui["Layer Controls<br/>[layers.rs]"]
  node_pdf_ui["PDF Import UI<br/>[pdf_input.rs]"]
  node_commands["App Commands<br/>[commands.rs]"]
end

subgraph group_editing["Image Editing"]
  node_selection["Selection Tools<br/>[selection.rs]"]
  node_paint["Painting and Fill<br/>[paint.rs]"]
  node_adjustments["Color Adjustments<br/>[adjustments.rs]"]
  node_filters["Filters and Effects<br/>[filters.rs]"]
  node_transform["Transforms<br/>[transform.rs]"]
  node_gradients["Gradient Tools<br/>[gradient.rs]"]
  node_paths["Vector Paths<br/>[paths.rs]"]
  node_text["Editable Text<br/>[text.rs]"]
end

subgraph group_documents["Documents and Output"]
  node_document["Document Model<br/>[content.rs]"]
  node_render["Canvas Rendering<br/>[document.rs]"]
  node_preview["Tile Preview<br/>[preview.rs]"]
  node_project["Project Persistence<br/>[project.rs]"]
  node_pdf["PDF Handling<br/>[pdf.rs]"]
  node_pdf_export["PDF Export<br/>[export.rs]"]
end

subgraph group_support["App Services"]
  node_recovery["Work Recovery<br/>[recovery.rs]"]
  node_settings["Tool Settings<br/>[settings.rs]"]
end

node_user(("Editor"))

node_user -->|"edits in"| node_workspace
node_workspace -->|"dispatches"| node_commands
node_workspace -->|"edits"| node_document
node_layer_ui -->|"manages layers"| node_document
node_document -->|"renders"| node_render
node_render -->|"builds tiles"| node_preview
node_document -->|"reads and writes"| node_project
node_workspace -->|"uses"| node_selection
node_workspace -->|"uses"| node_paint
node_workspace -->|"applies"| node_adjustments
node_workspace -->|"applies"| node_filters
node_workspace -->|"uses"| node_transform
node_workspace -->|"uses"| node_gradients
node_workspace -->|"edits"| node_paths
node_workspace -->|"edits"| node_text
node_user -->|"imports pages"| node_pdf_ui
node_pdf_ui -->|"selects pages"| node_pdf
node_document -->|"exports flattened"| node_pdf_export
node_pdf_export -->|"uses PDF support"| node_pdf
node_user -->|"recovers work"| node_recovery
node_workspace -->|"uses tool options"| node_settings

click node_workspace "https://github.com/eimg/lime/blob/main/src/workspace/view.rs"
click node_layer_ui "https://github.com/eimg/lime/blob/main/src/workspace/layers.rs"
click node_pdf_ui "https://github.com/eimg/lime/blob/main/src/workspace/dialogs/pdf_input.rs"
click node_commands "https://github.com/eimg/lime/blob/main/src/commands.rs"
click node_document "https://github.com/eimg/lime/blob/main/src/document/content.rs"
click node_render "https://github.com/eimg/lime/blob/main/src/document.rs"
click node_preview "https://github.com/eimg/lime/blob/main/src/preview.rs"
click node_project "https://github.com/eimg/lime/blob/main/src/project.rs"
click node_pdf "https://github.com/eimg/lime/blob/main/src/pdf.rs"
click node_pdf_export "https://github.com/eimg/lime/blob/main/src/pdf/export.rs"
click node_selection "https://github.com/eimg/lime/blob/main/src/selection.rs"
click node_paint "https://github.com/eimg/lime/blob/main/src/paint.rs"
click node_adjustments "https://github.com/eimg/lime/blob/main/src/adjustments.rs"
click node_filters "https://github.com/eimg/lime/blob/main/src/filters.rs"
click node_transform "https://github.com/eimg/lime/blob/main/src/transform.rs"
click node_gradients "https://github.com/eimg/lime/blob/main/src/gradient.rs"
click node_paths "https://github.com/eimg/lime/blob/main/src/paths.rs"
click node_text "https://github.com/eimg/lime/blob/main/src/text.rs"
click node_recovery "https://github.com/eimg/lime/blob/main/src/recovery.rs"
click node_settings "https://github.com/eimg/lime/blob/main/src/settings.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_workspace,node_layer_ui,node_pdf_ui,node_commands toneBlue
class node_selection,node_paint,node_adjustments,node_filters,node_transform,node_gradients,node_paths,node_text toneAmber
class node_document,node_render,node_preview,node_project,node_pdf,node_pdf_export toneMint
class node_recovery,node_settings toneRose
class node_user toneIndigo
```

## Components

### Workspace UI

- [Canvas Workspace](https://github.com/eimg/lime/blob/main/src/workspace/view.rs): `src/workspace/view.rs`
- [Layer Controls](https://github.com/eimg/lime/blob/main/src/workspace/layers.rs): `src/workspace/layers.rs`
- [PDF Import UI](https://github.com/eimg/lime/blob/main/src/workspace/dialogs/pdf_input.rs): `src/workspace/dialogs/pdf_input.rs`
- [App Commands](https://github.com/eimg/lime/blob/main/src/commands.rs): `src/commands.rs`

### Image Editing

- [Selection Tools](https://github.com/eimg/lime/blob/main/src/selection.rs): `src/selection.rs`
- [Painting and Fill](https://github.com/eimg/lime/blob/main/src/paint.rs): `src/paint.rs`
- [Color Adjustments](https://github.com/eimg/lime/blob/main/src/adjustments.rs): `src/adjustments.rs`
- [Filters and Effects](https://github.com/eimg/lime/blob/main/src/filters.rs): `src/filters.rs`
- [Transforms](https://github.com/eimg/lime/blob/main/src/transform.rs): `src/transform.rs`
- [Gradient Tools](https://github.com/eimg/lime/blob/main/src/gradient.rs): `src/gradient.rs`
- [Vector Paths](https://github.com/eimg/lime/blob/main/src/paths.rs): `src/paths.rs`
- [Editable Text](https://github.com/eimg/lime/blob/main/src/text.rs): `src/text.rs`

### Documents and Output

- [Document Model](https://github.com/eimg/lime/blob/main/src/document/content.rs): `src/document/content.rs`
- [Canvas Rendering](https://github.com/eimg/lime/blob/main/src/document.rs): `src/document.rs`
- [Tile Preview](https://github.com/eimg/lime/blob/main/src/preview.rs): `src/preview.rs`
- [Project Persistence](https://github.com/eimg/lime/blob/main/src/project.rs): `src/project.rs`
- [PDF Handling](https://github.com/eimg/lime/blob/main/src/pdf.rs): `src/pdf.rs`
- [PDF Export](https://github.com/eimg/lime/blob/main/src/pdf/export.rs): `src/pdf/export.rs`

### App Services

- [Work Recovery](https://github.com/eimg/lime/blob/main/src/recovery.rs): `src/recovery.rs`
- [Tool Settings](https://github.com/eimg/lime/blob/main/src/settings.rs): `src/settings.rs`

### Other components

- **Editor**

## Connections

- Editor → Canvas Workspace: edits in
- Canvas Workspace → App Commands: dispatches (evidence: `src/workspace/view.rs`)
- Canvas Workspace → Document Model: edits
- Layer Controls → Document Model: manages layers (evidence: `src/workspace/layers.rs`)
- Document Model → Canvas Rendering: renders (evidence: `src/document.rs`)
- Canvas Rendering → Tile Preview: builds tiles (evidence: `src/document.rs`)
- Document Model → Project Persistence: reads and writes (evidence: `src/document.rs`)
- Canvas Workspace → Selection Tools: uses (evidence: `src/workspace/view.rs`)
- Canvas Workspace → Painting and Fill: uses (evidence: `src/workspace/view.rs`)
- Canvas Workspace → Color Adjustments: applies
- Canvas Workspace → Filters and Effects: applies
- Canvas Workspace → Transforms: uses (evidence: `src/workspace/view.rs`)
- Canvas Workspace → Gradient Tools: uses (evidence: `src/workspace/view.rs`)
- Canvas Workspace → Vector Paths: edits (evidence: `src/workspace/view.rs`)
- Canvas Workspace → Editable Text: edits
- Editor → PDF Import UI: imports pages
- PDF Import UI → PDF Handling: selects pages
- Document Model → PDF Export: exports flattened (evidence: `src/document.rs`)
- PDF Export → PDF Handling: uses PDF support (evidence: `src/pdf/export.rs`)
- Editor → Work Recovery: recovers work
- Canvas Workspace → Tool Settings: uses tool options
