Important
Found a security issue? Please follow the security policy — don't open a public issue. Sensitive reports can be PGP-encrypted; the key is published in SECURITY.md.
Hi, I'm scampi — your friendly infrastructure crustacean. I do IaC convergence, garlic buttery smooth.
A declarative system convergence engine. You describe desired system state in scampi; scampi executes idempotent operations to converge reality to that state.
Think Ansible or Terraform, but with:
- Own language instead of YAML/HCL (actual programming, not templating hell)
- Built-in steps instead of plugin sprawl (batteries included)
- Deterministic execution with fail-fast semantics (no half-applied mystery states)
Install scampi (one-time):
curl https://get.scampi.dev | shThen write a config and run it:
# Create a config that renders a template
cat > hello.scampi <<EOF
module main
import "std"
import "std/posix"
import "std/local"
let my_machine = local.target { name = "local" }
std.deploy(name = "hello", targets = [my_machine]) {
posix.template {
desc = "render a greeting"
src = posix.source_inline { content = "Hello {{ .my_val }}!" }
dest = "/tmp/scampi-hello.txt"
data = { "values": { "my_val": "world" } }
perm = "0644"
owner = "$(id -un)"
group = "$(id -gn)"
}
}
EOF
# Show scampi's execution plan
scampi plan hello.scampi
# Check what would happen
scampi check hello.scampi
# Punch it
scampi apply hello.scampi
# Apply a second time — idempotent, nothing to do
scampi apply hello.scampi
# Verify
cat /tmp/scampi-hello.txtStack -v flags on any of those for more detail — quiet is a single summary line, -v shows why (every step's verdict), -vv shows how (op-level detail).
Output styling: --color auto|always|never (auto by default; NO_COLOR is honored) and --ascii for terminals without fancy glyphs.
Prefer building from a checkout? scripts/bootstrap.sh installs the pinned toolchain (mise → Go, just, …) so you don't have to:
git clone https://github.com/scampi-dev/scampi
cd scampi
./scripts/bootstrap.sh # installs the pinned toolchain (or: just setup)
just build # produces ./build/bin/scampiFor ongoing development, just scampi <args> is a rebuild-on-change wrapper that always runs the latest source.
Because configuration drift is inevitable, but suffering through YAML isn't.
scampi ensures your systems stay in the state you declared — idempotent, deterministic, and with error messages that actually help you fix things instead of sending you on a documentation scavenger hunt.
Because naming things is hard, and sometimes the best names have nothing to do with what they do.
scampi is garlic butter shrimp. It's delicious, it's memorable, and it's absurd enough that you'll never forget it. In the grand tradition of infrastructure tools with nonsensical names (git, ansible, terraform), scampi joins the pantheon.
The command is scampi. You're welcome to alias it to whatever you want — scam or scm if you're lazy:
scampi apply
scampi plan
scampi checkIf you're a tech lead who needs to sell your favorite IaC tool to corporate suits, here are some handy backronyms for SCAMPI:
- System Configuration And Management Platform for Infrastructure
- Secure Continuous Automation & Multi-cloud Provisioning for Infrastructure
- Scaled Convergence Assurance Middleware Platform Integration
- Software-defined Compliance Automation Monitoring Pipeline for IT
Or just own it: "We've standardized on scampi for infrastructure convergence." Watch them nod seriously while you're internally screaming about shrimp.
Want to hack on scampi? See CONTRIBUTING.md — covers the build/test workflow, the commit style, and the project's code conventions.
See LICENSE.
🍤 Made with garlic butter and strong opinions
