purple. Terminal SSH Client

Find any server. Connect in a keystroke.

$ curl -fsSL getpurple.sh | sh

or brew install erickochen/purple/purple or cargo install purple-ssh

Your SSH config has 200 hosts. You need the right one now. purple gives you instant search, visual file transfer and cloud sync in a TUI that edits your ~/.ssh/config directly. No context switching.

Instant access

Search 500 hosts, connect in a keystroke. Frecency sorting learns what you use most.

Visual file transfer

Dual-pane explorer. Browse remote files, copy with Enter. No scp paths to remember.

11-provider cloud sync

AWS, GCP, Azure and 8 more. Servers sync in. Decommissioned ones get flagged, not lost.

SSH client features

SearchFuzzy search across aliases, hostnames, users and tags
SnippetsRun the same command on 50 servers. Sequential or parallel
TagsOrganize by environment, team or project. Filter with #tags
Docker & PodmanManage containers on remote hosts over SSH. Start, stop and restart without leaving the terminal. Auto-detects Docker or Podman. No agent. No web UI.
TunnelsManage port forwards per host. Start and stop from the TUI
Round-trip fidelityComments, formatting and unknown directives stay untouched
SSH keysBrowse keys with metadata and see which hosts use each key
Soft-deleteDisappeared cloud hosts are dimmed, not deleted. Purge when ready
Bulk importMigrate from hosts files or known_hosts in one command
Atomic writesTemp file, chmod 600, rename. With automatic backups
Detail panelConnection info, activity, provider metadata, tunnels and snippets
PingCheck which servers are reachable before you connect

Cloud provider SSH sync

Pull servers from eleven cloud providers directly into your ~/.ssh/config. Sync adds new hosts, updates changed IPs and stores provider tags separately. Your own tags are never touched. Provider metadata (region, plan, OS, status) is stored in config comments and displayed in the detail panel.

AWS EC2 Azure DigitalOcean GCP Hetzner Linode Proxmox VE Scaleway Tailscale UpCloud Vultr

Preview changes with --dry-run. Remove deleted hosts with --remove.

Your config, respected

purple reads and writes ~/.ssh/config directly with full round-trip fidelity. Comments, indentation, unknown directives, CRLF line endings and Include files are all preserved. Every write is atomic with automatic backups.

Built with Rust

Starts instantly. No dependencies to install. No daemon running in the background. Won't corrupt your config. Single binary. MIT licensed. 4400+ tests.


Who uses purple

SRE managing 200 servers across AWS, GCP and Hetzner. Search, tag and connect in seconds.
Developer transferring config files and logs between servers without typing scp paths.
Freelancer managing client infrastructure across multiple clouds from one TUI.
Sysadmin running the same diagnostic command on 50 servers at once with snippets.
Homelab operator managing Docker stacks across three VPS hosts. View, start and stop containers over SSH without Portainer.

Why purple vs other SSH tools

vs. manual SSH config editing. purple adds search, tags, cloud sync, snippets, password management and a remote file explorer while preserving your existing config.
vs. Termius / Royal TSX. Free, open-source, terminal-native. Edits your real SSH config. No proprietary database, no subscription.
vs. storm / sshs. purple adds a TUI with config editing, cloud sync from 11 providers, file transfer, snippets and password management.
vs. Ansible / Fabric. For interactive SSH management and ad-hoc commands. Snippets provide lightweight multi-host execution without playbooks.
vs. Portainer / Dockhand / Lazydocker. purple manages containers over SSH with no agent and no web UI to host. No extra ports to open. Works with both Docker and Podman. Portainer requires an agent on each host and a web UI. Lazydocker only works locally.

FAQ

What is purple SSH?
A free, open-source terminal SSH client. Search hundreds of hosts, connect instantly, transfer files visually, run commands across servers, sync from eleven cloud providers and handle SSH passwords automatically. Single Rust binary for macOS and Linux.
Can I transfer files between local and remote servers with purple?
Yes. Press f on any host to open the remote file explorer. Local files on the left, remote on the right. Navigate directories, select files and copy between machines with Enter. Works through ProxyJump chains, password sources and active tunnels.
What cloud providers does purple support?
AWS EC2, DigitalOcean, Vultr, Linode (Akamai), Hetzner, UpCloud, Proxmox VE, Scaleway, GCP (Compute Engine), Azure and Tailscale. Each provider is configured with an API token or credentials profile.
How do command snippets work in purple?
Save commands and run them on remote hosts via SSH. Select one host, multiple hosts or all visible hosts from the TUI. The CLI supports tag-based targeting and parallel execution.
How does SSH password management work in purple?
Set a password source per host via the TUI or a global default. When you connect, purple acts as SSH_ASKPASS and retrieves the password automatically. Supported: OS Keychain, 1Password, Bitwarden, pass, HashiCorp Vault and custom commands.
Can I manage Docker or Podman containers with purple?
Yes. Press C on any host to list all containers over SSH. Start, stop and restart without leaving the TUI. Purple auto-detects Docker or Podman. No agent. No web UI. No extra ports.
Does purple modify my existing SSH config?
Only when you add, edit, delete or sync. All writes are atomic with automatic backups.
Will purple break my SSH config comments or formatting?
No. Comments, indentation and unknown directives are preserved through every read-write cycle.
Does purple need a daemon or background process?
No. Single binary. Run it, use it, close it.
Does purple send my SSH config anywhere?
No. Your config never leaves your machine. Provider sync calls cloud APIs to fetch server lists. The TUI checks GitHub for new releases on startup (cached 24 hours).
Can I use purple with SSH Include files?
Yes. Hosts from Include files are displayed in the TUI but never modified. Resolved recursively up to depth 16 with tilde and glob expansion.
How do I sync Google Cloud (GCP) instances with purple?
Run purple provider add gcp --token /path/to/sa-key.json --project my-project. Pass a service account JSON key file. Purple creates a JWT and exchanges it for an access token automatically. Or pass a raw token from gcloud auth print-access-token.
How do I sync Azure VMs with purple?
Run purple provider add azure --token /path/to/sp.json --regions SUBSCRIPTION_ID. Pass a service principal JSON file (supports az CLI and portal formats) or a raw access token. Use comma-separated subscription IDs for multi-subscription sync.
Is purple a Portainer alternative?
For container visibility and basic lifecycle control (start, stop, restart) over SSH, yes. Press C on any host to see its containers. No agent to install, no web UI to host, no ports to open. Works with Docker and Podman. Purple does not provide container creation, registry management or role-based access control.
How does purple compare to Lazydocker?
Lazydocker manages Docker locally on the host where it is installed. purple manages containers on remote servers over SSH from your local machine. Use Lazydocker for single-host local management. Use purple for multi-host remote management across your fleet.
$ curl -fsSL getpurple.sh | sh