$git clone https://github.com/erickochen/purplepurple is a free, open-source terminal SSH manager and SSH config editor in Rust for macOS and Linux that keeps `~/.ssh/config` in sync with 16 cloud providers, monitors live SSH tunnels and manages Docker and Podman containers fleet-wide.
| 1 | <p align="center"> |
| 2 | <img src="site/purple-logo.svg" alt="purple" width="213" height="48"> |
| 3 | </p> |
| 4 | |
| 5 | <p align="center"><b>Your ssh config, synced with your cloud.</b></p> |
| 6 | |
| 7 | <p align="center"> |
| 8 | <a href="https://crates.io/crates/purple-ssh"><img src="https://img.shields.io/crates/v/purple-ssh?color=b44aff&labelColor=0a0a14" alt="crates.io"></a> |
| 9 | <a href="https://crates.io/crates/purple-ssh"><img src="https://img.shields.io/crates/d/purple-ssh?color=b44aff&labelColor=0a0a14" alt="downloads"></a> |
| 10 | <a href="https://github.com/erickochen/purple/stargazers"><img src="https://img.shields.io/github/stars/erickochen/purple?color=b44aff&labelColor=0a0a14" alt="stars"></a> |
| 11 | <a href="LICENSE"><img src="https://img.shields.io/badge/license-mit-b44aff?labelColor=0a0a14" alt="mit"></a> |
| 12 | <a href="https://ratatui.rs/"><img src="https://img.shields.io/badge/built_with-ratatui-b44aff?labelColor=0a0a14&logo=ratatui&logoColor=fff" alt="built with ratatui"></a> |
| 13 | <a href="https://getpurple.sh"><img src="https://img.shields.io/badge/website-getpurple.sh-00f0ff?labelColor=0a0a14" alt="Website"></a> |
| 14 | </p> |
| 15 | |
| 16 | **purple is a free, open-source terminal SSH manager and SSH config editor in Rust for macOS and Linux that keeps `~/.ssh/config` in sync with 16 cloud providers, monitors live SSH tunnels and manages Docker and Podman containers fleet-wide.** |
| 17 | |
| 18 | Spin up a VM on AWS, GCP, Azure, Hetzner, Proxmox or 11 other cloud providers and it's in your host list before the console catches up. Kill one and purple marks it stale, so your list never lies. No more hand-editing `~/.ssh/config` after every Terraform run, no more digging through cloud consoles for the right IP. |
| 19 | |
| 20 | Everything else you do over SSH lives in the same terminal: fuzzy search across hundreds of hosts, visual file transfer, multi-host SSH key push, short-lived HashiCorp Vault SSH certificates and an MCP server for AI agents. Keyboard-driven. Single binary. MIT licensed. |
| 21 | |
| 22 |  |
| 23 | |
| 24 | ## Install |
| 25 | |
| 26 | ``` |
| 27 | curl -fsSL getpurple.sh | sh |
| 28 | ``` |
| 29 | |
| 30 | <details> |
| 31 | <summary>brew, cargo, nix, AUR or from source</summary> |
| 32 | |
| 33 | ``` |
| 34 | brew install erickochen/purple/purple |
| 35 | ``` |
| 36 | ``` |
| 37 | cargo install purple-ssh |
| 38 | ``` |
| 39 | ``` |
| 40 | nix profile install github:erickochen/purple |
| 41 | ``` |
| 42 | ``` |
| 43 | paru -S purple-bin |
| 44 | ``` |
| 45 | ``` |
| 46 | yay -S purple-bin |
| 47 | ``` |
| 48 | ``` |
| 49 | git clone https://github.com/erickochen/purple.git |
| 50 | cd purple && cargo build --release |
| 51 | ``` |
| 52 | </details> |
| 53 | |
| 54 | Claude Desktop users can install the [.mcpb bundle](https://github.com/erickochen/purple/releases/latest) for one-click MCP integration (read-only by default). Setup details on the [MCP Server wiki](https://github.com/erickochen/purple/wiki/MCP-Server). No data leaves your machine. See [PRIVACY.md](PRIVACY.md). |
| 55 | |
| 56 | Run `purple`. Press `?` on any screen for help. That's it. |
| 57 | |
| 58 | ## Contents |
| 59 | |
| 60 | - [Why I built this](#why-i-built-this) |
| 61 | - [What you get](#what-you-get) |
| 62 | - [How purple compares](#how-purple-compares) |
| 63 | - [How it works](#how-it-works) |
| 64 | - [Links](#links) |
| 65 | |
| 66 | ## Why I built this |
| 67 | |
| 68 | My SSH config was fine. Proper aliases, ProxyJump chains, organized by provider. Not the problem. |
| 69 | |
| 70 | The problem was everything around it. Need to check a container? `ssh host docker ps`. Copy a file? `scp` with the right flags. Run the same command on ten hosts? Write a loop or boot up Ansible for a one-liner. Spin up a VM on Hetzner? Open the console, grab the IP, edit config, save. Someone asks which box runs what? Good luck. |
| 71 | |
| 72 | I wanted one place for all of that. So I built it. |
| 73 | |
| 74 | ## What you get |
| 75 | |
| 76 | ### Your ssh config tracks your infra |
| 77 | |
| 78 | Drop in one API token per provider. New machines land in `~/.ssh/config` the moment they boot, IPs follow instances as they move and decommissioned hosts grey out instead of lingering. 16 providers including AWS, GCP, Azure, Hetzner, DigitalOcean and Proxmox, multiple accounts each. See the [wiki](https://github.com/erickochen/purple/wiki/Cloud-Providers) for the full list. |
| 79 | |
| 80 | ![purple cloud pro |