# quirky1869/glideftp architecture

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

## Overview

GlideFTP is a Wails desktop FTP/SFTP client. Users configure or select a saved site, connect to one or more servers, browse local and remote files, and queue transfers; the queue reports progress and outcomes in the UI. The Go application API mediates frontend calls to connection, filesystem, site, settings, and transfer services. The README documents additional settings, localization, themes, notifications, and site import/export capabilities; those are represented where paths are supported by the tree. Some backend wiring is inferred only from the sampled API and excerpts, so uncertain links are omitted.

Main entry points: [`app.go`](https://github.com/quirky1869/glideftp/blob/main/app.go) (Wails app API), [`frontend/src/App.svelte`](https://github.com/quirky1869/glideftp/blob/main/frontend/src/App.svelte) (Main workspace), [`frontend/src/stores/connection.js`](https://github.com/quirky1869/glideftp/blob/main/frontend/src/stores/connection.js) (Connection state), [`internal/connection/manager.go`](https://github.com/quirky1869/glideftp/blob/main/internal/connection/manager.go) (Connection manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_appui["Main workspace<br/>[App.svelte]"]
  node_siteui["Site manager<br/>[SiteManager.svelte]"]
  node_connui["Connection bar"]
  node_browser["File browser<br/>[FileBrowser.svelte]"]
  node_queueui["Transfer queue"]
  node_settingsui["Settings panel"]
  node_notifyui["Notifications<br/>[NotifyModal.svelte]"]
  node_connectionstore["Connection state<br/>[connection.js]"]
  node_transferstore["Transfer state<br/>[transfers.js]"]
  node_settingsstore["Settings state<br/>[settings.js]"]
  node_i18n["Localization<br/>[index.js]"]
end

subgraph group_api["Application bridge"]
  node_bridge["Wails app API<br/>[app.go]"]
end

subgraph group_domain["FTP client services"]
  node_connmgr["Connection manager<br/>[manager.go]"]
  node_ftp["FTP transport<br/>[ftp.go]"]
  node_sftp["SFTP transport<br/>[sftp.go]"]
  node_transfer["Transfer queue<br/>[queue.go]"]
  node_localfs["Local filesystem<br/>[local.go]"]
end

subgraph group_persist["Configuration and state"]
  node_site[("Saved sites<br/>[sites.go]")]
  node_settings[("App settings<br/>[settings.go]")]
  node_keyring["Password keyring<br/>[keyring.go]"]
  node_crypto["Site encryption<br/>[crypto.go]"]
end

node_user(("User"))
node_server{{"FTP/SFTP server"}}
node_os{{"Operating system"}}
node_systemkeyring[("OS keyring")]

node_user -->|"operates"| node_appui
node_appui -->|"manages sessions"| node_connectionstore
node_appui -->|"initializes queue"| node_transferstore
node_appui -->|"loads settings"| node_settingsstore
node_appui -->|"shows alerts"| node_notifyui
node_siteui -->|"site operations"| node_bridge
node_siteui -->|"starts connection"| node_connectionstore
node_connui -->|"connects"| node_connectionstore
node_browser -->|"browses files"| node_connectionstore
node_queueui -->|"manages jobs"| node_transferstore
node_settingsui -->|"edits preferences"| node_settingsstore
node_appui -->|"renders translations"| node_i18n
node_connectionstore -->|"invokes API"| node_bridge
node_transferstore -->|"invokes API"| node_bridge
node_settingsstore -->|"invokes API"| node_bridge
node_bridge -->|"controls connections"| node_connmgr
node_bridge -->|"manages sites"| node_site
node_bridge -->|"loads and saves"| node_settings
node_bridge -->|"reads and writes passwords"| node_keyring
node_bridge -->|"queues transfers"| node_transfer
node_bridge -->|"local file operations"| node_localfs
node_bridge -->|"encrypts site exports"| node_crypto
node_connmgr -->|"uses FTP client"| node_ftp
node_connmgr -->|"uses SFTP client"| node_sftp
node_ftp -->|"FTP traffic"| node_server
node_sftp -->|"SSH/SFTP traffic"| node_server
node_transfer -->|"reads and writes local files"| node_localfs
node_transfer -->|"uses active connection"| node_connmgr
node_localfs -->|"accesses files"| node_os
node_keyring -->|"stores credentials"| node_systemkeyring
node_settings -->|"persists preferences"| node_os

click node_appui "https://github.com/quirky1869/glideftp/blob/main/frontend/src/App.svelte"
click node_siteui "https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/SiteManager.svelte"
click node_connui "https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/ConnectionBar.svelte"
click node_browser "https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/FileBrowser.svelte"
click node_queueui "https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/TransferQueue.svelte"
click node_settingsui "https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/SettingsPanel.svelte"
click node_notifyui "https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/NotifyModal.svelte"
click node_connectionstore "https://github.com/quirky1869/glideftp/blob/main/frontend/src/stores/connection.js"
click node_transferstore "https://github.com/quirky1869/glideftp/blob/main/frontend/src/stores/transfers.js"
click node_settingsstore "https://github.com/quirky1869/glideftp/blob/main/frontend/src/stores/settings.js"
click node_i18n "https://github.com/quirky1869/glideftp/blob/main/frontend/src/i18n/index.js"
click node_bridge "https://github.com/quirky1869/glideftp/blob/main/app.go"
click node_connmgr "https://github.com/quirky1869/glideftp/blob/main/internal/connection/manager.go"
click node_ftp "https://github.com/quirky1869/glideftp/blob/main/internal/connection/ftp.go"
click node_sftp "https://github.com/quirky1869/glideftp/blob/main/internal/connection/sftp.go"
click node_transfer "https://github.com/quirky1869/glideftp/blob/main/internal/transfer/queue.go"
click node_localfs "https://github.com/quirky1869/glideftp/blob/main/internal/fs/local.go"
click node_site "https://github.com/quirky1869/glideftp/blob/main/internal/sites/sites.go"
click node_settings "https://github.com/quirky1869/glideftp/blob/main/internal/settings/settings.go"
click node_keyring "https://github.com/quirky1869/glideftp/blob/main/internal/keyring/keyring.go"
click node_crypto "https://github.com/quirky1869/glideftp/blob/main/internal/crypto/crypto.go"

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_appui,node_siteui,node_connui,node_browser,node_queueui,node_settingsui,node_notifyui,node_connectionstore,node_transferstore,node_settingsstore,node_i18n,node_user toneBlue
class node_bridge,node_systemkeyring toneAmber
class node_connmgr,node_ftp,node_sftp,node_transfer,node_localfs,node_server toneMint
class node_site,node_settings,node_keyring,node_crypto toneRose
class node_os toneIndigo
```

## Components

### Desktop interface

- [Main workspace](https://github.com/quirky1869/glideftp/blob/main/frontend/src/App.svelte): `frontend/src/App.svelte`
- [Site manager](https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/SiteManager.svelte): `frontend/src/components/SiteManager.svelte`
- [Connection bar](https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/ConnectionBar.svelte): `frontend/src/components/ConnectionBar.svelte`
- [File browser](https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/FileBrowser.svelte): `frontend/src/components/FileBrowser.svelte`
- [Transfer queue](https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/TransferQueue.svelte): `frontend/src/components/TransferQueue.svelte`
- [Settings panel](https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/SettingsPanel.svelte): `frontend/src/components/SettingsPanel.svelte`
- [Notifications](https://github.com/quirky1869/glideftp/blob/main/frontend/src/components/NotifyModal.svelte): `frontend/src/components/NotifyModal.svelte`
- [Connection state](https://github.com/quirky1869/glideftp/blob/main/frontend/src/stores/connection.js): `frontend/src/stores/connection.js`
- [Transfer state](https://github.com/quirky1869/glideftp/blob/main/frontend/src/stores/transfers.js): `frontend/src/stores/transfers.js`
- [Settings state](https://github.com/quirky1869/glideftp/blob/main/frontend/src/stores/settings.js): `frontend/src/stores/settings.js`
- [Localization](https://github.com/quirky1869/glideftp/blob/main/frontend/src/i18n/index.js): `frontend/src/i18n/index.js`

### Application bridge

- [Wails app API](https://github.com/quirky1869/glideftp/blob/main/app.go): `app.go`

### FTP client services

- [Connection manager](https://github.com/quirky1869/glideftp/blob/main/internal/connection/manager.go): `internal/connection/manager.go`
- [FTP transport](https://github.com/quirky1869/glideftp/blob/main/internal/connection/ftp.go): `internal/connection/ftp.go`
- [SFTP transport](https://github.com/quirky1869/glideftp/blob/main/internal/connection/sftp.go): `internal/connection/sftp.go`
- [Transfer queue](https://github.com/quirky1869/glideftp/blob/main/internal/transfer/queue.go): `internal/transfer/queue.go`
- [Local filesystem](https://github.com/quirky1869/glideftp/blob/main/internal/fs/local.go): `internal/fs/local.go`

### Configuration and state

- [Saved sites](https://github.com/quirky1869/glideftp/blob/main/internal/sites/sites.go): `internal/sites/sites.go`
- [App settings](https://github.com/quirky1869/glideftp/blob/main/internal/settings/settings.go): `internal/settings/settings.go`
- [Password keyring](https://github.com/quirky1869/glideftp/blob/main/internal/keyring/keyring.go): `internal/keyring/keyring.go`
- [Site encryption](https://github.com/quirky1869/glideftp/blob/main/internal/crypto/crypto.go): `internal/crypto/crypto.go`

### Other components

- **User**
- **FTP/SFTP server**
- **Operating system**
- **OS keyring**

## Connections

- User → Main workspace: operates
- Main workspace → Connection state: manages sessions
- Main workspace → Transfer state: initializes queue
- Main workspace → Settings state: loads settings
- Main workspace → Notifications: shows alerts
- Site manager → Wails app API: site operations
- Site manager → Connection state: starts connection
- Connection bar → Connection state: connects
- File browser → Connection state: browses files
- Transfer queue → Transfer state: manages jobs
- Settings panel → Settings state: edits preferences
- Main workspace → Localization: renders translations
- Connection state → Wails app API: invokes API
- Transfer state → Wails app API: invokes API
- Settings state → Wails app API: invokes API
- Wails app API → Connection manager: controls connections
- Wails app API → Saved sites: manages sites
- Wails app API → App settings: loads and saves
- Wails app API → Password keyring: reads and writes passwords
- Wails app API → Transfer queue: queues transfers
- Wails app API → Local filesystem: local file operations
- Wails app API → Site encryption: encrypts site exports
- Connection manager → FTP transport: uses FTP client
- Connection manager → SFTP transport: uses SFTP client
- FTP transport → FTP/SFTP server: FTP traffic
- SFTP transport → FTP/SFTP server: SSH/SFTP traffic
- Transfer queue → Local filesystem: reads and writes local files
- Transfer queue → Connection manager: uses active connection
- Local filesystem → Operating system: accesses files
- Password keyring → OS keyring: stores credentials
- App settings → Operating system: persists preferences
