# samuelsvd/traydir architecture

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

- Interactive diagram: https://gitdiagram.com/samuelsvd/traydir
- Repository: https://github.com/samuelsvd/traydir

## Overview

TrayDir is a Windows system-tray launcher whose main workflow is configuring per-instance links and menus, then opening those entries from the tray. The README also documents dynamically expanded folders, regex filtering, virtual folders, and configurable program/script plugins. The tree supports identifying these subsystems, but most implementation files were not sampled; edges therefore show only documented workflow connections and directly evidenced calls such as startup initialization and archive restoration.

Main entry points: [`TrayDir/src/forms/MainForm.cs`](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/MainForm.cs) (Main Window), [`TrayDir/src/models/TrayInstance.cs`](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstance.cs) (Instance Model), [`TrayDir/src/ProgramData.cs`](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/ProgramData.cs) (Program Data), [`TrayDir/src/utils/TrayUtils.cs`](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/utils/TrayUtils.cs) (Tray Menus)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_startup["Startup<br/>[Program.cs]"]
  node_main_form["Main Window<br/>[MainForm.cs]"]
  node_program_data["Program Data<br/>[ProgramData.cs]"]
end

subgraph group_config["Configuration"]
  node_instance_manager["Instance Manager"]
  node_plugin_manager["Plugin Manager"]
  node_settings["Settings<br/>[SettingsForm.cs]"]
  node_config_store["Saved Configuration<br/>[XMLUtils.cs]"]
end

subgraph group_items["Menu Items"]
  node_instance_model["Instance Model<br/>[TrayInstance.cs]"]
  node_item_tree["Menu Item Tree"]
  node_path_links["File And Folder Links"]
  node_virtual_folders["Virtual Folders"]
  node_plugin_items["Plugin Items"]
  node_plugin_defs["Plugin Definitions<br/>[TrayPlugin.cs]"]
  node_web_links["Web Links"]
end

subgraph group_runtime["Tray Runtime"]
  node_tray_menu["Tray Menus<br/>[TrayUtils.cs]"]
  node_archive["Archived Instances"]
end

node_user(("User"))
node_windows["Windows Shell"]
node_external_programs["External Programs"]

node_user -->|"configures links"| node_main_form
node_startup -->|"initializes and runs"| node_main_form
node_startup -->|"loads program"| node_program_data
node_main_form -->|"manages configuration"| node_program_data
node_main_form -->|"opens manager"| node_instance_manager
node_main_form -->|"opens manager"| node_plugin_manager
node_main_form -->|"opens settings"| node_settings
node_plugin_manager -->|"edits plugins"| node_program_data
node_plugin_manager -->|"saves changes"| node_config_store
node_program_data -->|"persists configuration"| node_config_store
node_program_data -->|"holds instances"| node_instance_model
node_instance_model -->|"organizes entries"| node_item_tree
node_instance_model -->|"contains links"| node_path_links
node_instance_model -->|"contains folders"| node_virtual_folders
node_instance_model -->|"contains plugin entries"| node_plugin_items
node_instance_model -->|"contains links"| node_web_links
node_plugin_items -->|"references definition"| node_plugin_defs
node_user -->|"opens menu"| node_tray_menu
node_tray_menu -->|"opens targets"| node_path_links
node_tray_menu -->|"runs entries"| node_plugin_items
node_plugin_items -->|"launches program"| node_external_programs
node_tray_menu -->|"displays in tray"| node_windows
node_user -->|"selects tray entry"| node_windows
node_instance_manager -->|"restores or deletes"| node_archive
node_archive -->|"restores instance tab"| node_main_form

