[package]
name = "purple-ssh"
version = "3.12.3"
edition = "2024"
description = "Open-source terminal SSH manager that keeps ~/.ssh/config in sync with your cloud infra. Spin up a VM on AWS, GCP, Azure, Hetzner or 12 other cloud providers and it appears in your host list. Destroy it and the entry dims. Search hundreds of hosts, transfer files, manage Docker and Podman over SSH, sign Vault SSH certs. Rust TUI, MIT licensed."
license = "MIT"
repository = "https://github.com/erickochen/purple"
homepage = "https://getpurple.sh"
readme = "README.md"
keywords = ["ssh", "ssh-client", "tui", "ssh-manager", "mcp"]
categories = ["command-line-utilities", "development-tools"]
rust-version = "1.86"
exclude = [".github/", ".gitignore", "demo.gif", "demo.webm", "screenshots/", "preview.png"]

[lib]
name = "purple_ssh"
path = "src/lib.rs"

[[bin]]
name = "purple"
path = "src/main.rs"

[dependencies]
ratatui = "0.30"
crossterm = "0.29"
clap = { version = "4", features = ["derive"] }
clap_complete = "4"
dirs = "6"
glob = "0.3"
anyhow = "1"
thiserror = "2"
unicode-width = "0.2.2"
ureq = { version = "3", features = ["json", "native-tls"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sha1 = "0.11"
sha2 = "0.10"
hmac = "0.12"
quick-xml = { version = "0.39", features = ["serde", "serialize"] }
rsa = { version = "0.9", features = ["sha2"] }
base64 = "0.22"
libc = "0.2"
log = "0.4"
simplelog = "0.12"
semver = "1"
nucleo-matcher = "0.3"

# Linux-only: per-socket TCP byte counters via NETLINK_SOCK_DIAG. Used
# by src/tcp_diag.rs to populate live tunnel throughput on the Tunnels
# detail panel without spawning the `ss` userland tool.
[target.'cfg(target_os = "linux")'.dependencies]
netlink-packet-sock-diag = "0.4"
netlink-packet-core = "0.7"
netlink-sys = "0.8"

# musl static builds need OpenSSL compiled from source. Without this,
# native-tls (pulled by ureq) can't find a musl-compatible system openssl
# on Ubuntu CI runners. No effect on glibc/darwin builds.
[target.'cfg(target_env = "musl")'.dependencies]
openssl = { version = "0.10", features = ["vendored"] }

[dev-dependencies]
mockito = "1.7.2"
proptest = "1"
tempfile = "3"

[profile.release]
strip = true
lto = true
opt-level = "z"
