# timhartmann7/omnyssh architecture

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

## Overview

OmnySSH is a multi-frontend SSH server manager: a desktop GUI and maintained terminal UI use a shared Rust core. Users manage hosts, inspect server health, open SSH terminals, transfer files, run snippets, and configure keys and tunnels. The README documents additional search, streamer mode, themes, and updates. The graph reflects those documented capabilities; several backend links use enclosing source directories because their implementation was not sampled.

Main entry points: [`crates/omnyssh-gui/src/commands`](https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-gui/src/commands) (GUI commands), [`crates/omnyssh/src/main.rs`](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh/src/main.rs) (Terminal app), [`crates/omnyssh-gui/ui/src/lib/screens`](https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-gui/ui/src/lib/screens) (GUI screens), [`crates/omnyssh-core/src/ssh/session.rs`](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/session.rs) (SSH sessions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontends["User frontends"]
  node_gui["Desktop app<br/>[main.rs]"]
  node_tui["Terminal app<br/>[main.rs]"]
end

subgraph group_desktop["Desktop interface"]
  node_webui["GUI screens"]
  node_ipc["GUI IPC"]
  node_commands["GUI commands"]
  node_eventbridge["Event bridge<br/>[bridge.rs]"]
  node_search["Host/session search"]
  node_streamer["Streamer mode<br/>[settings.ts]"]
end

subgraph group_core["Shared SSH core"]
  node_dashboard["Health dashboard"]
  node_sshsession["SSH sessions<br/>[session.rs]"]
  node_terminal["PTY terminal<br/>[pty.rs]"]
  node_sftp["SFTP transfers<br/>[sftp.rs]"]
  node_snippets["Command snippets<br/>[snippets.rs]"]
  node_keysetup["SSH key setup<br/>[key_setup.rs]"]
  node_tunnels["SSH tunnels<br/>[tunnel.rs]"]
  node_discovery["Service discovery<br/>[discovery.rs]"]
  node_updates["In-app updates<br/>[update.rs]"]
end

subgraph group_hostdata["Hosts and settings"]
  node_hosts["Host management<br/>[mod.rs]"]
  node_sshconfig["SSH config import<br/>[ssh_config.rs]"]
  node_appconfig["App preferences<br/>[app_config.rs]"]
end

node_user(("User"))
node_server(("SSH servers"))
node_localfiles[("Local filesystem")]
node_releases(("GitHub releases"))

node_user -->|"uses"| node_gui
node_user -->|"uses"| node_tui
node_gui -->|"boots"| node_webui
node_webui -->|"invokes"| node_ipc
node_ipc -->|"dispatches"| node_commands
node_commands -->|"emits events"| node_eventbridge
node_eventbridge -->|"routes events"| node_webui
node_commands -->|"manages hosts"| node_hosts
node_commands -->|"starts sessions"| node_sshsession
node_commands -->|"controls transfers"| node_sftp
node_commands -->|"runs snippets"| node_snippets
node_commands -->|"starts setup"| node_keysetup
node_commands -->|"manages tunnels"| node_tunnels
node_tui -->|"loads hosts"| node_hosts
node_tui -->|"uses sessions"| node_sshsession
node_tui -->|"loads preferences"| node_appconfig
node_hosts -->|"imports entries"| node_sshconfig
node_hosts -->|"persists hosts"| node_appconfig
node_sshsession -->|"connects"| node_server
node_terminal -->|"opens PTY"| node_sshsession
node_sftp -->|"opens subsystem"| node_sshsession
node_keysetup -->|"configures access"| node_server
node_dashboard -->|"probes metrics"| node_server
node_discovery -->|"detects services"| node_server
node_sftp -->|"reads/writes"| node_localfiles
node_search -->|"navigates"| node_webui
node_streamer -->|"masks addresses"| node_webui
node_updates -.->|"checks/downloads"| node_releases
node_gui -.->|"checks updates"| node_updates
node_tui -.->|"checks updates"| node_updates

click node_gui "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-gui/src/main.rs"
click node_tui "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh/src/main.rs"
click node_webui "https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-gui/ui/src/lib/screens"
click node_ipc "https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-gui/ui/src/lib/ipc"
click node_commands "https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-gui/src/commands"
click node_eventbridge "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-gui/src/bridge.rs"
click node_dashboard "https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-core/src/ssh"
click node_sshsession "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/session.rs"
click node_terminal "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/pty.rs"
click node_sftp "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/sftp.rs"
click node_snippets "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/config/snippets.rs"
click node_keysetup "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/key_setup.rs"
click node_tunnels "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/tunnel.rs"
click node_discovery "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/discovery.rs"
click node_hosts "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/config/mod.rs"
click node_sshconfig "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/config/ssh_config.rs"
click node_appconfig "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/config/app_config.rs"
click node_search "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-gui/ui/src/lib/components/CommandPalette.svelte"
click node_streamer "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-gui/ui/src/lib/stores/settings.ts"
click node_updates "https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/update.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_gui,node_tui,node_user toneBlue
class node_webui,node_ipc,node_commands,node_eventbridge,node_search,node_streamer,node_localfiles toneAmber
class node_dashboard,node_sshsession,node_terminal,node_sftp,node_snippets,node_keysetup,node_tunnels,node_discovery,node_updates,node_server toneMint
class node_hosts,node_sshconfig,node_appconfig toneRose
class node_releases toneIndigo
```

## Components

### User frontends

- [Desktop app](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-gui/src/main.rs): `crates/omnyssh-gui/src/main.rs`
- [Terminal app](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh/src/main.rs): `crates/omnyssh/src/main.rs`

### Desktop interface

- [GUI screens](https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-gui/ui/src/lib/screens): `crates/omnyssh-gui/ui/src/lib/screens`
- [GUI IPC](https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-gui/ui/src/lib/ipc): `crates/omnyssh-gui/ui/src/lib/ipc`
- [GUI commands](https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-gui/src/commands): `crates/omnyssh-gui/src/commands`
- [Event bridge](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-gui/src/bridge.rs): `crates/omnyssh-gui/src/bridge.rs`
- [Host/session search](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-gui/ui/src/lib/components/CommandPalette.svelte): `crates/omnyssh-gui/ui/src/lib/components/CommandPalette.svelte`
- [Streamer mode](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-gui/ui/src/lib/stores/settings.ts): `crates/omnyssh-gui/ui/src/lib/stores/settings.ts`

### Shared SSH core

- [Health dashboard](https://github.com/timhartmann7/omnyssh/tree/main/crates/omnyssh-core/src/ssh): `crates/omnyssh-core/src/ssh`
- [SSH sessions](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/session.rs): `crates/omnyssh-core/src/ssh/session.rs`
- [PTY terminal](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/pty.rs): `crates/omnyssh-core/src/ssh/pty.rs`
- [SFTP transfers](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/sftp.rs): `crates/omnyssh-core/src/ssh/sftp.rs`
- [Command snippets](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/config/snippets.rs): `crates/omnyssh-core/src/config/snippets.rs`
- [SSH key setup](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/key_setup.rs): `crates/omnyssh-core/src/ssh/key_setup.rs`
- [SSH tunnels](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/tunnel.rs): `crates/omnyssh-core/src/ssh/tunnel.rs`
- [Service discovery](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/ssh/discovery.rs): `crates/omnyssh-core/src/ssh/discovery.rs`
- [In-app updates](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/update.rs): `crates/omnyssh-core/src/update.rs`

### Hosts and settings

- [Host management](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/config/mod.rs): `crates/omnyssh-core/src/config/mod.rs`
- [SSH config import](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/config/ssh_config.rs): `crates/omnyssh-core/src/config/ssh_config.rs`
- [App preferences](https://github.com/timhartmann7/omnyssh/blob/main/crates/omnyssh-core/src/config/app_config.rs): `crates/omnyssh-core/src/config/app_config.rs`

### Other components

- **User**
- **SSH servers**
- **Local filesystem**
- **GitHub releases**

## Connections

- User → Desktop app: uses
- User → Terminal app: uses
- Desktop app → GUI screens: boots
- GUI screens → GUI IPC: invokes
- GUI IPC → GUI commands: dispatches
- GUI commands → Event bridge: emits events
- Event bridge → GUI screens: routes events
- GUI commands → Host management: manages hosts
- GUI commands → SSH sessions: starts sessions
- GUI commands → SFTP transfers: controls transfers
- GUI commands → Command snippets: runs snippets
- GUI commands → SSH key setup: starts setup
- GUI commands → SSH tunnels: manages tunnels
- Terminal app → Host management: loads hosts
- Terminal app → SSH sessions: uses sessions
- Terminal app → App preferences: loads preferences
- Host management → SSH config import: imports entries
- Host management → App preferences: persists hosts
- SSH sessions → SSH servers: connects
- PTY terminal → SSH sessions: opens PTY
- SFTP transfers → SSH sessions: opens subsystem
- SSH key setup → SSH servers: configures access
- Health dashboard → SSH servers: probes metrics
- Service discovery → SSH servers: detects services
- SFTP transfers → Local filesystem: reads/writes
- Host/session search → GUI screens: navigates
- Streamer mode → GUI screens: masks addresses
- In-app updates → GitHub releases: checks/downloads
- Desktop app → In-app updates: checks updates
- Terminal app → In-app updates: checks updates
