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.2.1.tar.gz (38.2 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.2.1-py3-none-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

verg-0.2.1-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.2.1.tar.gz.

File metadata

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

File hashes

Hashes for verg-0.2.1.tar.gz
Algorithm Hash digest
SHA256 71344ab05978240c4553398f987fa34a42c689a8aa027b5468006719410baace
MD5 e16c0eb3e8b78778caabe396a6f077e9
BLAKE2b-256 24755ac33ca1b8a57597e83f59dea2919c14398040746da3fcd572ee289f18db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: verg-0.2.1-py3-none-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 1.5 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.2.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9b767b72ff9faa6b8233ff0544fce4d3c1ba78c82e90704a91620caba5953716
MD5 2121a88c76ad465935c628b85c503a8c
BLAKE2b-256 372f36e6cd6bb250b88f533503c4184a0e6b2e9e4611c719f14873bf189c6c19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for verg-0.2.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9b104e3385c927f0c41c3e4af0366922e55fc45b318c2d8e8c80c97be1426dbb
MD5 762d6346daa9707e8567f5ed70465416
BLAKE2b-256 b818949d1182f2f293f28c99e4bcb40a5a7f1a748fd58ac952590d7c0c4494fc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: verg-0.2.1-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.2.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9da4ffe7c0b9ab80cc40a5eb0ec4d0a540f3ca3e783076efd857badeb3dba0f3
MD5 0c9fcc2ec6d3f8f5dddb052fa118b1fd
BLAKE2b-256 014c0eb2ee31dddd04c2ebf89ecf437bfa7850d0d114d31be1f97268a84eacec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for verg-0.2.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1a45b86eb87405399fc0ab2e135fb09eb238463f6c8b824537d37c01f14c9cb5
MD5 bcbf084ceabb344a3d46672c27892d48
BLAKE2b-256 301db46d7e87cb919785d53198b9b626b910dc460629b139b1843c609ef7c18f

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