click node_startup "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/Program.cs"
click node_main_form "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/MainForm.cs"
click node_program_data "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/ProgramData.cs"
click node_instance_manager "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/InstanceManagerForm.cs"
click node_plugin_manager "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/PluginManagerForm.cs"
click node_settings "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/SettingsForm.cs"
click node_config_store "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/utils/XMLUtils.cs"
click node_instance_model "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstance.cs"
click node_item_tree "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstanceNode.cs"
click node_path_links "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstancePath.cs"
click node_virtual_folders "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstanceVirtualFolder.cs"
click node_plugin_items "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstancePlugin.cs"
click node_plugin_defs "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayPlugin.cs"
click node_web_links "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstanceWebLink.cs"
click node_tray_menu "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/utils/TrayUtils.cs"
click node_archive "https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/InstanceManagerForm.cs"

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_startup,node_main_form,node_program_data,node_user toneBlue
class node_instance_manager,node_plugin_manager,node_settings,node_config_store toneAmber
class node_instance_model,node_item_tree,node_path_links,node_virtual_folders,node_plugin_items,node_plugin_defs,node_web_links toneMint
class node_tray_menu,node_archive toneRose
class node_windows,node_external_programs toneIndigo
```

## Components

### Application

- [Startup](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/Program.cs): `TrayDir/src/Program.cs`
- [Main Window](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/MainForm.cs): `TrayDir/src/forms/MainForm.cs`
- [Program Data](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/ProgramData.cs): `TrayDir/src/ProgramData.cs`

### Configuration

- [Instance Manager](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/InstanceManagerForm.cs): `TrayDir/src/forms/InstanceManagerForm.cs`
- [Plugin Manager](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/PluginManagerForm.cs): `TrayDir/src/forms/PluginManagerForm.cs`
- [Settings](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/SettingsForm.cs): `TrayDir/src/forms/SettingsForm.cs`
- [Saved Configuration](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/utils/XMLUtils.cs): `TrayDir/src/utils/XMLUtils.cs`

### Menu Items

- [Instance Model](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstance.cs): `TrayDir/src/models/TrayInstance.cs`
- [Menu Item Tree](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstanceNode.cs): `TrayDir/src/models/TrayInstanceNode.cs`
- [File And Folder Links](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstancePath.cs): `TrayDir/src/models/TrayInstancePath.cs`
- [Virtual Folders](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstanceVirtualFolder.cs): `TrayDir/src/models/TrayInstanceVirtualFolder.cs`
- [Plugin Items](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstancePlugin.cs): `TrayDir/src/models/TrayInstancePlugin.cs`
- [Plugin Definitions](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayPlugin.cs): `TrayDir/src/models/TrayPlugin.cs`
- [Web Links](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/models/TrayInstanceWebLink.cs): `TrayDir/src/models/TrayInstanceWebLink.cs`

### Tray Runtime

- [Tray Menus](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/utils/TrayUtils.cs): `TrayDir/src/utils/TrayUtils.cs`
- [Archived Instances](https://github.com/samuelsvd/traydir/blob/main/TrayDir/src/forms/InstanceManagerForm.cs): `TrayDir/src/forms/InstanceManagerForm.cs`

### Other components

- **User**
- **Windows Shell**
- **External Programs**

## Connections

- User → Main Window: configures links
- Startup → Main Window: initializes and runs
- Startup → Program Data: loads program
- Main Window → Program Data: manages configuration
- Main Window → Instance Manager: opens manager
- Main Window → Plugin Manager: opens manager
- Main Window → Settings: opens settings
- Plugin Manager → Program Data: edits plugins
- Plugin Manager → Saved Configuration: saves changes
- Program Data → Saved Configuration: persists configuration
- Program Data → Instance Model: holds instances
- Instance Model → Menu Item Tree: organizes entries
- Instance Model → File And Folder Links: contains links
- Instance Model → Virtual Folders: contains folders
- Instance Model → Plugin Items: contains plugin entries
- Instance Model → Web Links: contains links
- Plugin Items → Plugin Definitions: references definition
- User → Tray Menus: opens menu
- Tray Menus → File And Folder Links: opens targets
- Tray Menus → Plugin Items: runs entries
- Plugin Items → External Programs: launches program
- Tray Menus → Windows Shell: displays in tray
- User → Windows Shell: selects tray entry
- Instance Manager → Archived Instances: restores or deletes
- Archived Instances → Main Window: restores instance tab
