purple. SSH config manager and host launcher for the terminal
Author: Erick Ochen
Description: Free, open-source SSH config manager, editor and host launcher. TUI with search, tags, tunnels, password management (keychain, 1Password, Bitwarden, pass, Vault), cloud provider sync (DigitalOcean, Vultr, Linode, Hetzner, UpCloud, Proxmox VE) and round-trip fidelity for ~/.ssh/config. Written in Rust. macOS and Linux.
Keywords: SSH config manager, SSH launcher, terminal SSH, TUI SSH, SSH host manager, cloud SSH sync, DigitalOcean SSH, Vultr SSH, Linode SSH, Hetzner SSH, UpCloud SSH, Proxmox SSH, SSH tunnel manager, SSH config editor, Rust SSH tool, purple-ssh, SSH password manager, SSH askpass, SSH keychain, 1Password SSH, Bitwarden SSH

# purple.

SSH config manager and host launcher for the terminal

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

## Features

Search. Fuzzy find across aliases, hostnames, users and tags
Tags. Organize hosts with #tags and filter instantly
Tunnels. Manage SSH port forwards (local, remote, dynamic) per host
Ping. TCP connectivity check from the TUI
Round-trip fidelity. Preserves comments, formatting and unknown directives
Bulk import. From hosts files or ~/.ssh/known_hosts
Passwords. OS Keychain, 1Password, Bitwarden, pass, Vault integration
SSH keys. Browse keys with metadata and linked hosts
Cloud sync. Pull servers from 6 cloud providers into your config
Self-update. Run `purple update`
Atomic writes. Temp file, chmod 600, rename. Automatic backups
Completions. Bash, zsh and fish via `purple --completions`

## Cloud provider sync

Pull servers from six cloud providers directly into your `~/.ssh/config`. Sync adds new hosts, updates changed IPs and merges tags. Tags you add manually are preserved across syncs.

DigitalOcean
Vultr
Linode
Hetzner
UpCloud
Proxmox VE

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

Single binary. No runtime, no daemon, no async framework. 2400+ tests. Zero clippy warnings. MIT licensed.

## FAQ

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. No config data is transmitted.
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.
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.