purple.
One terminal for all your SSH servers
$ curl -fsSL getpurple.sh | sh
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.
File explorer
Transfer files without remembering scp paths. Dual-pane local/remote browsing. Select files, copy between machines with Enter. Works through ProxyJump and active tunnels.
Cloud sync
Never add a server IP manually again. Sync from 10 cloud providers into your SSH config. Tags, metadata and IPs updated automatically.
Password management
No plaintext passwords. Retrieve passwords automatically from OS Keychain, 1Password, Bitwarden, pass, HashiCorp Vault or custom commands.
Features
purple updateCloud 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.
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.
Who uses purple
Why purple
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
fon 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 withEnter. 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 fromgcloud auth print-access-token. Onlycompute.readonlyscope 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