# shazamifius/glucosegit architecture

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

- Interactive diagram: https://gitdiagram.com/shazamifius/glucosegit
- Repository: https://github.com/shazamifius/glucosegit

## Overview

Glucose is a native Rust infinite canvas for arranging images and Markdown cards, linking ideas, and navigating large visual documents. The user workflow begins with canvas gestures and file drops, edits a document held by the core store, then renders the result through the desktop presentation stack; documents can also be imported, saved, and exported. The README documents capabilities beyond the sampled source, so those are represented at subsystem level without asserting unsampled call wiring. The excerpts support specific interactions and rendering details, but not every dispatch path.

Main entry points: [`crates/glucose-core/src/store.rs`](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/store.rs) (Document store), [`crates/glucose-desktop/src/renderer.rs`](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/renderer.rs) (Scene renderer), [`crates/glucose-desktop/src/interactions/mod.rs`](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/mod.rs) (Canvas gestures), [`crates/glucose-core/src/types.rs`](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/types.rs) (Canvas entities)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop interaction"]
  node_main["App startup<br/>[main.rs]"]
  node_app["Event loop app<br/>[app.rs]"]
  node_gestures["Canvas gestures<br/>[mod.rs]"]
  node_drag["Drag alignment<br/>[drag.rs]"]
  node_crop["Image crop<br/>[recadrage.rs]"]
  node_text_anchor["Link text editor<br/>[ancrage.rs]"]
  node_ui["Canvas controls<br/>[ui.rs]"]
end

subgraph group_document["Document model"]
  node_store[("Document store<br/>[store.rs]")]
  node_types["Canvas entities<br/>[types.rs]"]
  node_arrows["Links and anchors<br/>[arrow.rs]"]
  node_text["Markdown text<br/>[text.rs]"]
  node_spatial["Spatial indexing<br/>[quadtree.rs]"]
  node_math["Layout geometry<br/>[lib.rs]"]
end

subgraph group_visual["Canvas presentation"]
  node_renderer["Scene renderer<br/>[renderer.rs]"]
  node_gpu["GPU presentation<br/>[gpu.rs]"]
  node_resolution["Adaptive quality<br/>[resolution.rs]"]
end

subgraph group_files["Document files"]
  node_persistence["Save and export<br/>[persist.rs]"]
  node_core_persist["Document encoding<br/>[persist.rs]"]
  node_image_import["Image import<br/>[importer.rs]"]
end

subgraph group_support["Platform services"]
  node_windows_drop["Windows web drop<br/>[depot_web.rs]"]
end

node_user(("User"))
node_files_external["Dropped files"]
node_clipboard["Clipboard"]

node_user -->|"launches"| node_main
node_main -->|"runs event loop"| node_app
node_user -->|"edits canvas"| node_gestures
node_gestures -->|"handles events"| node_app
node_drag -->|"moves selection"| node_store
node_crop -->|"updates crop"| node_store
node_crop -->|"reads image pixels"| node_renderer
node_text_anchor -->|"reads annotations"| node_store
node_text_anchor -->|"edits anchors"| node_arrows
node_ui -->|"reads document state"| node_store
node_store -->|"holds entities"| node_types
node_store -->|"indexes canvas"| node_spatial
node_arrows -->|"uses anchors"| node_types
node_text -->|"models card text"| node_types
node_math -->|"provides layout"| node_renderer
node_renderer -->|"reads canvas"| node_store
node_renderer -->|"presents scene"| node_gpu
node_resolution -->|"sets render quality"| node_renderer
node_user -->|"drops images"| node_files_external
node_files_external -->|"imports files"| node_image_import
node_user -->|"copies content"| node_clipboard
node_clipboard -->|"pastes content"| node_gestures
node_windows_drop -.->|"fetches image"| node_image_import
node_persistence -->|"encodes document"| node_core_persist
node_core_persist -->|"serializes state"| node_store
node_user -->|"saves or exports"| node_persistence

