purple-ssh 3.10.1

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.
Documentation
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies.
#
# If you are reading this file be aware that the original Cargo.toml
# will likely look very different (and much more reasonable).
# See Cargo.toml.orig for the original contents.

[package]
edition = "2024"
rust-version = "1.86"
name = "purple-ssh"
version = "3.10.1"
build = "build.rs"
exclude = [
    ".github/",
    ".gitignore",
    "demo.gif",
    "demo.webm",
    "screenshots/",
    "preview.png",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
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."
homepage = "https://getpurple.sh"
readme = "README.md"
keywords = [
    "ssh",
    "ssh-client",
    "tui",
    "ssh-manager",
    "mcp",
]
categories = [
    "command-line-utilities",
    "development-tools",
]
license = "MIT"
repository = "https://github.com/erickochen/purple"

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

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

[[test]]
name = "contract_snapshots"
path = "tests/contract_snapshots.rs"

[[test]]
name = "mcp_e2e"
path = "tests/mcp_e2e.rs"

[[test]]
name = "openssh_ground_truth"
path = "tests/openssh_ground_truth.rs"

[[test]]
name = "proptest_mutations"
path = "tests/proptest_mutations.rs"

[[test]]
name = "proptest_ssh_config"
path = "tests/proptest_ssh_config.rs"

[[test]]
name = "real_world_configs"
path = "tests/real_world_configs.rs"

[[test]]
name = "roundtrip_fidelity"
path = "tests/roundtrip_fidelity.rs"

[[test]]
name = "schema_validation"
path = "tests/schema_validation.rs"

[[test]]
name = "vault_ssh_config_safety"
path = "tests/vault_ssh_config_safety.rs"

[dependencies.anyhow]
version = "1"

[dependencies.base64]
version = "0.22"

[dependencies.clap]
version = "4"
features = ["derive"]

[dependencies.clap_complete]
version = "4"

[dependencies.crossterm]
version = "0.29"

[dependencies.dirs]
version = "6"

[dependencies.glob]
version = "0.3"

[dependencies.hmac]
version = "0.12"

[dependencies.libc]
version = "0.2"

[dependencies.log]
version = "0.4"

[dependencies.nucleo-matcher]
version = "0.3"

[dependencies.quick-xml]
version = "0.39"
features = [
    "serde",
    "serialize",
]

[dependencies.ratatui]
version = "0.30"

[dependencies.rsa]
version = "0.9"
features = ["sha2"]

[dependencies.semver]
version = "1"

[dependencies.serde]
version = "1"
features = ["derive"]

[dependencies.serde_json]
version = "1"

[dependencies.sha1]
version = "0.11"

[dependencies.sha2]
version = "0.10"

[dependencies.simplelog]
version = "0.12"

[dependencies.thiserror]
version = "2"

[dependencies.unicode-width]
version = "0.2.2"

[dependencies.ureq]
version = "3"
features = [
    "json",
    "native-tls",
]

[dev-dependencies.mockito]
version = "1.7.2"

[dev-dependencies.proptest]
version = "1"

[dev-dependencies.tempfile]
version = "3"

[target.'cfg(target_env = "musl")'.dependencies.openssl]
version = "0.10"
features = ["vendored"]

[target.'cfg(target_os = "linux")'.dependencies.netlink-packet-core]
version = "0.7"

[target.'cfg(target_os = "linux")'.dependencies.netlink-packet-sock-diag]
version = "0.4"

[target.'cfg(target_os = "linux")'.dependencies.netlink-sys]
version = "0.8"

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