Skip to main content

Desired-state infrastructure convergence engine

Project description

verg

Desired-state infrastructure convergence engine. A fast, stateless alternative to Ansible, built in Rust.

Features

  • Fast — pushes a single static binary to targets over SSH, executes locally. No Python, no per-task SSH round-trips.
  • Predictable — stateless convergence. Every run checks reality and converges. No state files.
  • Simple — TOML declarations. No YAML, no Jinja2, no variable precedence maze.
  • Agent-friendly--json output, schema command, structured exit codes. Built for both humans and AI agents.

Quick Start

# Install
cargo install verg

# Initialize a project
verg init

# Edit hosts and state
vim verg/hosts.toml
vim verg/state/base.toml

# Preview changes
verg diff --targets all

# Apply
verg apply --targets all

How It Works

  1. Declare desired state in TOML files under verg/state/
  2. Define hosts in verg/hosts.toml with group assignments
  3. Run verg apply — the tool pushes a binary to each target over SSH, which checks current state and converges

Resource Types

Type Description
pkg System packages (apt, dnf, pacman — auto-detected)
file Files and directories (content, permissions, ownership)
service Systemd services (running/stopped, enabled/disabled)
cmd Run a command (requires idempotency guard)
user System users (create/remove)

Example

# verg/hosts.toml
[hosts.web1]
address = "192.168.1.10"
user = "root"
groups = ["web"]

# verg/state/web.toml
targets = ["web"]

[resource.pkg.nginx]
name = "nginx"
state = "present"

[resource.file.nginx-conf]
path = "/etc/nginx/nginx.conf"
content = "server { listen {{ http_port }}; }"
after = ["pkg.nginx"]

[resource.service.nginx]
name = "nginx"
state = "running"
enabled = true
after = ["file.nginx-conf"]

Commands

Command Description
verg apply -t <targets> Converge targets to desired state
verg diff -t <targets> Show what would change (dry-run)
verg check -t <targets> Verify targets match desired state
verg schema Print resource type schemas as JSON
verg init Scaffold a new project
verg completions <shell> Generate shell completions

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

verg-0.1.0.tar.gz (32.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

verg-0.1.0-py3-none-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file verg-0.1.0.tar.gz.

File metadata

  • Download URL: verg-0.1.0.tar.gz
  • Upload date:
  • Size: 32.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for verg-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d9c3cf4fef4c8acb4a926ffc13ce3b4d8bc9e3f00a5b3aa9da6d62661a0ef64e
MD5 0aab0dfa6e2345f112a835fc97f86f46
BLAKE2b-256 ccf41e0e9af693cd50c3f334730db6bfb401c20a682686b2e5c5c43bb22e9def

See more details on using hashes here.

File details

Details for the file verg-0.1.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for verg-0.1.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7820b1d5d16ea3d100db39df5ed59a3ae01c7333f0038c137a629f8cb19e6de4
MD5 dae58c9ee855d7794b45f0c66a6bf2b9
BLAKE2b-256 25149d20ecb2f735af04750e87071542bb36915ec8ba6d3720e9183d415a3d9c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page