Declarative server configuration with plan/apply workflow, automatic rollback on failure, and drift detection. One Rust binary. Zero dependencies.
clad plan connects via SSH, diffs current state against declared state, and shows exactly what will change. Nothing is modified.
If any task fails during clad apply, all completed changes are automatically reversed in LIFO order. Your server never stays half-configured.
clad drift tells you when servers deviate from declared state. No agent needed — just SSH and SHA-256 hashes.
Single binary. No Python runtime. No Ruby gems. No agent on servers. Just SSH.
Define a service pattern once, apply it to 30 services in one line each. Eliminates copy-paste in large deployments.
Multiple hosts apply simultaneously with buffered output. No interleaving, no confusion.
Package checks, service status, file hashes — all batched into minimal SSH round-trips. Fast even over high-latency links.
Migrate from Ansible or SaltStack with one command. Auto-detects format, converts tasks, generates a migration report.
clad plan --out plan.json then clad apply --plan-file plan.json. Review in CI before deploying.
Every apply writes structured JSONL to .clad/audit.jsonl — who changed what, when, on which hosts.
Native Ansible Vault support. Decrypt secrets without Python or ansible-vault CLI.
Packages, services, files, templates, users, cron, sysctl, git, archives, firewall rules — all with idempotent plan checks.
Shapes define a service pattern once. Each service is one line.
Each line generates: binary deploy + systemd unit + service management + restart on change
| Ansible | Terraform | Puppet | Clad | |
|---|---|---|---|---|
| Plan before apply | --check (limited) | Yes | --noop | Yes + saved plans |
| Auto rollback | No | Partial | No | Full LIFO |
| Drift detection | No | Yes | Agent-based | Yes, agentless |
| Dependencies | Python + pip | Single binary | Ruby + agent | Single binary |
| Import existing | N/A | terraform import | N/A | Ansible + Salt |
| Reusable patterns | Roles (verbose) | Modules | Defined types | Shapes (1 line) |
Requires Rust toolchain. Or download the binary from crates.io.