# 1remote/1remote architecture

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

- Interactive diagram: https://gitdiagram.com/1remote/1remote
- Repository: https://github.com/1remote/1remote

## Overview

1Remote is a Windows remote-session manager: users maintain tagged connection profiles, find or edit them, launch a chosen protocol, and manage live sessions in tabbed or full-screen windows. Its documented scope also includes quick launch, configurable external runners, file transfer, RemoteApp/local-app launching, connection import, and configurable data sources. The graph reflects the tree, README, and sampled session, storage, and RDP code; unsampled capability wiring is shown only where the README supports the subsystem, not as inferred call chains.

Main entry points: [`Ui/Service/SessionControlService.cs`](https://github.com/1remote/1remote/blob/main/Ui/Service/SessionControlService.cs) (Session control), [`Ui/View/ServerView`](https://github.com/1remote/1remote/tree/main/Ui/View/ServerView) (Server browser), [`Ui/Service/DataSource/DataSourceService.cs`](https://github.com/1remote/1remote/blob/main/Ui/Service/DataSource/DataSourceService.cs) (Data sources), [`Ui/View/MainWindowViewModel.cs`](https://github.com/1remote/1remote/blob/main/Ui/View/MainWindowViewModel.cs) (Main window)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_profiles["Profiles and storage"]
  node_profilesdata["Protocol profiles"]
  node_tags["Tags and filters<br/>[Tag.cs]"]
  node_datasources["Data sources"]
  node_database[("Profile database<br/>[DapperDataBase.cs]")]
  node_settings["App settings"]
  node_importer["mRemoteNG import"]
  node_externaldb["Configured databases"]
end

subgraph group_discovery["Browse and configure"]
  node_mainui["Main window"]
  node_servers["Server browser"]
  node_launcher["Quick launcher"]
  node_editor["Connection editor"]
end

subgraph group_sessions["Connect and host"]
  node_sessioncontrol["Session control"]
  node_runner["Runner selection<br/>[RunnerHelper.cs]"]
  node_hosts["Session hosts<br/>[HostBase.cs]"]
  node_tabs["Tabbed windows"]
end

subgraph group_integrations["Protocol integrations"]
  node_rdphost["RDP host"]
  node_protocols["Protocol models"]
  node_filetransfer["File transfer"]
  node_externalrunners["Custom runners<br/>[ExternalRunner.cs]"]
  node_remoteapps["Remote and local apps<br/>[RdpApp.cs]"]
  node_ftpservice["FTP service<br/>[FTP.cs]"]
end

node_user(("User"))
node_externaltools["External tools"]

node_user -->|"uses"| node_mainui
node_mainui -->|"shows"| node_servers
node_mainui -->|"opens"| node_launcher
node_user -->|"searches"| node_launcher
node_user -->|"edits profiles"| node_editor
node_servers -->|"displays"| node_profilesdata
node_servers -->|"filters by"| node_tags
node_editor -->|"configures"| node_profilesdata
node_editor -->|"reads settings"| node_settings
node_profilesdata -->|"loaded through"| node_datasources
node_datasources -->|"reads and writes"| node_database
node_datasources -->|"connects to"| node_externaldb
node_user -->|"imports"| node_importer
node_importer -->|"adds profiles"| node_datasources
node_launcher -->|"requests connection"| node_sessioncontrol
node_servers -->|"requests connection"| node_sessioncontrol
node_sessioncontrol -->|"selects runner"| node_runner
node_sessioncontrol -->|"connects profile"| node_protocols
node_sessioncontrol -->|"creates host"| node_hosts
node_sessioncontrol -->|"manages windows"| node_tabs
node_hosts -->|"hosts RDP"| node_rdphost
node_runner -.->|"may select"| node_externalrunners
node_externalrunners -.->|"launches"| node_externaltools
node_protocols -->|"supports transfer"| node_filetransfer
node_hosts -->|"hosts transfer UI"| node_filetransfer
node_protocols -->|"includes app sessions"| node_remoteapps
node_runner -.->|"may select"| node_ftpservice

click node_mainui "https://github.com/1remote/1remote/blob/main/Ui/View/MainWindowViewModel.cs"
click node_servers "https://github.com/1remote/1remote/tree/main/Ui/View/ServerView"
click node_launcher "https://github.com/1remote/1remote/tree/main/Ui/View/Launcher"
click node_editor "https://github.com/1remote/1remote/tree/main/Ui/View/Editor"
click node_profilesdata "https://github.com/1remote/1remote/tree/main/Ui/Model/Protocol"
click node_tags "https://github.com/1remote/1remote/blob/main/Ui/Model/Tag.cs"
click node_datasources "https://github.com/1remote/1remote/blob/main/Ui/Service/DataSource/DataSourceService.cs"
click node_database "https://github.com/1remote/1remote/blob/main/Ui/Service/DataSource/DAO/Dapper/DapperDataBase.cs"
click node_settings "https://github.com/1remote/1remote/blob/main/Ui/Service/ConfigurationService.cs"
click node_importer "https://github.com/1remote/1remote/blob/main/Ui/Utils/mRemoteNG/mRemoteNGImporter.cs"
click node_sessioncontrol "https://github.com/1remote/1remote/blob/main/Ui/Service/SessionControlService.cs"
click node_runner "https://github.com/1remote/1remote/blob/main/Ui/Model/ProtocolRunner/RunnerHelper.cs"
click node_hosts "https://github.com/1remote/1remote/blob/main/Ui/View/Host/ProtocolHosts/HostBase.cs"
click node_tabs "https://github.com/1remote/1remote/blob/main/Ui/View/Host/TabWindowViewModel.cs"
click node_rdphost "https://github.com/1remote/1remote/blob/main/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs"
click node_protocols "https://github.com/1remote/1remote/tree/main/Ui/Model/Protocol"
click node_filetransfer "https://github.com/1remote/1remote/tree/main/Ui/Model/Protocol/FileTransmit"
click node_externalrunners "https://github.com/1remote/1remote/blob/main/Ui/Model/ProtocolRunner/ExternalRunner.cs"
click node_remoteapps "https://github.com/1remote/1remote/blob/main/Ui/Model/Protocol/RdpApp.cs"
click node_ftpservice "https://github.com/1remote/1remote/blob/main/Ui/Model/Protocol/FTP.cs"
click node_externaldb "https://github.com/1remote/1remote/tree/main/Ui/Service/DataSource/Model"

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_profilesdata,node_tags,node_datasources,node_database,node_settings,node_importer,node_externaldb,node_user toneBlue
class node_mainui,node_servers,node_launcher,node_editor toneAmber
class node_sessioncontrol,node_runner,node_hosts,node_tabs toneMint
class node_rdphost,node_protocols,node_filetransfer,node_externalrunners,node_remoteapps,node_ftpservice toneRose
class node_externaltools toneIndigo
```

## Components

### Profiles and storage

- [Protocol profiles](https://github.com/1remote/1remote/tree/main/Ui/Model/Protocol): `Ui/Model/Protocol`
- [Tags and filters](https://github.com/1remote/1remote/blob/main/Ui/Model/Tag.cs): `Ui/Model/Tag.cs`
- [Data sources](https://github.com/1remote/1remote/blob/main/Ui/Service/DataSource/DataSourceService.cs): `Ui/Service/DataSource/DataSourceService.cs`
- [Profile database](https://github.com/1remote/1remote/blob/main/Ui/Service/DataSource/DAO/Dapper/DapperDataBase.cs): `Ui/Service/DataSource/DAO/Dapper/DapperDataBase.cs`
- [App settings](https://github.com/1remote/1remote/blob/main/Ui/Service/ConfigurationService.cs): `Ui/Service/ConfigurationService.cs`
- [mRemoteNG import](https://github.com/1remote/1remote/blob/main/Ui/Utils/mRemoteNG/mRemoteNGImporter.cs): `Ui/Utils/mRemoteNG/mRemoteNGImporter.cs`
- [Configured databases](https://github.com/1remote/1remote/tree/main/Ui/Service/DataSource/Model): `Ui/Service/DataSource/Model`

### Browse and configure

- [Main window](https://github.com/1remote/1remote/blob/main/Ui/View/MainWindowViewModel.cs): `Ui/View/MainWindowViewModel.cs`
- [Server browser](https://github.com/1remote/1remote/tree/main/Ui/View/ServerView): `Ui/View/ServerView`
- [Quick launcher](https://github.com/1remote/1remote/tree/main/Ui/View/Launcher): `Ui/View/Launcher`
- [Connection editor](https://github.com/1remote/1remote/tree/main/Ui/View/Editor): `Ui/View/Editor`

### Connect and host

- [Session control](https://github.com/1remote/1remote/blob/main/Ui/Service/SessionControlService.cs): `Ui/Service/SessionControlService.cs`
- [Runner selection](https://github.com/1remote/1remote/blob/main/Ui/Model/ProtocolRunner/RunnerHelper.cs): `Ui/Model/ProtocolRunner/RunnerHelper.cs`
- [Session hosts](https://github.com/1remote/1remote/blob/main/Ui/View/Host/ProtocolHosts/HostBase.cs): `Ui/View/Host/ProtocolHosts/HostBase.cs`
- [Tabbed windows](https://github.com/1remote/1remote/blob/main/Ui/View/Host/TabWindowViewModel.cs): `Ui/View/Host/TabWindowViewModel.cs`

### Protocol integrations

- [RDP host](https://github.com/1remote/1remote/blob/main/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs): `Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs`
- [Protocol models](https://github.com/1remote/1remote/tree/main/Ui/Model/Protocol): `Ui/Model/Protocol`
- [File transfer](https://github.com/1remote/1remote/tree/main/Ui/Model/Protocol/FileTransmit): `Ui/Model/Protocol/FileTransmit`
- [Custom runners](https://github.com/1remote/1remote/blob/main/Ui/Model/ProtocolRunner/ExternalRunner.cs): `Ui/Model/ProtocolRunner/ExternalRunner.cs`
- [Remote and local apps](https://github.com/1remote/1remote/blob/main/Ui/Model/Protocol/RdpApp.cs): `Ui/Model/Protocol/RdpApp.cs`
- [FTP service](https://github.com/1remote/1remote/blob/main/Ui/Model/Protocol/FTP.cs): `Ui/Model/Protocol/FTP.cs`

### Other components

- **User**
- **External tools**

## Connections

- User → Main window: uses
- Main window → Server browser: shows
- Main window → Quick launcher: opens
- User → Quick launcher: searches
- User → Connection editor: edits profiles
- Server browser → Protocol profiles: displays
- Server browser → Tags and filters: filters by
- Connection editor → Protocol profiles: configures
- Connection editor → App settings: reads settings
- Protocol profiles → Data sources: loaded through
- Data sources → Profile database: reads and writes
- Data sources → Configured databases: connects to
- User → mRemoteNG import: imports
- mRemoteNG import → Data sources: adds profiles
- Quick launcher → Session control: requests connection
- Server browser → Session control: requests connection
- Session control → Runner selection: selects runner
- Session control → Protocol models: connects profile
- Session control → Session hosts: creates host
- Session control → Tabbed windows: manages windows
- Session hosts → RDP host: hosts RDP
- Runner selection → Custom runners: may select
- Custom runners → External tools: launches
- Protocol models → File transfer: supports transfer
- Session hosts → File transfer: hosts transfer UI
- Protocol models → Remote and local apps: includes app sessions
- Runner selection → FTP service: may select
