# selfemo/clipanchor architecture

> Architecture diagram of the GitHub repository selfemo/clipanchor, 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/selfemo/clipanchor
- Repository: https://github.com/selfemo/clipanchor

## Overview

ClipAnchor is a portable desktop clipboard workspace. Its main workflow captures copied text, images, and files in the background, applies privacy filtering, stores eligible items in local history, and presents them in the history UI or as independent popups that users can pin, favorite, edit, or copy back. The graph also includes documented settings, localization, tray/shortcut, and update capabilities. Some subsystem wiring is based on README documentation; unsampled implementation details and uncertain call relationships are omitted.

Main entry points: [`src/App.jsx`](https://github.com/selfemo/clipanchor/blob/main/src/App.jsx) (Main interface), [`src-tauri/src/lib.rs`](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/lib.rs) (Desktop runtime), [`src-tauri/src/clipboard_service.rs`](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/clipboard_service.rs) (Clipboard capture), [`src/api.js`](https://github.com/selfemo/clipanchor/blob/main/src/api.js) (Tauri API bridge)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["User interface"]
  node_app_ui["Main interface<br/>[App.jsx]"]
  node_history_ui["History and favorites<br/>[ClipboardPage.jsx]"]
  node_settings_ui["Settings<br/>[SettingsPage.jsx]"]
  node_popup_ui["Clipboard popup<br/>[PopupWindow.jsx]"]
  node_api["Tauri API bridge<br/>[api.js]"]
  node_localization["Localization<br/>[i18n.js]"]
end

subgraph group_capture["Clipboard workspace"]
  node_clipboard["Clipboard capture"]
  node_popup_service["Popup lifecycle<br/>[popup.rs]"]
end

subgraph group_state["Local data and privacy"]
  node_history_store[("SQLite history<br/>[database.rs]")]
  node_privacy["Privacy filtering<br/>[privacy.rs]"]
  node_settings_store["Settings and paths<br/>[settings.rs]"]
end

subgraph group_desktop["Desktop services"]
  node_runtime["Desktop runtime<br/>[lib.rs]"]
  node_commands["Application commands"]
  node_tray["Tray and menu<br/>[tray.rs]"]
  node_shortcuts["Global shortcuts<br/>[shortcut.rs]"]
  node_autostart["Startup behavior<br/>[autostart.rs]"]
  node_updates["Update service<br/>[update_service.rs]"]
  node_language_packs["Language packs<br/>[i18n.rs]"]
end

node_user(("User"))
node_os_clipboard(("System clipboard"))
node_release_service(("Release service"))

node_user -->|"uses"| node_app_ui
node_app_ui -->|"shows"| node_history_ui
node_app_ui -->|"opens"| node_settings_ui
node_app_ui -->|"renders"| node_popup_ui
node_app_ui -->|"invokes"| node_api
node_history_ui -->|"requests history"| node_api
node_settings_ui -->|"saves settings"| node_api
node_popup_ui -->|"requests item actions"| node_api
node_app_ui -->|"translates"| node_localization
node_settings_ui -->|"manages languages"| node_localization
node_api -->|"invokes"| node_commands
node_runtime -->|"starts monitoring"| node_clipboard
node_os_clipboard -->|"supplies copied content"| node_clipboard
node_clipboard -->|"checks content"| node_privacy
node_clipboard -->|"saves eligible items"| node_history_store
node_clipboard -->|"creates popups"| node_popup_service
node_popup_ui -->|"requests pin and copy actions"| node_popup_service
node_commands -->|"manages records"| node_history_store
node_commands -->|"reads and writes"| node_settings_store
node_runtime -->|"initializes"| node_tray
node_runtime -->|"checks startup"| node_autostart
node_runtime -->|"registers actions"| node_shortcuts
node_commands -->|"manages packs"| node_language_packs
node_runtime -->|"starts update checks"| node_updates
node_updates -.->|"checks and downloads"| node_release_service

click node_app_ui "https://github.com/selfemo/clipanchor/blob/main/src/App.jsx"
click node_history_ui "https://github.com/selfemo/clipanchor/blob/main/src/pages/ClipboardPage.jsx"
click node_settings_ui "https://github.com/selfemo/clipanchor/blob/main/src/pages/SettingsPage.jsx"
click node_popup_ui "https://github.com/selfemo/clipanchor/blob/main/src/popup/PopupWindow.jsx"
click node_api "https://github.com/selfemo/clipanchor/blob/main/src/api.js"
click node_localization "https://github.com/selfemo/clipanchor/blob/main/src/i18n.js"
click node_runtime "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/lib.rs"
click node_commands "https://github.com/selfemo/clipanchor/tree/main/src-tauri/src/commands"
click node_clipboard "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/clipboard_service.rs"
click node_popup_service "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/popup.rs"
click node_history_store "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/database.rs"
click node_privacy "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/privacy.rs"
click node_settings_store "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/settings.rs"
click node_tray "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/tray.rs"
click node_shortcuts "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/shortcut.rs"
click node_autostart "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/autostart.rs"
click node_updates "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/update_service.rs"
click node_language_packs "https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/commands/i18n.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_app_ui,node_history_ui,node_settings_ui,node_popup_ui,node_api,node_localization,node_user toneBlue
class node_clipboard,node_popup_service toneAmber
class node_history_store,node_privacy,node_settings_store toneMint
class node_runtime,node_commands,node_tray,node_shortcuts,node_autostart,node_updates,node_language_packs toneRose
class node_os_clipboard,node_release_service toneIndigo
```

## Components

### User interface

- [Main interface](https://github.com/selfemo/clipanchor/blob/main/src/App.jsx): `src/App.jsx`
- [History and favorites](https://github.com/selfemo/clipanchor/blob/main/src/pages/ClipboardPage.jsx): `src/pages/ClipboardPage.jsx`
- [Settings](https://github.com/selfemo/clipanchor/blob/main/src/pages/SettingsPage.jsx): `src/pages/SettingsPage.jsx`
- [Clipboard popup](https://github.com/selfemo/clipanchor/blob/main/src/popup/PopupWindow.jsx): `src/popup/PopupWindow.jsx`
- [Tauri API bridge](https://github.com/selfemo/clipanchor/blob/main/src/api.js): `src/api.js`
- [Localization](https://github.com/selfemo/clipanchor/blob/main/src/i18n.js): `src/i18n.js`

### Clipboard workspace

- [Clipboard capture](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/clipboard_service.rs): `src-tauri/src/clipboard_service.rs`
- [Popup lifecycle](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/popup.rs): `src-tauri/src/popup.rs`

### Local data and privacy

- [SQLite history](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/database.rs): `src-tauri/src/database.rs`
- [Privacy filtering](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/privacy.rs): `src-tauri/src/privacy.rs`
- [Settings and paths](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/settings.rs): `src-tauri/src/settings.rs`

### Desktop services

- [Desktop runtime](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/lib.rs): `src-tauri/src/lib.rs`
- [Application commands](https://github.com/selfemo/clipanchor/tree/main/src-tauri/src/commands): `src-tauri/src/commands`
- [Tray and menu](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/tray.rs): `src-tauri/src/tray.rs`
- [Global shortcuts](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/shortcut.rs): `src-tauri/src/shortcut.rs`
- [Startup behavior](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/autostart.rs): `src-tauri/src/autostart.rs`
- [Update service](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/update_service.rs): `src-tauri/src/update_service.rs`
- [Language packs](https://github.com/selfemo/clipanchor/blob/main/src-tauri/src/commands/i18n.rs): `src-tauri/src/commands/i18n.rs`

### Other components

- **User**
- **System clipboard**
- **Release service**

## Connections

- User → Main interface: uses
- Main interface → History and favorites: shows
- Main interface → Settings: opens
- Main interface → Clipboard popup: renders
- Main interface → Tauri API bridge: invokes
- History and favorites → Tauri API bridge: requests history
- Settings → Tauri API bridge: saves settings
- Clipboard popup → Tauri API bridge: requests item actions
- Main interface → Localization: translates
- Settings → Localization: manages languages
- Tauri API bridge → Application commands: invokes
- Desktop runtime → Clipboard capture: starts monitoring
- System clipboard → Clipboard capture: supplies copied content
- Clipboard capture → Privacy filtering: checks content
- Clipboard capture → SQLite history: saves eligible items
- Clipboard capture → Popup lifecycle: creates popups
- Clipboard popup → Popup lifecycle: requests pin and copy actions
- Application commands → SQLite history: manages records
- Application commands → Settings and paths: reads and writes
- Desktop runtime → Tray and menu: initializes
- Desktop runtime → Startup behavior: checks startup
- Desktop runtime → Global shortcuts: registers actions
- Application commands → Language packs: manages packs
- Desktop runtime → Update service: starts update checks
- Update service → Release service: checks and downloads
