# demontara/putty architecture

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

- Interactive diagram: https://gitdiagram.com/demontara/putty
- Repository: https://github.com/demontara/putty

## Overview

ConnectBot is an Android terminal client: users configure saved hosts and keys, start a connection, interact with a terminal session, and manage forwarding and session settings. The graph preserves the documented secure-shell product and the source-indexed terminal, transport, host, and key stages. Some important UI and key-management modules are unsampled; only documented or indexed relationships are shown, so uncertain wiring is omitted.

Main entry points: [`app/src/main/java/org/connectbot/service/TerminalBridge.java`](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/service/TerminalBridge.java) (Terminal bridge), [`app/src/main/java/org/connectbot/util/HostDatabase.java`](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/util/HostDatabase.java) (Host database), [`app/src/main/java/org/connectbot/ConsoleActivity.java`](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/ConsoleActivity.java) (Console activity), [`app/src/main/java/org/connectbot/transport/TransportFactory.java`](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/TransportFactory.java) (Transport factory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_configuration["Connection setup"]
  node_hosts_ui["Host list"]
  node_host_editor["Host editor"]
  node_forward_ui["Forward manager"]
  node_port_forward["Forward model"]
end

subgraph group_session["Terminal sessions"]
  node_console["Console activity"]
  node_manager["Session manager"]
  node_bridge["Terminal bridge"]
  node_terminal_view["Terminal view<br/>[TerminalView.java]"]
end

subgraph group_protocol["Terminal and transports"]
  node_transport_factory["Transport factory"]
  node_transport_base["Transport base<br/>[AbsTransport.java]"]
  node_ssh["SSH transport<br/>[SSH.java]"]
  node_telnet["Telnet transport<br/>[Telnet.java]"]
  node_local["Local transport<br/>[Local.java]"]
  node_telnet_protocol["Telnet protocol"]
  node_vt320["VT320 emulator<br/>[vt320.java]"]
end

subgraph group_identity["Keys and security"]
  node_pubkey_ui["Key list"]
  node_key_generator["Key generation"]
  node_key_model["Key model<br/>[PubkeyBean.java]"]
  node_key_db[("Key database")]
  node_key_utils["Key utilities<br/>[PubkeyUtils.java]"]
end

subgraph group_persistence["Saved state"]
  node_host_model["Host model<br/>[HostBean.java]"]
  node_host_db[("Host database<br/>[HostDatabase.java]")]
  node_host_storage["Host storage API<br/>[HostStorage.java]"]
end

node_user(("Android user"))
node_external_server(("Remote server"))

node_user -->|"selects host"| node_hosts_ui
node_hosts_ui -->|"loads hosts"| node_host_db
node_hosts_ui -->|"binds service"| node_manager
node_user -->|"edits settings"| node_host_editor
node_host_editor -->|"saves host"| node_host_db
node_host_db -.->|"implements"| node_host_storage
node_host_model -->|"maps values"| node_host_db
node_user -->|"opens session"| node_console
node_console -->|"binds service"| node_manager
node_console -->|"creates view"| node_terminal_view
node_console -->|"uses bridge"| node_bridge
node_manager -->|"manages sessions"| node_bridge
node_bridge -.->|"selects transport"| node_transport_factory
node_transport_factory -->|"creates SSH"| node_ssh
node_transport_factory -->|"creates Telnet"| node_telnet
node_transport_factory -->|"creates local"| node_local
node_ssh -->|"extends"| node_transport_base
node_telnet -.->|"extends"| node_transport_base
node_local -.->|"extends"| node_transport_base
node_telnet -.->|"uses protocol"| node_telnet_protocol
node_bridge -.->|"renders terminal"| node_vt320
node_vt320 -.->|"updates display"| node_terminal_view
node_ssh -.->|"connects securely"| node_external_server
node_user -->|"configures forwards"| node_forward_ui
node_forward_ui -->|"loads forwards"| node_host_db
node_forward_ui -.->|"edits rules"| node_port_forward
node_bridge -->|"loads rules"| node_port_forward
node_user -->|"manages keys"| node_pubkey_ui
node_pubkey_ui -->|"loads keys"| node_key_db
node_pubkey_ui -->|"starts generation"| node_key_generator
node_key_generator -.->|"generates keys"| node_key_utils
node_key_db -->|"maps records"| node_key_model
node_ssh -->|"uses credentials"| node_key_model
node_manager -->|"loads keys"| node_key_db

click node_hosts_ui "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/HostListActivity.java"
click node_host_editor "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/HostEditorFragment.java"
click node_forward_ui "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/PortForwardListActivity.java"
click node_console "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/ConsoleActivity.java"
click node_manager "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/service/TerminalManager.java"
click node_bridge "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/service/TerminalBridge.java"
click node_terminal_view "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/TerminalView.java"
click node_transport_factory "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/TransportFactory.java"
click node_transport_base "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/AbsTransport.java"
click node_ssh "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/SSH.java"
click node_telnet "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/Telnet.java"
click node_local "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/Local.java"
click node_telnet_protocol "https://github.com/demontara/putty/blob/main/app/src/main/java/de/mud/telnet/TelnetProtocolHandler.java"
click node_vt320 "https://github.com/demontara/putty/blob/main/app/src/main/java/de/mud/terminal/vt320.java"
click node_port_forward "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/bean/PortForwardBean.java"
click node_host_model "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/bean/HostBean.java"
click node_host_db "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/util/HostDatabase.java"
click node_host_storage "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/data/HostStorage.java"
click node_pubkey_ui "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/PubkeyListActivity.java"
click node_key_generator "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java"
click node_key_model "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/bean/PubkeyBean.java"
click node_key_db "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/util/PubkeyDatabase.java"
click node_key_utils "https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/util/PubkeyUtils.java"

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_hosts_ui,node_host_editor,node_forward_ui,node_port_forward,node_user toneBlue
class node_console,node_manager,node_bridge,node_terminal_view toneAmber
class node_transport_factory,node_transport_base,node_ssh,node_telnet,node_local,node_telnet_protocol,node_vt320,node_external_server toneMint
class node_pubkey_ui,node_key_generator,node_key_model,node_key_db,node_key_utils toneRose
class node_host_model,node_host_db,node_host_storage toneIndigo
```

## Components

### Connection setup

- [Host list](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/HostListActivity.java): `app/src/main/java/org/connectbot/HostListActivity.java`
- [Host editor](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/HostEditorFragment.java): `app/src/main/java/org/connectbot/HostEditorFragment.java`
- [Forward manager](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/PortForwardListActivity.java): `app/src/main/java/org/connectbot/PortForwardListActivity.java`
- [Forward model](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/bean/PortForwardBean.java): `app/src/main/java/org/connectbot/bean/PortForwardBean.java`

### Terminal sessions

- [Console activity](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/ConsoleActivity.java): `app/src/main/java/org/connectbot/ConsoleActivity.java`
- [Session manager](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/service/TerminalManager.java): `app/src/main/java/org/connectbot/service/TerminalManager.java`
- [Terminal bridge](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/service/TerminalBridge.java): `app/src/main/java/org/connectbot/service/TerminalBridge.java`
- [Terminal view](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/TerminalView.java): `app/src/main/java/org/connectbot/TerminalView.java`

### Terminal and transports

- [Transport factory](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/TransportFactory.java): `app/src/main/java/org/connectbot/transport/TransportFactory.java`
- [Transport base](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/AbsTransport.java): `app/src/main/java/org/connectbot/transport/AbsTransport.java`
- [SSH transport](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/SSH.java): `app/src/main/java/org/connectbot/transport/SSH.java`
- [Telnet transport](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/Telnet.java): `app/src/main/java/org/connectbot/transport/Telnet.java`
- [Local transport](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/transport/Local.java): `app/src/main/java/org/connectbot/transport/Local.java`
- [Telnet protocol](https://github.com/demontara/putty/blob/main/app/src/main/java/de/mud/telnet/TelnetProtocolHandler.java): `app/src/main/java/de/mud/telnet/TelnetProtocolHandler.java`
- [VT320 emulator](https://github.com/demontara/putty/blob/main/app/src/main/java/de/mud/terminal/vt320.java): `app/src/main/java/de/mud/terminal/vt320.java`

### Keys and security

- [Key list](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/PubkeyListActivity.java): `app/src/main/java/org/connectbot/PubkeyListActivity.java`
- [Key generation](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/GeneratePubkeyActivity.java): `app/src/main/java/org/connectbot/GeneratePubkeyActivity.java`
- [Key model](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/bean/PubkeyBean.java): `app/src/main/java/org/connectbot/bean/PubkeyBean.java`
- [Key database](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/util/PubkeyDatabase.java): `app/src/main/java/org/connectbot/util/PubkeyDatabase.java`
- [Key utilities](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/util/PubkeyUtils.java): `app/src/main/java/org/connectbot/util/PubkeyUtils.java`

### Saved state

- [Host model](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/bean/HostBean.java): `app/src/main/java/org/connectbot/bean/HostBean.java`
- [Host database](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/util/HostDatabase.java): `app/src/main/java/org/connectbot/util/HostDatabase.java`
- [Host storage API](https://github.com/demontara/putty/blob/main/app/src/main/java/org/connectbot/data/HostStorage.java): `app/src/main/java/org/connectbot/data/HostStorage.java`

### Other components

- **Android user**
- **Remote server**

## Connections

- Android user → Host list: selects host
- Host list → Host database: loads hosts (evidence: `app/src/main/java/org/connectbot/HostListActivity.java`)
- Host list → Session manager: binds service (evidence: `app/src/main/java/org/connectbot/HostListActivity.java`)
- Android user → Host editor: edits settings
- Host editor → Host database: saves host (evidence: `app/src/main/java/org/connectbot/HostEditorFragment.java`)
- Host database → Host storage API: implements (evidence: `app/src/main/java/org/connectbot/util/HostDatabase.java`)
- Host model → Host database: maps values (evidence: `app/src/main/java/org/connectbot/bean/HostBean.java`)
- Android user → Console activity: opens session
- Console activity → Session manager: binds service (evidence: `app/src/main/java/org/connectbot/ConsoleActivity.java`)
- Console activity → Terminal view: creates view (evidence: `app/src/main/java/org/connectbot/ConsoleActivity.java`)
- Console activity → Terminal bridge: uses bridge (evidence: `app/src/main/java/org/connectbot/ConsoleActivity.java`)
- Session manager → Terminal bridge: manages sessions (evidence: `app/src/main/java/org/connectbot/service/TerminalManager.java`)
- Terminal bridge → Transport factory: selects transport (evidence: `app/src/main/java/org/connectbot/service/TerminalBridge.java`)
- Transport factory → SSH transport: creates SSH (evidence: `app/src/main/java/org/connectbot/transport/TransportFactory.java`)
- Transport factory → Telnet transport: creates Telnet (evidence: `app/src/main/java/org/connectbot/transport/TransportFactory.java`)
- Transport factory → Local transport: creates local (evidence: `app/src/main/java/org/connectbot/transport/TransportFactory.java`)
- SSH transport → Transport base: extends (evidence: `app/src/main/java/org/connectbot/transport/SSH.java`)
- Telnet transport → Transport base: extends (evidence: `app/src/main/java/org/connectbot/transport/Telnet.java`)
- Local transport → Transport base: extends (evidence: `app/src/main/java/org/connectbot/transport/Local.java`)
- Telnet transport → Telnet protocol: uses protocol (evidence: `app/src/main/java/org/connectbot/transport/Telnet.java`)
- Terminal bridge → VT320 emulator: renders terminal (evidence: `app/src/main/java/org/connectbot/service/TerminalBridge.java`)
- VT320 emulator → Terminal view: updates display
- SSH transport → Remote server: connects securely
- Android user → Forward manager: configures forwards
- Forward manager → Host database: loads forwards (evidence: `app/src/main/java/org/connectbot/PortForwardListActivity.java`)
- Forward manager → Forward model: edits rules (evidence: `app/src/main/java/org/connectbot/PortForwardListActivity.java`)
- Terminal bridge → Forward model: loads rules (evidence: `app/src/main/java/org/connectbot/service/TerminalBridge.java`)
- Android user → Key list: manages keys
- Key list → Key database: loads keys (evidence: `app/src/main/java/org/connectbot/PubkeyListActivity.java`)
- Key list → Key generation: starts generation (evidence: `app/src/main/java/org/connectbot/PubkeyListActivity.java`)
- Key generation → Key utilities: generates keys
- Key database → Key model: maps records (evidence: `app/src/main/java/org/connectbot/util/PubkeyDatabase.java`)
- SSH transport → Key model: uses credentials (evidence: `app/src/main/java/org/connectbot/transport/SSH.java`)
- Session manager → Key database: loads keys (evidence: `app/src/main/java/org/connectbot/service/TerminalManager.java`)
