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.3.0.tar.gz (42.7 kB view details)

Uploaded Source

Built Distributions

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

verg-0.3.0-py3-none-manylinux_2_28_x86_64.whl (1.6 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

verg-0.3.0-py3-none-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

verg-0.3.0-py3-none-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: verg-0.3.0.tar.gz
  • Upload date:
  • Size: 42.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for verg-0.3.0.tar.gz
Algorithm Hash digest
SHA256 1426786d057663a2338537bacc0e9a6c564d04d3ec1703946c5ba85c3f9efd98
MD5 db17f4076e263f005fe774d232a9522f
BLAKE2b-256 a6c1098a5c263daf1f3acdd90c34aa9f0fccef4dfcc34660222831f886ce1b5c

See more details on using hashes here.

File details

Details for the file verg-0.3.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: verg-0.3.0-py3-none-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: Python 3, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for verg-0.3.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 44695cb8b192d0692cbef2335f7a9a3f4bd189d0f1bb703fbbbb3a7cd88a372f
MD5 1c4917ab3ed4744a737f661bcb262d9f
BLAKE2b-256 ac2c447121940a19b6df15275482e700fff7f1b8dc1fe9685032786b5110cf09

See more details on using hashes here.

File details

Details for the file verg-0.3.0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for verg-0.3.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ca9355a6511aa69160df06a0bda6c662f1f7c5441be335748b35f6089f713752
MD5 82adb1dcb99adfac9c26cd7529e22881
BLAKE2b-256 0d35b7c0ccca864f1dc02d3add029c78fc52269be16b5fe9a4b5facabeca4126

See more details on using hashes here.

File details

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

File metadata

  • Download URL: verg-0.3.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for verg-0.3.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a4b35735f7725d77d7d50d37a6f6860bddb45a9a4ee338aaafc3a525fa402c64
MD5 572669f723c1447167268d93572bbbdc
BLAKE2b-256 101810b4bf9b998a3d37f66845f7e6a5fc35f4018fca7adb0453e23afba453cd

See more details on using hashes here.

File details

Details for the file verg-0.3.0-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for verg-0.3.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fef2970ce23419f153aef9c034968f54cd43787f5b957fb973a453c09603a4ee
MD5 6028e21fad68a4e96b34d3bd2c47e285
BLAKE2b-256 0a75f46cf2622f4ed8644c9082a68acfe1a4855615baa5cf3150ed4a7072e5ae

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