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.4.0.tar.gz (46.9 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.4.0-py3-none-manylinux_2_28_x86_64.whl (1.6 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

verg-0.4.0-py3-none-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

verg-0.4.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.4.0.tar.gz.

File metadata

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

File hashes

Hashes for verg-0.4.0.tar.gz
Algorithm Hash digest
SHA256 b8cd06968e1a54760f5bd9a098b5b9e6c74c0c05251693e5d030109dad1e6647
MD5 429dc815826de7aceecf2a06245201bf
BLAKE2b-256 91282520044af275ac783861c1846737281f5bf8ec26d5739dd46ca1bac65e9d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: verg-0.4.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.4.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4a0b3f67023550494ba4934daf3bcc5b93bb5c34efebb683ae71c5942665d042
MD5 e03de37ce2cb635148a7a84ea5ece480
BLAKE2b-256 c0c090c1bbd52054216ee39b96405da08db0fc54044f0ee1b3766e7f0697e6f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for verg-0.4.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2ec08022596ab5eba0761769cfdbb0e5f899967640a293aa3501ee984cd5ed47
MD5 7eb64fcc0b87a0f50254b496e1a8e885
BLAKE2b-256 7a8238b98d99def64ab8a9352db054d12a15dabbd823e6eafa598b60097642d5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: verg-0.4.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 1.5 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.4.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ef47d2a6eb4a6e17c204ee8d3d4d6fa11a60063081002933f8f2ea50e032713c
MD5 34bb1c2230d1d7b997c8f3180048f841
BLAKE2b-256 c3e35897cec3e2b1f5f2828479bb480a4274aeee7de412766c3a920418c298d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for verg-0.4.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a70177143124af476fedaac92bc2b4b11c77e5a6e1db741da69bbcabb91a1f45
MD5 68212b1abc682a1e64f028cea67ba49a
BLAKE2b-256 a5c1e4faa545a6dd1e927aa383df82a75c9597d5931366ec5d010a1314298492

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