Skip to main content

Desired-state infrastructure convergence engine

Project description

CI Crates.io PyPI License: MIT

verg

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

Pre-1.0: verg is under active development. Expect breaking changes between minor versions.

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 with Jinja2 templating where needed. 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.6.1.tar.gz (63.0 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.6.1-py3-none-manylinux_2_28_x86_64.whl (2.3 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

verg-0.6.1-py3-none-manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

verg-0.6.1-py3-none-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

verg-0.6.1-py3-none-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for verg-0.6.1.tar.gz
Algorithm Hash digest
SHA256 82ad55ad464def67223696236c58826d8755373ada703a3d2911d39ae0336d1c
MD5 bbeb93298e79abe70dd8a53732365e2d
BLAKE2b-256 e06ea77ce899368abcf9e6dd9bcc43a5f34761c265a21387bdb75dfa9e9fb553

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for verg-0.6.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7cb697674d1ec659d8a36f065b57372582192df80bb608ab22c450cc6f33c05
MD5 8f0c9fd091380edc09e1b354c6e4e6da
BLAKE2b-256 77bd3e736ccd00496d33520d7410ccc6514a79f2fcc71cb7ef5d75f7fb800d20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for verg-0.6.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ee2ea8361ccc9c4b9ff762cbd58b2102f0d7d5ff6604a3484ee9e0c0b52c840e
MD5 440d49e4011d5d1dc29c36a67354362b
BLAKE2b-256 a771874f1c157aebda4d83e43cd62ae945caf6560fc4aa92b7eb6bf8e1ea86d7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: verg-0.6.1-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.0 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.6.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff72707e57c03ee75bad095f670ee06b156ed6143262c434d111e8c0b47defcb
MD5 069c96db66283448a7ecf6ab937d3cad
BLAKE2b-256 2f63fa65bf52340841a4d5d0a94474e4ce1e375e68adba78c97f0dff64f85c2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for verg-0.6.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 376cfbd2d3ecf9b53dd9b380e21fb94f7389bd6fd93df4fa5addbd1aa589894e
MD5 9af0eefad9144b3ac07a5d18577df48f
BLAKE2b-256 fdb446c968c4810d887794db1e35923cc054a056df2651655b5f5dcbc8cc9143

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