v0.1.0 — Now on crates.io

Know what will change
before you touch the server

Declarative server configuration with plan/apply workflow, automatic rollback on failure, and drift detection. One Rust binary. Zero dependencies.

terminal
_
1.

Plan before you touch

clad plan connects via SSH, diffs current state against declared state, and shows exactly what will change. Nothing is modified.

2.

Rollback on failure

If any task fails during clad apply, all completed changes are automatically reversed in LIFO order. Your server never stays half-configured.

3.

Detect drift

clad drift tells you when servers deviate from declared state. No agent needed — just SSH and SHA-256 hashes.

Everything you need, nothing you don't

Single binary. No Python runtime. No Ruby gems. No agent on servers. Just SSH.

Shapes

Define a service pattern once, apply it to 30 services in one line each. Eliminates copy-paste in large deployments.

Parallel Execution

Multiple hosts apply simultaneously with buffered output. No interleaving, no confusion.

Batched SSH

Package checks, service status, file hashes — all batched into minimal SSH round-trips. Fast even over high-latency links.

Ansible + Salt Import

Migrate from Ansible or SaltStack with one command. Auto-detects format, converts tasks, generates a migration report.

Saved Plans

clad plan --out plan.json then clad apply --plan-file plan.json. Review in CI before deploying.

Audit Log

Every apply writes structured JSONL to .clad/audit.jsonl — who changed what, when, on which hosts.

Vault Decryption

Native Ansible Vault support. Decrypt secrets without Python or ansible-vault CLI.

20+ Actions

Packages, services, files, templates, users, cron, sysctl, git, archives, firewall rules — all with idempotent plan checks.

30 services. 30 lines.

Shapes define a service pattern once. Each service is one line.

clad.yml
shapes:
svc:
binary: "/opt/bin/{{ name }}"
user: app
after: [postgresql]
state: started
roles:
platform:
services:
api-gateway: { shape: svc, port: 3020 }
user-service: { shape: svc, port: 3021 }
billing: { shape: svc, port: 3022 }
analytics: { shape: svc, port: 3023 }
notifications: { shape: svc, port: 3024 }
...

Each line generates: binary deploy + systemd unit + service management + restart on change

How Clad compares

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)

Get started in 30 seconds

# Install
cargo install clad
# Preview changes
clad plan
# Apply
clad apply
# Check for drift
clad drift
# Migrate from Ansible
clad import ./ansible-playbooks/

Requires Rust toolchain. Or download the binary from crates.io.