purple.

SSH config manager with file transfer and cloud sync

$ curl -fsSL getpurple.sh | sh
or via Homebrew: brew install erickochen/purple/purple
or via cargo: cargo install purple-ssh

Manage, connect, transfer and automate across all your SSH servers from one terminal. purple reads your existing ~/.ssh/config, gives you a TUI to search and connect, and writes changes back without touching your comments or formatting.

purple SSH config manager TUI demo: searching hosts, transferring files, connecting via SSH and syncing cloud providers in the terminal

Features

Search. Find any host in under a second. Fuzzy search across aliases, hostnames, users and tags
Cloud sync. Never add a server IP manually again. Sync from 10 cloud providers
File explorer. Transfer files without remembering scp paths. Dual-pane local/remote browsing
Snippets. Run the same command on 50 servers at once. Sequential or parallel
Tags. Organize by environment, team or project. Filter with #tags
Tunnels. Manage port forwards per host. Start and stop from the TUI
Passwords. No plaintext passwords. OS Keychain, 1Password, Bitwarden, pass, HashiCorp Vault, custom commands
Round-trip fidelity. Your comments, formatting and unknown directives stay untouched
SSH keys. Browse keys with metadata and see which hosts use each key
Bulk import. Migrate from hosts files or ~/.ssh/known_hosts in one command
Atomic writes. No half-written configs. Temp file, chmod 600, rename with backups
Detail panel. See connection info, activity, provider metadata, tunnels and snippets at a glance
Ping. Check which servers are reachable before you connect
Self-update. Stay current with purple update

Cloud provider sync

Pull servers from ten cloud providers directly into your ~/.ssh/config. Sync adds new hosts, updates changed IPs and merges tags. Provider metadata (region, plan, OS, status. Proxmox: node, type, status) is stored in config comments and displayed in the detail panel. Tags you add manually are preserved across syncs.

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

Preview changes with --dry-run. Remove deleted hosts with --remove. Replace local tags with --reset-tags.

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 (temp file, chmod 600, rename) with automatic backups.

Built with Rust

Starts instantly. No dependencies to install. No daemon running in the background. Won't corrupt your config (atomic writes, automatic backups, 2900+ tests). Single binary, MIT licensed.

FAQ

What is purple?
A free, open-source SSH config manager for the terminal. Manage hundreds of hosts, transfer files visually, run commands across servers, sync from ten cloud providers and handle SSH passwords automatically. Single Rust binary for macOS and Linux.
Can I transfer files with purple?
Yes. Press f on any host to open the remote file explorer. It shows local files on the left and the remote server on the right. Navigate directories, select files and copy them 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) and Azure. Each provider is configured with an API token or credentials profile. Synced hosts are tracked in your SSH config and updated on each sync.
How do command snippets work?
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. Snippets are stored locally in ~/.purple/snippets.
How does password management work?
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 sources: OS Keychain, 1Password, Bitwarden, pass, HashiCorp Vault and custom commands.
Does purple modify my existing SSH config?
Only when you add, edit, delete or sync. All writes are atomic with automatic backups. Auto-sync runs on startup for providers that have it enabled (configurable per provider).
Will purple break my comments or formatting?
No. purple preserves comments, indentation and unknown directives through every read-write cycle.
Does purple need a daemon or background process?
No. It is a single Rust 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 for 24 hours). No config data is transmitted.
Can I use purple with Include files?
Yes. Hosts from Include files are displayed in the TUI but never modified. purple resolves Include directives recursively (up to depth 5) with tilde and glob expansion.
How do I sync Google Cloud (GCP) instances?
Run purple provider add gcp --token /path/to/sa-key.json --project my-project. Pass a service account JSON key file path as the token. Purple reads the key, creates a JWT and exchanges it for an access token automatically. Alternatively, pass a raw access token from gcloud auth print-access-token. Only compute.readonly scope is required.
How do I sync Azure VMs?
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.
$ curl -fsSL getpurple.sh | sh