# mertkocakaplan/flow architecture

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

- Interactive diagram: https://gitdiagram.com/mertkocakaplan/flow
- Repository: https://github.com/mertkocakaplan/flow

## Overview

Flow is a Windows media downloader with a companion browser extension. Users can submit URLs in the desktop app or discover media in a browser and send it to Flow; desktop workflows then inspect media, configure a download, execute it, and track queued or completed jobs. The graph also preserves documented-in-code collection, history, settings, and image-transfer areas. Evidence is limited to the supplied excerpts and SOURCE INDEX; unsampled subsystem connections are omitted where not established.

Main entry points: [`source/App.cs`](https://github.com/mertkocakaplan/flow/blob/main/source/App.cs) (Desktop application), [`chrome-extension/discovery.js`](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/discovery.js) (Discovery state), [`source/DownloadPage.cs`](https://github.com/mertkocakaplan/flow/blob/main/source/DownloadPage.cs) (Download workflow), [`source/Executor.cs`](https://github.com/mertkocakaplan/flow/blob/main/source/Executor.cs) (Job executor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_browser["Browser discovery"]
  node_detection["Media detection<br/>[detection.js]"]
  node_scan["Page scanning<br/>[scan-content.js]"]
  node_discovery["Discovery state<br/>[discovery.js]"]
  node_background["Extension background<br/>[background.js]"]
  node_panel["Browser panel<br/>[panel.js]"]
  node_media_panel["Media panel<br/>[media-panel.js]"]
  node_transport["Native transport<br/>[transport.js]"]
  node_i18n["Extension localization<br/>[i18n.js]"]
end

subgraph group_desktop["Desktop workflows"]
  node_app["Desktop application<br/>[App.cs]"]
  node_download_page["Download workflow<br/>[DownloadPage.cs]"]
  node_collection_page["Collection workflow<br/>[CollectionPage.cs]"]
  node_queue_page["Queue view<br/>[QueuePage.cs]"]
  node_history_page["History view<br/>[HistoryPage.cs]"]
  node_settings_page["Settings view<br/>[SettingsPage.cs]"]
end

subgraph group_download["Download pipeline"]
  node_platforms["URL and platform rules<br/>[Platforms.cs]"]
  node_media["Media metadata<br/>[Media.cs]"]
  node_engine["Download engine<br/>[Engine.cs]"]
  node_executor["Job executor<br/>[Executor.cs]"]
  node_image_transfer["Image transfer<br/>[ImageTransfer.cs]"]
  node_process_runner["Process execution<br/>[ProcessRunner.cs]"]
end

subgraph group_state["Jobs and state"]
  node_queue["Queue service<br/>[Queue.cs]"]
  node_jobs["Job definitions<br/>[Jobs.cs]"]
  node_storage[("Persistent storage<br/>[Storage.cs]")]
end

subgraph group_bridge["Browser integration"]
  node_browser_link["Browser link<br/>[BrowserLink.cs]"]
  node_browser_protocol["Bridge protocol<br/>[BrowserProtocol.cs]"]
  node_native_host["Native host<br/>[Main.cs]"]
end

node_browser_user(("Browser user"))

node_browser_user -->|"opens"| node_panel
node_background -->|"uses"| node_discovery
node_discovery -->|"normalizes candidates"| node_detection
node_discovery -->|"calls native"| node_transport
node_discovery -->|"injects scanner"| node_scan
node_panel -->|"uses"| node_media_panel
node_panel -->|"uses strings"| node_i18n
node_media_panel -->|"reads discoveries"| node_discovery
node_media_panel -->|"uses strings"| node_i18n
node_app -->|"routes to"| node_download_page
node_app -->|"routes to"| node_queue_page
node_app -->|"routes to"| node_history_page
node_app -->|"routes to"| node_settings_page
node_download_page -->|"validates URLs"| node_platforms
node_download_page -->|"requests inspection"| node_engine
node_download_page -.->|"submits jobs"| node_queue
node_queue_page -->|"reads queue"| node_queue
node_queue -->|"runs jobs"| node_executor
node_queue -.->|"persists state"| node_storage
node_executor -->|"uses engine"| node_engine
node_executor -->|"runs processes"| node_process_runner
node_executor -->|"delegates image jobs"| node_image_transfer
node_engine -->|"classifies media"| node_platforms
node_engine -->|"parses metadata"| node_media
node_image_transfer -->|"probes files"| node_process_runner
node_app -.->|"starts bridge"| node_browser_link
node_browser_link -->|"uses protocol"| node_browser_protocol
node_native_host -->|"reads and writes"| node_browser_protocol
node_native_host -->|"forwards requests"| node_app

click node_detection "https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/detection.js"
click node_scan "https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/scan-content.js"
click node_discovery "https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/discovery.js"
click node_background "https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/background.js"
click node_panel "https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/panel.js"
click node_media_panel "https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/media-panel.js"
click node_transport "https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/transport.js"
click node_i18n "https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/i18n.js"
click node_app "https://github.com/mertkocakaplan/flow/blob/main/source/App.cs"
click node_download_page "https://github.com/mertkocakaplan/flow/blob/main/source/DownloadPage.cs"
click node_collection_page "https://github.com/mertkocakaplan/flow/blob/main/source/CollectionPage.cs"
click node_queue_page "https://github.com/mertkocakaplan/flow/blob/main/source/QueuePage.cs"
click node_history_page "https://github.com/mertkocakaplan/flow/blob/main/source/HistoryPage.cs"
click node_settings_page "https://github.com/mertkocakaplan/flow/blob/main/source/SettingsPage.cs"
click node_platforms "https://github.com/mertkocakaplan/flow/blob/main/source/Platforms.cs"
click node_media "https://github.com/mertkocakaplan/flow/blob/main/source/Media.cs"
click node_engine "https://github.com/mertkocakaplan/flow/blob/main/source/Engine.cs"
click node_executor "https://github.com/mertkocakaplan/flow/blob/main/source/Executor.cs"
click node_image_transfer "https://github.com/mertkocakaplan/flow/blob/main/source/ImageTransfer.cs"
click node_process_runner "https://github.com/mertkocakaplan/flow/blob/main/source/ProcessRunner.cs"
click node_queue "https://github.com/mertkocakaplan/flow/blob/main/source/Queue.cs"
click node_jobs "https://github.com/mertkocakaplan/flow/blob/main/source/Jobs.cs"
click node_storage "https://github.com/mertkocakaplan/flow/blob/main/source/Storage.cs"
click node_browser_link "https://github.com/mertkocakaplan/flow/blob/main/source/BrowserLink.cs"
click node_browser_protocol "https://github.com/mertkocakaplan/flow/blob/main/source/BrowserProtocol.cs"
click node_native_host "https://github.com/mertkocakaplan/flow/blob/main/source/native/Main.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_detection,node_scan,node_discovery,node_background,node_panel,node_media_panel,node_transport,node_i18n,node_browser_user toneBlue
class node_app,node_download_page,node_collection_page,node_queue_page,node_history_page,node_settings_page toneAmber
class node_platforms,node_media,node_engine,node_executor,node_image_transfer,node_process_runner toneMint
class node_queue,node_jobs,node_storage toneRose
class node_browser_link,node_browser_protocol,node_native_host toneIndigo
```

## Components

### Browser discovery

- [Media detection](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/detection.js): `chrome-extension/detection.js`
- [Page scanning](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/scan-content.js): `chrome-extension/scan-content.js`
- [Discovery state](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/discovery.js): `chrome-extension/discovery.js`
- [Extension background](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/background.js): `chrome-extension/background.js`
- [Browser panel](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/panel.js): `chrome-extension/panel.js`
- [Media panel](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/media-panel.js): `chrome-extension/media-panel.js`
- [Native transport](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/transport.js): `chrome-extension/transport.js`
- [Extension localization](https://github.com/mertkocakaplan/flow/blob/main/chrome-extension/i18n.js): `chrome-extension/i18n.js`

### Desktop workflows

- [Desktop application](https://github.com/mertkocakaplan/flow/blob/main/source/App.cs): `source/App.cs`
- [Download workflow](https://github.com/mertkocakaplan/flow/blob/main/source/DownloadPage.cs): `source/DownloadPage.cs`
- [Collection workflow](https://github.com/mertkocakaplan/flow/blob/main/source/CollectionPage.cs): `source/CollectionPage.cs`
- [Queue view](https://github.com/mertkocakaplan/flow/blob/main/source/QueuePage.cs): `source/QueuePage.cs`
- [History view](https://github.com/mertkocakaplan/flow/blob/main/source/HistoryPage.cs): `source/HistoryPage.cs`
- [Settings view](https://github.com/mertkocakaplan/flow/blob/main/source/SettingsPage.cs): `source/SettingsPage.cs`

### Download pipeline

- [URL and platform rules](https://github.com/mertkocakaplan/flow/blob/main/source/Platforms.cs): `source/Platforms.cs`
- [Media metadata](https://github.com/mertkocakaplan/flow/blob/main/source/Media.cs): `source/Media.cs`
- [Download engine](https://github.com/mertkocakaplan/flow/blob/main/source/Engine.cs): `source/Engine.cs`
- [Job executor](https://github.com/mertkocakaplan/flow/blob/main/source/Executor.cs): `source/Executor.cs`
- [Image transfer](https://github.com/mertkocakaplan/flow/blob/main/source/ImageTransfer.cs): `source/ImageTransfer.cs`
- [Process execution](https://github.com/mertkocakaplan/flow/blob/main/source/ProcessRunner.cs): `source/ProcessRunner.cs`

### Jobs and state

- [Queue service](https://github.com/mertkocakaplan/flow/blob/main/source/Queue.cs): `source/Queue.cs`
- [Job definitions](https://github.com/mertkocakaplan/flow/blob/main/source/Jobs.cs): `source/Jobs.cs`
- [Persistent storage](https://github.com/mertkocakaplan/flow/blob/main/source/Storage.cs): `source/Storage.cs`

### Browser integration

- [Browser link](https://github.com/mertkocakaplan/flow/blob/main/source/BrowserLink.cs): `source/BrowserLink.cs`
- [Bridge protocol](https://github.com/mertkocakaplan/flow/blob/main/source/BrowserProtocol.cs): `source/BrowserProtocol.cs`
- [Native host](https://github.com/mertkocakaplan/flow/blob/main/source/native/Main.cs): `source/native/Main.cs`

### Other components

- **Browser user**

## Connections

- Browser user → Browser panel: opens (evidence: `chrome-extension/panel.js`)
- Extension background → Discovery state: uses (evidence: `chrome-extension/background.js`)
- Discovery state → Media detection: normalizes candidates (evidence: `chrome-extension/discovery.js`)
- Discovery state → Native transport: calls native (evidence: `chrome-extension/discovery.js`)
- Discovery state → Page scanning: injects scanner (evidence: `chrome-extension/discovery.js`)
- Browser panel → Media panel: uses (evidence: `chrome-extension/panel.js`)
- Browser panel → Extension localization: uses strings (evidence: `chrome-extension/panel.js`)
- Media panel → Discovery state: reads discoveries (evidence: `chrome-extension/media-panel.js`)
- Media panel → Extension localization: uses strings (evidence: `chrome-extension/media-panel.js`)
- Desktop application → Download workflow: routes to (evidence: `source/App.cs`)
- Desktop application → Queue view: routes to (evidence: `source/App.cs`)
- Desktop application → History view: routes to (evidence: `source/App.cs`)
- Desktop application → Settings view: routes to (evidence: `source/App.cs`)
- Download workflow → URL and platform rules: validates URLs (evidence: `source/DownloadPage.cs`)
- Download workflow → Download engine: requests inspection (evidence: `source/DownloadPage.cs`)
- Download workflow → Queue service: submits jobs
- Queue view → Queue service: reads queue (evidence: `source/QueuePage.cs`)
- Queue service → Job executor: runs jobs (evidence: `source/Queue.cs`)
- Queue service → Persistent storage: persists state
- Job executor → Download engine: uses engine (evidence: `source/Executor.cs`)
- Job executor → Process execution: runs processes (evidence: `source/Executor.cs`)
- Job executor → Image transfer: delegates image jobs (evidence: `source/Executor.cs`)
- Download engine → URL and platform rules: classifies media (evidence: `source/Engine.cs`)
- Download engine → Media metadata: parses metadata (evidence: `source/Media.cs`)
- Image transfer → Process execution: probes files (evidence: `source/ImageTransfer.cs`)
- Desktop application → Browser link: starts bridge (evidence: `source/BrowserLink.cs`)
- Browser link → Bridge protocol: uses protocol (evidence: `source/BrowserLink.cs`)
- Native host → Bridge protocol: reads and writes (evidence: `source/native/Main.cs`)
- Native host → Desktop application: forwards requests (evidence: `source/native/Main.cs`)