click node_main "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/main.rs"
click node_app "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/app.rs"
click node_gestures "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/mod.rs"
click node_drag "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/drag.rs"
click node_crop "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/recadrage.rs"
click node_text_anchor "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/ancrage.rs"
click node_ui "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/ui.rs"
click node_store "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/store.rs"
click node_types "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/types.rs"
click node_arrows "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/arrow.rs"
click node_text "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/text.rs"
click node_spatial "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/quadtree.rs"
click node_math "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-math/src/lib.rs"
click node_renderer "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/renderer.rs"
click node_gpu "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/present/gpu.rs"
click node_resolution "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/resolution.rs"
click node_persistence "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/persist.rs"
click node_core_persist "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/persist.rs"
click node_image_import "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/store/importer.rs"
click node_windows_drop "https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/depot_web.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_main,node_app,node_gestures,node_drag,node_crop,node_text_anchor,node_ui,node_user toneBlue
class node_store,node_types,node_arrows,node_text,node_spatial,node_math toneAmber
class node_renderer,node_gpu,node_resolution toneMint
class node_persistence,node_core_persist,node_image_import toneRose
class node_windows_drop,node_files_external,node_clipboard toneIndigo
```

## Components

### Desktop interaction

- [App startup](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/main.rs): `crates/glucose-desktop/src/main.rs`
- [Event loop app](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/app.rs): `crates/glucose-desktop/src/app.rs`
- [Canvas gestures](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/mod.rs): `crates/glucose-desktop/src/interactions/mod.rs`
- [Drag alignment](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/drag.rs): `crates/glucose-desktop/src/interactions/drag.rs`
- [Image crop](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/recadrage.rs): `crates/glucose-desktop/src/interactions/recadrage.rs`
- [Link text editor](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/ancrage.rs): `crates/glucose-desktop/src/interactions/ancrage.rs`
- [Canvas controls](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/ui.rs): `crates/glucose-desktop/src/ui.rs`

### Document model

- [Document store](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/store.rs): `crates/glucose-core/src/store.rs`
- [Canvas entities](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/types.rs): `crates/glucose-core/src/types.rs`
- [Links and anchors](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/arrow.rs): `crates/glucose-core/src/arrow.rs`
- [Markdown text](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/text.rs): `crates/glucose-core/src/text.rs`
- [Spatial indexing](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/quadtree.rs): `crates/glucose-core/src/quadtree.rs`
- [Layout geometry](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-math/src/lib.rs): `crates/glucose-math/src/lib.rs`

### Canvas presentation

- [Scene renderer](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/renderer.rs): `crates/glucose-desktop/src/renderer.rs`
- [GPU presentation](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/present/gpu.rs): `crates/glucose-desktop/src/present/gpu.rs`
- [Adaptive quality](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/resolution.rs): `crates/glucose-desktop/src/resolution.rs`

### Document files

- [Save and export](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/persist.rs): `crates/glucose-desktop/src/persist.rs`
- [Document encoding](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/persist.rs): `crates/glucose-core/src/persist.rs`
- [Image import](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-core/src/store/importer.rs): `crates/glucose-core/src/store/importer.rs`

### Platform services

- [Windows web drop](https://github.com/shazamifius/glucosegit/blob/main/crates/glucose-desktop/src/interactions/depot_web.rs): `crates/glucose-desktop/src/interactions/depot_web.rs`

### Other components

- **User**
- **Dropped files**
- **Clipboard**

## Connections

- User → App startup: launches
- App startup → Event loop app: runs event loop
- User → Canvas gestures: edits canvas
- Canvas gestures → Event loop app: handles events
- Drag alignment → Document store: moves selection
- Image crop → Document store: updates crop
- Image crop → Scene renderer: reads image pixels
- Link text editor → Document store: reads annotations
- Link text editor → Links and anchors: edits anchors
- Canvas controls → Document store: reads document state
- Document store → Canvas entities: holds entities
- Document store → Spatial indexing: indexes canvas
- Links and anchors → Canvas entities: uses anchors
- Markdown text → Canvas entities: models card text
- Layout geometry → Scene renderer: provides layout
- Scene renderer → Document store: reads canvas
- Scene renderer → GPU presentation: presents scene
- Adaptive quality → Scene renderer: sets render quality
- User → Dropped files: drops images
- Dropped files → Image import: imports files
- User → Clipboard: copies content
- Clipboard → Canvas gestures: pastes content
- Windows web drop → Image import: fetches image
- Save and export → Document encoding: encodes document
- Document encoding → Document store: serializes state
- User → Save and export: saves or exports
